Gateway配合sentinel自定义限流_你知道如何使用阿里Sentinel实现接口限流吗?
Nacos作為注冊(cè)中心和配置中心的基礎(chǔ)教程,到這里先告一段落,后續(xù)與其他結(jié)合的內(nèi)容等講到的時(shí)候再一起拿出來(lái)說(shuō),不然內(nèi)容會(huì)有點(diǎn)跳躍。接下來(lái)我們就來(lái)一起學(xué)習(xí)一下Spring Cloud Alibaba下的另外一個(gè)重要組件:Sentinel。
Sentinel是什么
Sentinel的官方標(biāo)題是:分布式系統(tǒng)的流量防衛(wèi)兵。從名字上來(lái)看,很容易就能猜到它是用來(lái)作服務(wù)穩(wěn)定性保障的。對(duì)于服務(wù)穩(wěn)定性保障組件,如果熟悉Spring Cloud的用戶,第一反應(yīng)應(yīng)該就是Hystrix。但是比較可惜的是Netflix已經(jīng)宣布對(duì)Hystrix停止更新。那么,在未來(lái)我們還有什么更好的選擇呢?除了Spring Cloud官方推薦的resilience4j之外,目前Spring Cloud Alibaba下整合的Sentinel也是用戶可以重點(diǎn)考察和選型的目標(biāo)。
Sentinel的功能和細(xì)節(jié)比較多,一篇內(nèi)容很難介紹完整。所以下面我會(huì)分多篇來(lái)一一介紹Sentinel的重要功能。本文就先從限流入手,說(shuō)說(shuō)如何把Sentinel整合到Spring Cloud應(yīng)用中,以及如何使用Sentinel Dashboard來(lái)配置限流規(guī)則。通過(guò)這個(gè)簡(jiǎn)單的例子,先將這一套基礎(chǔ)配置搭建起來(lái)。
使用Sentinel實(shí)現(xiàn)接口限流
Sentinel的使用分為兩部分:
sentinel-dashboard:與hystrix-dashboard類似,但是它更為強(qiáng)大一些。除了與hystrix-dashboard一樣提供實(shí)時(shí)監(jiān)控之外,還提供了流控規(guī)則、熔斷規(guī)則的在線維護(hù)等功能。
客戶端整合:每個(gè)微服務(wù)客戶端都需要整合sentinel的客戶端封裝與配置,才能將監(jiān)控信息上報(bào)給dashboard展示以及實(shí)時(shí)的更改限流或熔斷規(guī)則等。
下面我們就分兩部分來(lái)看看,如何使用Sentienl來(lái)實(shí)現(xiàn)接口限流。
部署Sentinel Dashboard
補(bǔ)充(2019-04-28):本文案例已升級(jí)Spring Cloud Alibaba 0.2.2,由于該版本中升級(jí)了Sentinel到1.5.2,所以對(duì)sentinel-dashboard做一次升級(jí)。但是sentinel-dashboard的1.5.2版本的打包文件沒(méi)有提供下載,如果一定要該版本的話,需要自己編譯。這里筆者嘗試了一下直接使用1.6.0的sentinel-dashboard,暫時(shí)也沒(méi)有發(fā)現(xiàn)什么問(wèn)題,所以就以這個(gè)版本為例。
下載地址:sentinel-dashboard-1.6.0.jar
其他版本:Sentinel/releases
同以往的Spring Cloud教程一樣,這里也不推薦大家跨版本使用,不然可能會(huì)出現(xiàn)各種各樣的問(wèn)題。
通過(guò)命令啟動(dòng):
java -jar sentinel-dashboard-1.6.0.jar
sentinel-dashboard不像Nacos的服務(wù)端那樣提供了外置的配置文件,比較容易修改參數(shù)。不過(guò)不要緊,由于sentinel-dashboard是一個(gè)標(biāo)準(zhǔn)的spring boot應(yīng)用,所以如果要自定義端口號(hào)等內(nèi)容的話,可以通過(guò)在啟動(dòng)命令中增加參數(shù)來(lái)調(diào)整,比如: -Dserver.port=8888。
默認(rèn)情況下,sentinel-dashboard以8080端口啟動(dòng),所以可以通過(guò)訪問(wèn): localhost:8080來(lái)驗(yàn)證是否已經(jīng)啟動(dòng)成功,如果一切順利的話,可以看到如下頁(yè)面:
注意:只有1.6.0及以上版本,才有這個(gè)簡(jiǎn)單的登錄頁(yè)面。默認(rèn)用戶名和密碼都是 sentinel。對(duì)于用戶登錄的相關(guān)配置可以在啟動(dòng)命令中增加下面的參數(shù)來(lái)進(jìn)行配置:
-Dsentinel.dashboard.auth.username=sentinel: 用于指定控制臺(tái)的登錄用戶名為 sentinel;
-Dsentinel.dashboard.auth.password=123456: 用于指定控制臺(tái)的登錄密碼為 123456;如果省略這兩個(gè)參數(shù),默認(rèn)用戶和密碼均為 sentinel
-Dserver.servlet.session.timeout=7200: 用于指定 Spring Boot 服務(wù)端 session 的過(guò)期時(shí)間,如 7200 表示 7200 秒;60m 表示 60 分鐘,默認(rèn)為 30 分鐘;
輸入賬戶密碼登錄后,可以看到如下頁(yè)面:
upload successful
整合Sentinel
第一步:在Spring Cloud應(yīng)用的 pom.xml中引入Spring Cloud Alibaba的Sentinel模塊:
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-alibaba-sentinel
org.projectlombok
lombok
1.18.2
true
org.springframework.boot
spring-boot-starter-test
test
第二步:在Spring Cloud應(yīng)用中通過(guò) spring.cloud.sentinel.transport.dashboard參數(shù)配置sentinel dashboard的訪問(wèn)地址,比如:
spring.application.name=alibaba-sentinel-rate-limiting
server.port=8001
# sentinel dashboard
spring.cloud.sentinel.transport.dashboard=localhost:8080
第三步:創(chuàng)建應(yīng)用主類,并提供一個(gè)rest接口,比如:
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
@Slf4j
@RestController
static class TestController {
@GetMapping("/hello")
public String hello() {
return "didispace.com";
}
}
}
第四步:啟動(dòng)應(yīng)用,然后通過(guò)postman或者curl訪問(wèn)幾下 localhost:8001/hello接口。
$ curl localhost:8001/hello
didispace.com
此時(shí),在上一節(jié)啟動(dòng)的Sentinel Dashboard中就可以當(dāng)前我們啟動(dòng)的 alibaba-sentinel-rate-limiting這個(gè)服務(wù)以及接口調(diào)用的實(shí)時(shí)監(jiān)控了。具體如下圖所示:
upload successful
配置限流規(guī)則
在完成了上面的兩節(jié)之后,我們?cè)?alibaba-sentinel-rate-limiting服務(wù)下,點(diǎn)擊 簇點(diǎn)鏈路菜單,可以看到如下界面:
upload successful
其中 /hello接口,就是我們上一節(jié)中實(shí)現(xiàn)并調(diào)用過(guò)的接口。通過(guò)點(diǎn)擊 流控按鈕,來(lái)為該接口設(shè)置限流規(guī)則,比如:
upload successful
這里做一個(gè)最簡(jiǎn)單的配置:
閾值類型選擇:QPS
單機(jī)閾值:2
綜合起來(lái)的配置效果就是,該接口的限流策略是每秒最多允許2個(gè)請(qǐng)求進(jìn)入。
點(diǎn)擊 新增按鈕之后,可以看到如下界面:
upload successful
其實(shí)就是左側(cè)菜單中 流控規(guī)則的界面,這里可以看到當(dāng)前設(shè)置的所有限流策略。
驗(yàn)證限流規(guī)則
在完成了上面所有內(nèi)容之后,我們可以嘗試一下快速的調(diào)用這個(gè)接口,看看是否會(huì)觸發(fā)限流控制,比如:
$ curl localhost:8001/hello
didispace.com
$ curl localhost:8001/hello
didispace.com
$ curl localhost:8001/hello
Blocked by Sentinel (flow limiting)
可以看到,快速的調(diào)用兩次 /hello接口之后,第三次調(diào)用被限流了。
代碼示例
本文介紹內(nèi)容的客戶端代碼,示例讀者可以通過(guò)查看下面?zhèn)}庫(kù)中的 alibaba-sentinel-rate-limiting項(xiàng)目:
Github:https://github.com/dyc87112/SpringCloud-Learning/
Gitee:https://gitee.com/didispace/SpringCloud-Learning/
如果您對(duì)這些感興趣,歡迎star、follow、收藏、轉(zhuǎn)發(fā)給予支持!
參考資料
下面是Sentinel的倉(cāng)庫(kù)地址與官方文檔,讀者也可以自己查閱文檔學(xué)習(xí):
Github
Sentinel官方文檔
Spring Cloud Alibaba Sentinel文檔
系列回顧
Spring Cloud Alibaba基礎(chǔ)教程:使用Nacos實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)
Spring Cloud Alibaba基礎(chǔ)教程:支持的幾種服務(wù)消費(fèi)方式
Spring Cloud Alibaba基礎(chǔ)教程:使用Nacos作為配置中心
Nacos配置的加載規(guī)則詳解
Nacos配置的多環(huán)境管理
Nacos配置的多文件加載與共享配置怎么玩?
一起學(xué)習(xí)Nacos的數(shù)據(jù)持久化
Nacos如何進(jìn)行集群部署
專題推薦
Spring Boot基礎(chǔ)教程
Spring Cloud基礎(chǔ)教程
推薦:Spring Cloud Alibaba基礎(chǔ)教程:使用Nacos實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)
上一篇:Spring Cloud Alibaba是大坑么?
?關(guān)注公眾號(hào)
點(diǎn)擊原文
總結(jié)
以上是生活随笔為你收集整理的Gateway配合sentinel自定义限流_你知道如何使用阿里Sentinel实现接口限流吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于PE可执行文件的修改
- 下一篇: 当前FreeBSD的版本