sentinel dashboard 升級

sentinel 提供一個輕量級的開源控制檯,是流量控制、熔斷降級規則統一配置和管理的入口,它爲用戶提供了機器自發現、簇點鏈路自發現、監控、規則配置和推送功能。原始的sentinel控制檯配置的規則只存儲在內存中,客戶端服務配置好規則在應用重啓後會出現丟失的問題,sentinel控制檯的實時監控數據,默認只存儲5分鐘以內的數據。生產環境 sentinel dashboard的使用需改造幾個特性:規則管理及推送持久化到Nacos、實時監控數據存儲在ES、集成用戶中心鑑權。

創建一個maven工程(sentinel-dashboard-plus),引入GitHub上開源的最新release發行版本的sentinel-dashboard.jar到項目工程中,進行sentinel控制檯項目的升級改造。

現引入maven依賴:

<dependency>

<groupId>com.alibaba.csp</groupId>

<artifactId>sentinel-dashboard</artifactId>

<version>1.7.2</version>

</dependency>

規則持久化到Nacos

sentinel自身就支持了多種不同的數據源來持久化規則配置,目前包括:文件配置、Nacos配置、Zookeeper配置、Apollo配置,現使用Nacos配置進行規則持久化改造。

項目pom.xml文件中引入Nacos存儲擴展:

<dependency>

<groupId>com.alibaba.csp</groupId>

<artifactId>sentinel-datasource-nacos</artifactId>

<version>1.7.2</version>

</dependency>

編寫配置規則Nacos存儲配置規則推送及控制檯界面操作Controller接口代碼更改,詳細更改查看項目代碼。

實時監控數據存儲ES

項目pom.xml文件中引入ES依賴:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-elasticsearch</artifactId>

<version>2.2.0.RELEASE</version>

</dependency>

<dependency>

<groupId>io.searchbox</groupId>

<artifactId>jest</artifactId>

<version>6.3.1</version>

</dependency>

<dependency>

<groupId>net.java.dev.jna</groupId>

<artifactId>jna</artifactId>

<version>5.5.0</version>

</dependency>

編寫監控數據相關存儲操作及控制檯請求實時監控數據Controller接口代碼更改,詳細更改查看項目代碼。

集成用戶中心鑑權

暫未實現 ......

微服務應用接入sentinel

  • 在微服務應用pom.xml中引入maven依賴:

    <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>

    <version>0.9.0.RELEASE</version>

    </dependency>


    <dependency>

    <groupId>com.alibaba.csp</groupId>

    <artifactId>sentinel-datasource-nacos</artifactId>

    </dependency>

  • 在微服務應用配置文件中添加配置規則:

    # sentinel dashboard

    spring.cloud.sentinel.transport.dashboard=192.168.32.128:9090


    # sentinel datasource nacos

    spring.cloud.sentinel.datasource.ds.nacos.server-addr=192.168.32.128:8848

    spring.cloud.sentinel.datasource.ds.nacos.data-id=${spring.application.name}-flow-rules

    spring.cloud.sentinel.datasource.ds.nacos.group-id=SENTINEL_GROUP

    #限流規則

    spring.cloud.sentinel.datasource.ds.nacos.rule-type=flow


    # sentinel datasource nacos

    spring.cloud.sentinel.datasource.ds2.nacos.server-addr=192.168.32.128:8848

    spring.cloud.sentinel.datasource.ds2.nacos.data-id=${spring.application.name}-degrade-rules

    spring.cloud.sentinel.datasource.ds2.nacos.group-id=SENTINEL_GROUP

    #熔斷降級規則

    spring.cloud.sentinel.datasource.ds2.nacos.rule-type=degrade


    # sentinel datasource nacos

    spring.cloud.sentinel.datasource.ds3.nacos.server-addr=192.168.32.128:8848

    spring.cloud.sentinel.datasource.ds3.nacos.data-id=${spring.application.name}-param-flow-rules

    spring.cloud.sentinel.datasource.ds3.nacos.group-id=SENTINEL_GROUP

    #熱點參數限流規則

    spring.cloud.sentinel.datasource.ds3.nacos.rule-type=param_flow

  • 登入sentinel控制檯,在簇點鏈路中對需要配置的url資源進行相關規則配置即可。

