Spring Cloud Alibba教程:Sentinel的使用
什麼是Sentinel
Sentinel,中文翻譯為哨兵,是為微服務提供流量控制、熔斷降級的功能,它和Hystrix提供的功能一樣,可以有效的解決微服務呼叫產生的“雪崩”效應,為微服務系統提供了穩定性的解決方案。隨著Hytrxi進入了維護期,不再提供新功能,Sentinel是一個不錯的替代方案。
- 通常情況,Hystrix採用執行緒池對服務的呼叫進行隔離,Sentinel才用了使用者執行緒對介面進行隔離。
- 二者相比,Hystrxi是服務級別的隔離,Sentinel提供了介面級別的隔離,Sentinel隔離級別更加精細。
- 另外Sentinel直接使用使用者執行緒進行限制,相比Hystrix的執行緒池隔離,減少了執行緒切換的開銷。
- 另外Sentinel的DashBoard提供了線上更改限流規則的配置,也更加的優化。
從官方文件的介紹,Sentinel 具有以下特徵:
豐富的應用場景: Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發流量控制在系統容量可以承受的範圍)、訊息削峰填谷、實時熔斷下游不可用應用等。
完備的實時監控: Sentinel 同時提供實時的監控功能。您可以在控制檯中看到接入應用的單臺機器秒級資料,甚至 500 臺以下規模的叢集的彙總執行情況。
廣泛的開源生態: Sentinel 提供開箱即用的與其它開源框架/庫的整合模組,例如與 Spring
Cloud、Dubbo、gRPC 的整合。您只需要引入相應的依賴並進行簡單的配置即可快速地接入 Sentinel。
完善的 SPI 擴充套件點: Sentinel 提供簡單易用、完善的 SPI 擴充套件點。您可以通過實現擴充套件點,快速的定製邏輯。例如定製規則管理、適配資料來源等。
如何在Spring Cloud中使用Sentinel
Sentinel作為Spring Cloud Alibaba的元件之一,在Spring Cloud專案中使用它非常的簡單。現在以案例的形式來講解如何在Spring
Cloud專案中使用Sentinel。本專案是在之前nacos教程的案例基礎上進行改造。
1. 在工程的pom檔案加上sentinel的SpringCloud起步依賴,程式碼如下:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>0.9.0.RELEASE</version> </dependency>
2. 在工程的配置檔案application.yml檔案中配置,需要新增2個配置:
spring.cloud.sentinel.transport.port: 8719 ,這個埠配置會在應用對應的機器上啟動一個 Http Server,該 Server 會與 Sentinel 控制檯做互動。比如 Sentinel 控制檯新增了1個限流規則,會把規則資料 push 給這個 Http Server 接收,Http Server 再將規則註冊到 Sentinel 中。
spring.cloud.sentinel.transport.dashboard: 8080,這個是SentinelDashBoard的地址。
3. 寫一個RestController,在介面上加上SentinelResource註解就可以了。
關於@SentinelResource 註解,有以下的屬性:
value:資源名稱,必需項(不能為空)
entryType:entry 型別,可選項(預設為EntryType.OUT)
blockHandler
/ blockHandlerClass: blockHandler 對應處理 BlockException 的函式名稱,可選項
fallback:fallback 函式名稱,可選項,用於在丟擲異常的時候提供 fallback 處理邏輯。
啟動Nacos,並啟動nacos-provider專案。文末有原始碼下載連結。
4. SentinelDashBoard
Sentinel控制檯提供一個輕量級的控制檯,它提供機器發現、單機資源實時監控、叢集資源彙總,以及規則管理的功能. Sentinel DashBoard下載地址:https://github.com/alibaba/Sentinel/releases
下載完成後,以以下的命令啟動
java -jarsentinel-dashboard-1.6.1.jar
預設啟動埠為8080,可以-Dserver.port=8081的形式改變預設埠。啟動成功後,在瀏覽器上訪問localhost:8080,就可以顯示Sentinel的登陸介面,登陸名為sentinel,密碼為sentinel。
登陸sentinel dashboard成功後,並多次訪問nacos-provider的localhost:8080/hi介面,在nacos訪問資訊如下:
sentinel dashboard顯示了nacos-provider的介面資源資訊。
在/hi資源處設定介面的限流功能,在“+流控”按鈕點選開設定介面如下,設定閾值型別為 qps,單機閾值為2。
設定成功後可以在流控規則這一欄進行檢視,如圖所示:
測試
多次快速訪問nacos-provider的介面資源http://localhost:8762/hi,可以發現偶爾出現以下的資訊:
Blocked by Sentinel (flow limiting)
正常的返回邏輯為
hi forezp
由以上可只,介面資源/hi的限流規則起到了作用。
在FeignClient中使用Sentinel
1. Hystrix預設整合在Spring Cloud 的FeignClient元件中,Sentinel也可以提供這樣的功能。現以案例的形式來講解如何在FeignClient中使用Sentinel,本案例是在之前的nacos教程案例的nacos-consumer工程上進行改造,除了引入spring-cloud-starter-alibaba-sentinel,還需要引入spring-cloud-starter-openfeign,程式碼如下:
2. 在配置檔案中需要加上sentinel.transport.dashboard配置外,還需要加上feign.sentinel.enabled的配置,程式碼如下:
3. 寫一個FeignClient,呼叫nacos-provider的/hi介面:
4. 寫一個RestController呼叫ProviderClient,程式碼如下:
在FeignClient中,Sentinel為Feign呼叫生成了資源名策略定義,定義規則為httpmethod:protocol://requesturl。啟動nacos-consumer工程,在Sentinel DashBoard生成了如下的資源資訊:
新增流控,QPS為2,在瀏覽器上快速多次點選訪問http://localhost:8763/hi-feign,瀏覽器在正常情況下是能夠正常返回如下的資訊:
hi feign
在被限流的時候返回錯誤資訊。
需要注意的是,被限流的時候FeignClient並不會呼叫nacos-provider的介面,而是在nacos-consumer工程裡直接報錯。
原始碼下載
https://github.com/forezp/SpringCloudLearning/tree/master/springcloud-alibaba/
這個專案:nacos-discovery-sentinel
相關文章
- Spring Cloud Alibaba教程:Sentinel的使用SpringCloud
- Spring Cloud Alibaba基礎教程:使用Sentinel實現介面限流SpringCloud
- Spring Cloud Alibaba基礎教程:Sentinel使用Apollo儲存規則SpringCloud
- Spring Cloud Alibaba基礎教程:Sentinel使用Nacos儲存規則SpringCloud
- Spring Cloud Alibaba SentinelSpringCloud
- 阿里Sentinel支援Spring Cloud Gateway啦阿里SpringCloudGateway
- Spring-Cloud-Alibaba之SentinelSpringCloud
- Spring Cloud Alibaba(9)---Sentinel概述SpringCloud
- Spring Cloud Alibaba元件之SentinelSpringCloud元件
- Spring Cloud Alibaba(四)--Gateway與SentinelSpringCloudGateway
- 當Spring Cloud Alibaba Sentinel碰上Spring Cloud Sleuth會擦出怎樣的火花SpringCloud
- Spring Cloud Alibaba基礎教程:Sentinel Dashboard同步Apollo儲存規則SpringCloud
- Spring Cloud Alibaba基礎教程:Sentinel Dashboard中修改規則同步到NacosSpringCloud
- 最完整的 Spring Cloud 元件-訊息中介軟體 Spring Cloud Stream 使用教程SpringCloud元件
- [Spring-Cloud-Alibaba] Sentinel 規則持久化SpringCloud持久化
- Spring Cloud Alibaba(11)---Sentinel+Nacos持久化SpringCloud持久化
- Spring Cloud Alibaba系列(六)sentinel的實際應用SpringCloud
- Sentinel x Spring Cloud,打造更好用的微服務生態SpringCloud微服務
- spring cloud alibaba系列(二)Sentinel應用的限流管理SpringCloud
- Spring Cloud Alibaba:Sentinel實現熔斷與限流SpringCloud
- Spring Cloud Alibaba | Sentinel: 服務限流基礎篇SpringCloud
- Spring Cloud Alibaba | Sentinel: 服務限流高階篇SpringCloud
- Spring Cloud基礎教程SpringCloud
- 9.Spring Cloud Alibaba Sentinel流控熔斷元件SpringCloud元件
- Spring Cloud Alibaba Sentinel 主要原理和核心類介紹SpringCloud
- Spring Cloud Gateway 整合阿里 Sentinel閘道器限流實戰!SpringCloudGateway阿里
- Spring Cloud Alibaba | Sentinel: 分散式系統的流量防衛兵初探SpringCloud分散式
- Sentinel 成為 Spring Cloud 官方推薦的主流熔斷降級方案SpringCloud
- Spring Cloud Alibaba生態探索:Dubbo、Nacos及Sentinel的完美結合SpringCloud
- Spring Cloud Alibaba - Sentinel入門案例(四)(熱點規則 )SpringCloud
- 記一次spring cloud alibaba+Sentinel監控整合SpringCloud
- Spring Cloud Alibaba(10)---Sentinel控制檯搭建+整合SpringCloudAlibabaSpringCloudGC
- 《重磅 | Sentinel 成為 Spring Cloud 官方推薦的主流熔斷降級方案》SpringCloud
- Spring Cloud Alibaba系列(五)sentinel實現服務限流降級SpringCloud
- 一篇搞定Sentinel-搭建Spring Cloud Alibaba服務元件Sentinel實現服務資源控制SpringCloud元件
- Spring Cloud Alibaba系列——Sentinel降級規則簡介與實踐SpringCloud
- Spring Cloud使用樣例SpringCloud
- Spring Cloud使用總結SpringCloud