Sentinel熔斷降級

分佈式系統越來越流行,服務之間的可靠性、可用性越來重要。Sentinel 是面向分佈式服務架構的輕量級流量控制組件,主要以流量爲切入點,從限流、流量整形、熔斷降級、系統負載保護等多個維度來幫助您保障微服務的穩定性。

下面以客戶端基礎服務爲例,闡述接入公司sentinel熔斷實現流量控制、熔斷降級爲例。客戶端基礎服務處於公司業務鏈路中屬於中間環節,既要對來自上游開放平臺的請求流量控制,又要對下游基礎服務的異常進行熔斷降級。
1、流量控制
原理是監控應用流量的 QPS 或併發線程數等指標,當達到指定的閾值時對流量進行控制,以避免被瞬時的流量高峯沖垮,從而保障應用的高可用性。詳細請參考:
https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6
註解形式+QPS+快速失敗:加入註解,自定義限流後的blockHandler方法。
在這裏插入圖片描述
在這裏插入圖片描述
配置:
在這裏插入圖片描述
效果:
可以從sentinel Dashboard上看QPS限制在50,從日誌上查看進入自定義blockHandler方法。
在這裏插入圖片描述
在這裏插入圖片描述

2、熔斷降級
註解形式+RT:加入註解,自定義降級後的fallback方法。
平均響應時間 (DEGRADE_GRADE_RT):當 1s 內持續進入 5 個請求,對應時刻的平均響應時間(秒級)均超過閾值(count,以 ms 爲單位),那麼在接下的時間窗口(DegradeRule 中的 timeWindow,以 s 爲單位)之內,對這個方法的調用都會自動地熔斷(拋出 DegradeException)。詳細請參考:https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7
在這裏插入圖片描述
在這裏插入圖片描述
配置:
在這裏插入圖片描述
效果:從日誌上查看進入自定義fallBack方法
在這裏插入圖片描述

常見問題總結:
問題一:jar包衝突,sentinel的流控和降級註解不生效,衝突jar如下:
解決方案:合理排除掉衝突jar,客戶端基礎服務選擇的保留高版本jar。
問題二:Apollo上未新增sentinel命名空間,流控和降級註解不生效。
解決方案:Apollo是sentinel規則持久化的形式,需要在項目中配置sentinel及在Apollo上新增sentinel命名空間。
問題三:使用@SentinelResoure註解同時配置blockHandler和fallback,會導致fallback不生效。
解決方案:註解中blockHandler和fallback分開。
問題四:dubbo超時時間會導致降級方法fallback不生效。
解決方法:若要進入降級方法,降級規則中RT時長要小於dubbo的超時時間。

本次客戶端基礎服務使用了sentinel最基本的功能限流和降級,sentinel有很多其他功能,比如:網管流控、白名單等功能,都在特定的業務場景下使用的。希望以上的分享對後面接入sentinel熔斷的x小夥伴有所幫助或避坑。

作者簡介:就職於甜橙金融信息技術部,負責服務端開發,專注於微服務、分佈式、性能調優、高可用,歡迎各位同仁溝通交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章