1 sentinel
1.1介紹
隨着微服務的流行,服務和服務之間的穩定性變得越來越重要。
Sentinel 是面向分布式服務架構的流量控制組件,主要以流量為切入點,從限流、流量整形、熔斷降級、系統負載保護、熱點防護等多個維度來幫助開發者保障微服務的穩定性。
Sentinel 具有以下特性
- 豐富的應用場景
Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發流量控制在系統容量可以承受的范圍)、消息削峰填谷、集群流量控制、實時熔斷下游不可用應用等。
- 完備的實時監控
Sentinel 同時提供實時的監控功能。您可以在控制台中看到接入應用的單台機器秒級數據,甚至 500 台以下規模的集群的匯總運行情況
- 廣泛的開源生態
Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應的依賴並進行簡單的配置即可快速地接入 Sentinel。
- 完善的 SPI 擴展點
Sentinel 提供簡單易用、完善的 SPI 擴展接口。您可以通過實現擴展接口來快速地定制邏輯。例如定制規則管理、適配動態數據源等。
1.2 sentinel的基本組成
-
核心庫(Java 客戶端):不依賴任何框架/庫,能夠運行於 Java 7 及以上的版本的運行時環境,可以結合springcloud一起使用
-
控制台(Dashboard):控制台主要負責管理推送規則、監控、集群限流分配管理等,使用賬號密碼登錄,初始賬號密碼都是sentinel
1.3 sentinel的生態
1.4 啟動sentinel
下載好的sentinel就是一個打包好的jar包,可以直接用控制台啟動
java -jar sentinel-dashboard-1.7.2.jar --server.port=自定義端口號
1.5 配置客戶端
1.5.1 已有項目 引入pom依賴
只需要在需要引入sentinel的項目中加入依賴,具體使用的版本號會自動與當前springcloud的版本號對應,比如在springcloud項目的父模塊的pom文件中加入該依賴,也可以在項目的子模塊中引入該依賴,即單獨為模塊引入
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
通過查看GitHub上alibaba提供的springcloud說明文檔可以找到組件和主版本的對應關系,其中seata是做分布式事務的,dubbon是做服務調用的,rocketMQ是消息隊列,nacos是做注冊中心,sentinel是做流量監控的
1.5.2 新項目 springboot骨架創建時啟用
如果是新項目,那么可以在springboot骨架創建項目時就引入這個組件
1.5.3 配置yml
如果是手動引入的sentinel,需要配置sentinel
spring:
application:
name: nacos-order
cloud:
sentinel:
transport:
port: 8719
dashboard: 127.0.0.1:8080
如果是基於springboot-alibaba骨架創建的,那么yml已經配置好了,我們只需要修改部分參數
1.6 控制台頁面
1.6.1 布局
啟動springboot項目,並訪問一次配置了sentient客戶端的模塊后,就可以通過控制台查看到項目,具體使用規則可以看官方在GitHub上的文檔說明
1.6.2 降級規則
可以在控制台新增降級規則,在什么時候進行服務降級,和Hystrix提供的設置很相似
資源名 就是controller的方法的請求路徑
異常比例 就是Hystrix提供的錯誤率
時間窗口 就是降級多少秒才恢復
1.6.3 流控規則
QPS即每秒查詢數
資源名 就是controller的方法的請求路徑
單機閾值 就是單台機器最多發送幾個查詢
1.7 springboot項目中的sentinel實際就是個過濾器
在服務器上啟動sentinel,然后啟動配置了sentinel的springboot項目,此時sentinel在springboot上就是一個過濾器
sentient提供一個網頁端控制台,運維或者開發通過控制台設定規則,然后把控制台上設定好的規則推送到所有裝了sentinel的客戶端上,此時各個客戶端上的sentient就以過濾器的角色執行這些規則,這也就是為什么sentient是低侵入的原因