1. 程式人生 > >SpringCloud微服務:Sentinel哨兵元件,管理服務限流和降級

SpringCloud微服務:Sentinel哨兵元件,管理服務限流和降級

原始碼地址:[GitHub·點這裡](https://github.com/cicadasmile/spring-cloud-base)||[GitEE·點這裡](https://gitee.com/cicadasmile/spring-cloud-base) # 一、基本簡介 ## 1、概念描述 Sentinel 以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。包括核心的獨立類庫,監控臺,豐富的使用場景驗證。(這似乎是阿里開源元件的一貫作風,極其有特點,且特點很規律) 基本特性圖: ![](https://img2020.cnblogs.com/blog/1691717/202003/1691717-20200322095248072-1277343406.png) `補刀一句`:這種圖很多人可能不在意,但是一般官方給這個圖就是該中介軟體的基本使用思路,與核心功能點。 ## 2、基礎性概念 - 資源管理 資源是Sentinel元件中的核心概念之一。應用伺服器上指令碼,靜態頁面,API介面,檔案圖片等都可以理解為資源,對於Java開發者而言,API介面就是這裡資源的概念。 - 規則配置 Sentinel元件通過流控規則的配置,來指定允許該資源(API介面)通過的請求次數,IP黑白名單,應用服務等。 - 測試效果 `QPS`:每秒查詢率,是一臺伺服器每秒能夠處理的查詢次數。 `TPS`:每秒處理事務數,事務處理整體傾向於整個過程。 # 二、框架環境整合 這裡的環境主要整合Nacos註冊中心,Feign服務,Sentinel哨兵,和Sentinel控制檯。 ## 1、基本依賴 這裡的依賴需要參考官方文件,不同的環境使用不同的依賴,這裡主要適配SpringCloud環境,所以使用如下包即可。 ```xml ``` ## 2、控制檯面板 這裡直接從GitHub下載一個控制檯服務包即可,也可以自己下載原始碼,按照需求修改後自行打包。 ``` java -jar sentinel-dashboard-1.7.1.jar ``` 下載並啟動控制檯服務。 ## 3、服務配置 這裡主要是把用到的兩個服務9001和9002連線到監控臺。 ``` spring: application: name: node09-nacos-9001 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: 127.0.0.1:8848 file-extension: yaml sentinel: transport: port: 9001 dashboard: localhost:8080 ``` 最下面四行檔案是哨兵控制檯的主要配置,注意剛啟動之後控制檯是看不到連線的,有資源被觸發之後才能看到。(附一張首頁效果圖) ![](https://img2020.cnblogs.com/blog/1691717/202003/1691717-20200322095302235-727328133.jpg) # 三、流量控制 ## 1、基本描述 流量控制(flow control),其原理是監控應用流量的 QPS 或併發執行緒數等指標,當達到指定的閾值時對流量進行控制,以避免被瞬時的流量高峰沖垮,從而保障應用的高可用性。 ## 2、限流規則 限流規則主要由下面幾個因素組成。 - resource:資源名,即限流規則的作用物件,對於Java服務端開發而言就是執行的方法; - count: 限流閾值,單位時間內能按照規則通過的請求量; - grade: 限流閾值型別,QPS 或併發執行緒數 ; - limitApp: 流控限制的指定應用來源,若為default則不區分呼叫來源; - strategy: 呼叫關係限流策略,直連,鏈路等; - controlBehavior: 流量控制效果,直接拒絕、Warm Up、勻速排隊; ## 3、基本案例 - 硬編碼 `配置規則` ```java public class FlowRuleConfig { public static void initFlowQpsRule(String resourceName) {