07,springcloudalibaba_sentinel(流量卫兵)
1,什么是sentinel
隨著微服務的普及,服務調用的穩定性變得越來越重要。Sentinel以“流量”為突破口,在流量控制、斷路、負載保護等多個領域進行工作,保障服務可靠性。
用來在微服務系統中保護微服務對的作用 如何 服務雪崩 服務熔斷 服務降級 就是用來替換hystrix
特性:
-
豐富的應用場景:Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發流量控制在系統容量可以承受的范圍)、消息削峰填谷、集群流量控制、實時熔斷下游不可用應用等。
-
完備的實時監控:Sentinel 同時提供實時的監控功能。您可以在控制臺中看到接入應用的單臺機器秒級數據,甚至 500 臺以下規模的集群的匯總運行情況。
-
廣泛的開源生態:Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應的依賴并進行簡單的配置即可快速地接入 Sentinel。
2,sentinel使用
- sentinel提供了兩個服務組件:一個是 sentinel 用來實現微服務系統中服務熔斷、降級等功能。 這點和hystrix 類似一個是 sentinel dashboard 用來監控微服務系統中流量調用等情況 流控 熔斷 降級 配置。 這點和hystrix dashboard類似2.1. sentinel dashboard的安裝
2.1.1 下載
下載: https://github.com/alibaba/Sentinel/releases
2.1.2 啟動
下載下來的是個jar包,找個目錄保存后使用
- 儀表盤是個jar包可以直接通過java命令啟動 如: java -jar 方式運行 默認端口為 8080 - java -Dserver.port=9191 -jar sentinel-dashboard-1.7.2.jar啟動
2.1.3 訪問web界面
用戶名&密碼: sentinel
2.2 sentinel 實時監控服務
2.2.1 創建sentinel服務
springcloudalibaba_07_sentinel_9964
2.2.1.1 pom文件
<dependencies><!-- 引入springboot的外部依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--引入nacos client的依賴--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--引入sentinel依賴--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></dependency></dependencies>2.2.1.2 配置文件
server.port=9964spring.application.name=sentinelClientspring.cloud.nacos.server-addr=localhost:8848spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}# 開啟sentinel 默認開啟 spring.cloud.sentinel.enabled=true# 連接dashboard spring.cloud.sentinel.transport.dashboard=localhost:9191# 與dashboard通信的端口 spring.cloud.sentinel.transport.port=87192.2.1.3 啟動類
package com.study;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication @EnableDiscoveryClient public class Sentinel9964Application {public static void main(String[] args) {SpringApplication.run(Sentinel9964Application.class, args);} }2.2.1.4 創建調用接口
package com.study.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class SentinelController {@GetMapping("/sentinel/test")public String test(){return "sentinel test ";}@GetMapping("/sentinel/test1")public String test1(){return "sentinel test1 ";} }2.2.1.5 觀察sentinel頁面
默認情況下sentiel為延遲加載,不會在啟動之后立即創建服務監控,需要對服務進行調用時才會初始化
3,sentinel 流量控制
# 0.說明 - 流量控制(flow control),其原理是監控應用流量的 QPS 或并發線程數等指標,當達到指定的閾值時對流量進行控制,以避免被瞬時的流量高峰沖垮,從而保障應用的高可用性。- 同一個資源可以創建多條限流規則。FlowSlot 會對該資源的所有限流規則依次遍歷,直到有規則觸發限流或者所有規則遍歷完畢。- 一條限流規則主要由下面幾個因素組成,我們可以組合這些元素來實現不同的限流效果:resource:資源名,即限流規則的作用對象count: 限流閾值grade: 限流閾值類型(QPS 或并發線程數)limitApp: 流控針對的調用來源,若為 default 則不區分調用來源strategy: 調用關系限流策略 ( 直接 關聯 鏈路 )controlBehavior: 流量控制效果(直接拒絕、Warm Up、勻速排隊)- 流量控制主要有兩種統計類型,一種是統計并發線程數,另外一種則是統計 QPS - 更多細節參見官網:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B63.1 QPS限流
3.1.1 配置QPS流量控制
3.1.2 測試
3.2 線程數限流
3.2.1 配置線程數限流
3.2.2 配置線程數限流
4,sentinel熔斷降級
除了流量控制以外,對調用鏈路中不穩定的資源進行熔斷降級也是保障高可用的重要措施之一。由于調用關系的復雜性,如果調用鏈路中的某個資源不穩定,最終會導致請求發生堆積。Sentinel 熔斷降級會在調用鏈路中某個資源出現不穩定狀態時(例如調用超時或異常比例升高),對這個資源的調用進行限制,讓請求快速失敗,避免影響到其它的資源而導致級聯錯誤。當資源被降級后,在接下來的降級時間窗口之內,對該資源的調用都自動熔斷(默認行為是拋出 DegradeException)。
4.1,降級策略
- 平均響應時間 (DEGRADE_GRADE_RT):當 1s 內持續進入 N 個請求,對應時刻的平均響應時間(秒級)均超過閾值(count,以 ms 為單位),那么在接下的時間窗口(DegradeRule 中的 timeWindow,以 s 為單位)之內,對這個方法的調用都會自動地熔斷(拋出 DegradeException)。注意 Sentinel 默認統計的 RT 上限是 4900 ms,超出此閾值的都會算作 4900 ms,若需要變更此上限可以通過啟動配置項 -Dcsp.sentinel.statistic.max.rt=xxx 來配置。
- 異常比例 (DEGRADE_GRADE_EXCEPTION_RATIO):當資源的每秒請求量 >= N(可配置),并且每秒異常總數占通過量的比值超過閾值(DegradeRule 中的 count)之后,資源進入降級狀態,即在接下的時間窗口(DegradeRule 中的 timeWindow,以 s 為單位)之內,對這個方法的調用都會自動地返回。異常比率的閾值范圍是 [0.0, 1.0],代表 0% - 100%。
- 異常數 (DEGRADE_GRADE_EXCEPTION_COUNT):當資源近 1 分鐘的異常數目超過閾值之后會進行熔斷。注意由于統計時間窗口是分鐘級別的,若 timeWindow 小于 60s,則結束熔斷狀態后仍可能再進入熔斷狀態。
5,SentinelResource注解
官網: https://github.com/alibaba/Sentinel/wiki/%E6%B3%A8%E8%A7%A3%E6%94%AF%E6%8C%81
5.1 代碼演示
@GetMapping("/sentinel/test1")@SentinelResource(value = "aa",blockHandler = "fallBack",fallback = "fall")public String test1(int id){log.info("sentinel test1");if(id<0) throw new RuntimeException("非法參數!!!");}return "sentinel test1 :"+id;}//降級異常處理public String fallBack(int id,BlockException e){if(e instanceof FlowException){return "當前服務已被流控! "+e.getClass().getCanonicalName();}return "當前服務已被降級處理! "+e.getClass().getCanonicalName();}//異常處理public String fall(int id){return "當前服務已不可用!";}總結
以上是生活随笔為你收集整理的07,springcloudalibaba_sentinel(流量卫兵)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery 报错提示Uncaught
- 下一篇: 电脑笑脸蓝屏问题 也许你可以尝试一下这个