javascript
SpringCloud_Alibaba微服务学习---sentinel—流量卫兵
sentinel—流量衛兵
- 一. Sentinel介紹
- 二. Sentinel使用
- ①. sentinel dashboard的安裝
- 1.下載
- 2.啟動
- 3.訪問web界面
- 4.登錄
- ②. sentinel 實時監控服務
- 1.創建項目引入依賴
- 2.配置
- 3.啟動服務
- 4.訪問dashboard界面查看服務監控
- 5.開發服務
- 6.啟動進行調用
- 7.查看監控界面
- ③. sentinel 流量控制
- QPS限流
- 1.配置QPS流量控制
- 2.測試
- 線程數限流
- 1.配置線程數限流
- 2.訪問測試
- 流控模式
- 流控效果
- ④. 熔斷降級
- 降級策略
- ⑤. SentinelResource注解
一. Sentinel介紹
- 隨著微服務的普及,服務調用的穩定性變得越來越重要。Sentinel以“流量”為突破口,在流量控制、斷路、負載保護等多個領域進行工作,保障服務可靠性。
- 用來在微服務系統中保護微服務對的作用 如何 服務雪崩 服務熔斷 服務降級 就是用來替換hystrix
Sentinel哨兵使用文檔傳送門
- https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_how_to_use_sentinel
GitHub哨兵介紹文檔傳送門
- https://github.com/alibaba/Sentinel/wiki
二. Sentinel使用
- sentinel提供了兩個服務組件:
一個是 sentinel 用來實現微服務系統中服務熔斷、降級等功能。這點和hystrix 類似
一個是 sentinel dashboard 用來監控微服務系統中流量調用等情況。這點和hystrix 類似
①. sentinel dashboard的安裝
1.下載
- https://github.com/alibaba/Sentinel/releases
2.啟動
- 儀表盤是個jar包可以直接通過java命令啟動 如: java -jar 方式運行 默認端口為 8080 - java -Dserver.port=9191 -jar sentinel-dashboard-1.7.2.jar3.訪問web界面
- http://localhost:9191/#/login
4.登錄
- 用戶名和密碼都是 sentinel
②. sentinel 實時監控服務
1.創建項目引入依賴
<!--引入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.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>2.配置
server.port=8789 spring.application.name=nacos_client#指定nacos服務地址 spring.cloud.nacos.server-addr=localhost:8848 #指定注冊中心地址 spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr} #暴露所有web端點 management.endpoints.web.exposure.include=*# 開啟sentinel 默認開啟 spring.cloud.sentinel.enabled=true # 連接dashboard spring.cloud.sentinel.transport.dashboard=localhost:9191 # 與dashboard通信的端口 spring.cloud.sentinel.transport.port=87193.啟動服務
@SpringBootApplication @EnableDiscoveryClient //開啟注冊與發現 public class NacosClient8789Application {public static void main(String[] args) {SpringApplication.run(NacosClient8789Application.class, args);}}4.訪問dashboard界面查看服務監控
- 默認情況下sentiel為延遲加載,不會在啟動之后立即創建服務監控,需要對服務進行調用時才會初始化
5.開發服務
@GetMapping("/test/test")public String test(){log.info("進入test服務!!!");return "test服務調用成功!!!";}6.啟動進行調用
- http://localhost:8789/sentinel/test
7.查看監控界面
③. sentinel 流量控制
流量控制(flow control),其原理是監控應用流量的 QPS 或并發線程數等指標,當達到指定的閾值時對流量進行控制,以避免被瞬時的流量高峰沖垮,從而保障應用的高可用性。
同一個資源可以創建多條限流規則。FlowSlot 會對該資源的所有限流規則依次遍歷,直到有規則觸發限流或者所有規則遍歷完畢。
一條限流規則主要由下面幾個因素組成,我們可以組合這些元素來實現不同的限流效果:
流量控制官網文檔傳送門
QPS限流
1.配置QPS流量控制
2.測試
一直按刷新按鈕就能看到效果
- 每秒只能最大接收1個請求,超過1個報錯
線程數限流
1.配置線程數限流
2.訪問測試
使用Jmeter工具進行測試
流控模式
直接:標識流量控制規則到達閾值直接觸發流量控制
關聯: 當兩個資源之間具有資源爭搶或者依賴關系的時候,這兩個資源便具有了關聯。比如對數據庫同一個字段的讀操作和寫操作存在爭搶,讀的速度過高會影響寫得速度,寫的速度過高會影響讀的速度。如果放任讀寫操作爭搶資源,則爭搶本身帶來的開銷會降低整體的吞吐量。可使用關聯限流來避免具有關聯關系的資源之間過度的爭搶,舉例來說,read_db 和 write_db 這兩個資源分別代表數據庫讀寫,我們可以給 read_db 設置限流規則來達到寫優先的目的:設置 strategy 為 RuleConstant.STRATEGY_RELATE 同時設置 refResource 為 write_db。這樣當寫庫操作過于頻繁時,讀數據的請求會被限流。
鏈路限流
流控效果
-
直接拒絕:(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)方式是默認的流量控制方式,當QPS超過任意規則的閾值后,新的請求就會被立即拒絕,拒絕方式為拋出FlowException。
-
Warm Up:(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式,即預熱/冷啟動方式。當系統長期處于低水位的情況下,當流量突然增加時,直接把系統拉升到高水位可能瞬間把系統壓垮。通過"冷啟動",讓通過的流量緩慢增加,在一定時間內逐漸增加到閾值上限,給冷系統一個預熱的時間,避免冷系統被壓垮。
冷啟動文檔傳送門
https://github.com/alibaba/Sentinel/wiki/%E9%99%90%E6%B5%81—%E5%86%B7%E5%90%AF%E5%8A%A8
- 勻速排隊:(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式會嚴格控制請求通過的間隔時間,也即是讓請求以均勻的速度通過,對應的是漏桶算法。 只能對請求進行排隊等待
勻速排隊文檔傳送門
https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6-%E5%8C%80%E9%80%9F%E6%8E%92%E9%98%9F%E6%A8%A1%E5%BC%8F
④. 熔斷降級
熔斷降級文檔傳送門
https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7
- 除了流量控制以外,對調用鏈路中不穩定的資源進行熔斷降級也是保障高可用的重要措施之一。由于調用關系的復雜性,如果調用鏈路中的某個資源不穩定,最終會導致請求發生堆積。Sentinel 熔斷降級會在調用鏈路中某個資源出現不穩定狀態時(例如調用超時或異常比例升高),對這個資源的調用進行限制,讓請求快速失敗,避免影響到其它的資源而導致級聯錯誤。當資源被降級后,在接下來的降級時間窗口之內,對該資源的調用都自動熔斷(默認行為是拋出 DegradeException)。
降級策略
-
平均響應時間 (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,則結束熔斷狀態后仍可能再進入熔斷狀態。
⑤. SentinelResource注解
SentinelResource注解文檔傳送門
https://github.com/alibaba/Sentinel/wiki/%E6%B3%A8%E8%A7%A3%E6%94%AF%E6%8C%81
@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 "當前服務已不可用!";}
總結
以上是生活随笔為你收集整理的SpringCloud_Alibaba微服务学习---sentinel—流量卫兵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机检测不到蓝牙,图解Win10 18
- 下一篇: gradle idea java ssm