控制規則描述

流控規則

流量控制用於監控應用流量的QPS或併發線程數等指標,當達到指定的閾值時對流量進行控制以避免瞬時的流量高峯沖垮從而保障應用的高可用性,同一個資源可以創建多條限流規則,FlowSlot會對該資源的所有規則進行遍歷直到有規則觸發或所有規則處理完成。

QPS流量控制

當QPS超過配置的閾值時則採取措施進行流量控制,流量控制效果:快速失敗、Warm Up、 排隊等待。

快速失敗: 默認的流量控制方式,當QPS超過配置的閾值後,新的請求就會立即被拒絕,拒絕方式拋出FlowException。

Warm Up: 預熱/冷啓動方式,當系統長期處於低水位的情況下,當流量突然增加時,直接把系統拉昇到高水位可能把系統瞬間壓垮。通過”冷啓動“讓通過的流量緩慢增加,在一定的時間內增加到閾值的上限,給冷系統一個預熱的時間,避免冷系統被壓垮。

排隊等待: 會嚴格的控制請求通過的時間,即讓請求以均勻的速度通過,對應的是漏桶算法。

併發線程數流量控制

併發線程數限流用於保護業務線程數不被耗盡。例如,當應用所依賴的下游應用由於某種原因導致服務不穩定、響應延遲增加,對於調用者來說,意味着吞吐量下降和更多的線程數佔用,極端情況下甚至導致線程池耗盡。Sentinel 併發線程數限流不負責創建和管理線程池,而是簡單統計當前請求上下文的線程數目,如果超出閾值,新的請求會被立即拒絕,效果類似於信號量隔離。

降級規則

由於調用關係的複雜性,如果調用鏈路中的某個資源不穩定,最終會導致請求發生堆積。Sentinel熔斷降級會在調用鏈路中的某個資源出現不穩定狀態時(例如:調用超時或異常比例升高),對這個資源的請求進行限制讓請求快速失敗,避免影響到其他的資源而導致級聯的錯誤。當資源被降級後,在接下來的降級時間窗口之內,對該資源的調用都自動熔斷(默認行爲是拋出DegradeException)。

降級策略

  • 平均響應時間(RT):

    當1s內持續進入5 個請求,對應的平均響應時間(秒級)均超過閾值(以ms爲單位),那在接下來的時間窗口(以s爲單位)之內,對這個方法的調用都會自動的熔斷(拋出DegradeException)。

  • 異常比例:

    當資源每秒異常總數佔通過量的比值超過閾值之後,資源進入降級狀態,即在接下的時間窗口(以s爲單位)之內,對這個方法的調用都會自動地返回。異常比率的閾值範圍是 [0.0, 1.0] ,代表 0% - 100%。

  • 異常數:

    當資源近一分鐘的異常數目超過閾值之後會進行熔斷,由於統計時間窗口是分鐘級別的,若 timeWindow 小於 60s,則結束熔斷狀態後仍可能再進入熔斷狀態。 異常降級僅針對業務異常,對 Sentinel限流降級本身的異常(BlockException)不生效。

熱點規則

熱點參數限流會統計傳入參數中的熱點參數,並根據配置中的限流閾值與模式,對包含熱點參數的資源調用進行限流,熱點參數限流可以看做一種特殊的流量控制,僅對包含熱點參數的資源調用生效。

詳細可產看 Sentinel 官方文檔: https://github.com/alibaba/Sentinel/wiki

代碼地址: https://github.com/qlmajun/sentinel-dashboard-plus

相關文章