今日目標
之前已經介紹了雪崩產生原因和解決方式,那么這些解決方式如何落地?現在支持SpringCloud微服務保護技術一般都是:Hystrix和Sentinle,早期比較流行的是Hystrix框架,但目前國內實用最廣泛的還是阿里巴巴的Sentinel框架,我們對這兩種常見技術進行對比:1JD28資訊網——每日最新資訊28at.com
1JD28資訊網——每日最新資訊28at.com
| Sentinel1JD28資訊網——每日最新資訊28at.com | Hystrix1JD28資訊網——每日最新資訊28at.com |
隔離策略1JD28資訊網——每日最新資訊28at.com | 信號量隔離 1JD28資訊網——每日最新資訊28at.com | 線程池隔離/信號量隔離 1JD28資訊網——每日最新資訊28at.com |
熔斷降級策略1JD28資訊網——每日最新資訊28at.com | 基于慢調用比例或異常比例 1JD28資訊網——每日最新資訊28at.com | 基于失敗比率 1JD28資訊網——每日最新資訊28at.com |
實時指標實現 1JD28資訊網——每日最新資訊28at.com | 滑動窗口 1JD28資訊網——每日最新資訊28at.com | 滑動窗口(基于 RxJava) 1JD28資訊網——每日最新資訊28at.com |
規則配置 1JD28資訊網——每日最新資訊28at.com | 支持多種數據源 1JD28資訊網——每日最新資訊28at.com | 支持多種數據源 1JD28資訊網——每日最新資訊28at.com |
擴展性 1JD28資訊網——每日最新資訊28at.com | 多個擴展點 1JD28資訊網——每日最新資訊28at.com | 插件的形式 1JD28資訊網——每日最新資訊28at.com |
基于注解的支持 1JD28資訊網——每日最新資訊28at.com | 支持 1JD28資訊網——每日最新資訊28at.com | 支持 1JD28資訊網——每日最新資訊28at.com |
限流1JD28資訊網——每日最新資訊28at.com | 基于 QPS,支持基于調用關系的限流 1JD28資訊網——每日最新資訊28at.com | 有限的支持 1JD28資訊網——每日最新資訊28at.com |
流量整形1JD28資訊網——每日最新資訊28at.com | 支持慢啟動、勻速排隊模式 1JD28資訊網——每日最新資訊28at.com | 不支持 1JD28資訊網——每日最新資訊28at.com |
系統自適應保護 1JD28資訊網——每日最新資訊28at.com | 支持 1JD28資訊網——每日最新資訊28at.com | 不支持 1JD28資訊網——每日最新資訊28at.com |
控制臺1JD28資訊網——每日最新資訊28at.com | 開箱即用,可配置規則、查看秒級監控、機器發現等 1JD28資訊網——每日最新資訊28at.com | 不完善 1JD28資訊網——每日最新資訊28at.com |
常見框架的適配 1JD28資訊網——每日最新資訊28at.com | Servlet、Spring Cloud、Dubbo、gRPC 等 1JD28資訊網——每日最新資訊28at.com | Servlet、Spring Cloud Netflix 1JD28資訊網——每日最新資訊28at.com |
在種種差異中,我們重點關注加粗標注的部分:1JD28資訊網——每日最新資訊28at.com
隔離策略:1JD28資訊網——每日最新資訊28at.com
- 線程池隔離:同上述線程隔離案例,給不同業務分配不同線程池,這種方案可以杜絕雪崩問題;但是因為tomcat之外的線程池開銷也使得系統開銷增加,頻繁的上下文切換將給系統性能帶來額外的損失。
- 信號量隔離:不會給業務單獨創建線程池(統一使用tomcat一個容器),而是限制每個業務能使用的線程數量。統計當前業務使用的線程數,當達到指定數量后(類似計數器)觸發隔離。相較于線程池隔離性差一點。
熔斷降級策略1JD28資訊網——每日最新資訊28at.com
- 慢調用比例/異常比例/異常數:統計調用中慢性能的比例、異常的比例、或異常數量均可觸發熔斷降級。
- 失敗比例:只能根據異常請求比例觸發熔斷降級策略。
限流:1JD28資訊網——每日最新資訊28at.com
- 基于QPS/調用鏈路:基于調用的QPS、調用鏈路都可以做到限流。
- 有限的控制:沒有專門的限流方案,基于線程池隔離做的,線程池有多少線程數就限制到多少。
流量整形:1JD28資訊網——每日最新資訊28at.com
- 慢調用/排隊等待:避免突發流量的暴增而引起系統崩潰,而Hystrix則沒有解決方案
控制臺:1JD28資訊網——每日最新資訊28at.com
- Sentinel有較為完善的控制臺,界面化操作實時生效,而Hystrix只能查看一下服務狀態,不可動態調整。
對比可以發現Hystrix的重點在于隔離、熔斷為主的容錯機制,而Sentinel的側重點在于:多樣化的流量控制、熔斷降級、系統保護、實時監控和控制臺。同時基于HyStrix停止維護,加上Sentinel在阿里巴巴經過雙十一的高峰流量驗證,目前國內主流保護還是選擇了后者。因為后續的章節中我們也將借助于Sentinel為大家實踐微服務保護相關的知識點。1JD28資訊網——每日最新資訊28at.com
1. Sentinel基本概念
資源
資源是 Sentinel 的關鍵概念。它可以是 Java 應用程序中的任何內容,例如,由應用程序提供的服務,或由應用程序調用的其它應用提供的服務,甚至可以是一段代碼。在接下來的文檔中,我們都會用資源來描述代碼塊。1JD28資訊網——每日最新資訊28at.com
只要通過 Sentinel API 定義的代碼,就是資源,能夠被 Sentinel 保護起來。大部分情況下,可以使用方法簽名,URL,甚至服務名稱作為資源名來標示資源。1JD28資訊網——每日最新資訊28at.com
規則1JD28資訊網——每日最新資訊28at.com
圍繞資源的實時狀態設定的規則,可以包括流量控制規則、熔斷降級規則以及系統保護規則。所有規則可以動態實時調整。1JD28資訊網——每日最新資訊28at.com
2.Sentinel 功能和設計理念
2.1 流量控制
流量控制在網絡傳輸中是一個常用的概念,它用于調整網絡包的發送數據。然而,從系統穩定性角度考慮,在處理請求的速度上,也有非常多的講究。任意時間到來的請求往往是隨機不可控的,而系統的處理能力是有限的。我們需要根據系統的處理能力對流量進行控制。Sentinel 作為一個調配器,可以根據需要把隨機的請求調整成合適的形狀,如下圖所示:1JD28資訊網——每日最新資訊28at.com
圖片1JD28資訊網——每日最新資訊28at.com
流量控制有以下幾個角度:1JD28資訊網——每日最新資訊28at.com
- 資源的調用關系,例如資源的調用鏈路,資源和資源之間的關系;
- 運行指標,例如 QPS、線程池、系統負載等;
- 控制的效果,例如直接限流、冷啟動、排隊等。
Sentinel 的設計理念是讓您自由選擇控制的角度,并進行靈活組合,從而達到想要的效果。1JD28資訊網——每日最新資訊28at.com
2.2 熔斷降級
什么是熔斷降級1JD28資訊網——每日最新資訊28at.com
除了流量控制以外,降低調用鏈路中的不穩定資源也是 Sentinel 的使命之一。由于調用關系的復雜性,如果調用鏈路中的某個資源出現了不穩定,最終會導致請求發生堆積。這個問題和 Hystrix 里面描述的問題是一樣的。1JD28資訊網——每日最新資訊28at.com
圖片1JD28資訊網——每日最新資訊28at.com
Sentinel 和 Hystrix 的原則是一致的: 當調用鏈路中某個資源出現不穩定,例如,表現為 timeout,異常比例升高的時候,則對這個資源的調用進行限制,并讓請求快速失敗,避免影響到其它的資源,最終產生雪崩的效果。1JD28資訊網——每日最新資訊28at.com
熔斷降級設計理念
在限制的手段上,Sentinel 和 Hystrix 采取了完全不一樣的方法。1JD28資訊網——每日最新資訊28at.com
Hystrix 通過線程池的方式,來對依賴(在我們的概念中對應資源)進行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點是除了增加了線程切換的成本,還需要預先給各個資源做線程池大小的分配。1JD28資訊網——每日最新資訊28at.com
Sentinel 對這個問題采取了兩種手段:1JD28資訊網——每日最新資訊28at.com
1.通過并發線程數進行限制1JD28資訊網——每日最新資訊28at.com
和資源池隔離的方法不同,Sentinel 通過限制資源并發線程的數量,來減少不穩定資源對其它資源的影響。這樣不但沒有線程切換的損耗,也不需要您預先分配線程池的大小。當某個資源出現不穩定的情況下,例如響應時間變長,對資源的直接影響就是會造成線程數的逐步堆積。當線程數在特定資源上堆積到一定的數量之后,對該資源的新請求就會被拒絕。堆積的線程完成任務后才開始繼續接收請求。1JD28資訊網——每日最新資訊28at.com
2.通過響應時間對資源進行降級1JD28資訊網——每日最新資訊28at.com
除了對并發線程數進行控制以外,Sentinel 還可以通過響應時間來快速降級不穩定的資源。當依賴的資源出現響應時間過長后,所有對該資1JD28資訊網——每日最新資訊28at.com
系統負載保護
Sentinel 同時提供系統維度的自適應保護能力。防止雪崩,是系統防護中重要的一環。當系統負載較高的時候,如果還持續讓請求進入,可能會導致系統崩潰,無法響應。在集群環境下,網絡負載均衡會把本應這臺機器承載的流量轉發到其它的機器上去。如果這個時候其它的機器也處在一個邊緣狀態的時候,這個增加的流量就會導致這臺機器也崩潰,最后導致整個集群不可用。1JD28資訊網——每日最新資訊28at.com
針對這個情況,Sentinel 提供了對應的保護機制,讓系統的入口流量和系統的負載達到一個平衡,保證系統在能力范圍之內處理最多的請求。1JD28資訊網——每日最新資訊28at.com
2.3. Sentinel 是如何工作的
Sentinel 的主要工作機制如下:1JD28資訊網——每日最新資訊28at.com
- 對主流框架提供適配或者顯示的 API,來定義需要保護的資源,并提供設施對資源進行實時統計和調用鏈路分析。
- 根據預設的規則,結合對資源的實時統計信息,對流量進行控制。同時,Sentinel 提供開放的接口,方便您定義及改變規則。
- Sentinel 提供實時的監控系統,方便您快速了解目前系統的狀態。
1JD28資訊網——每日最新資訊28at.com
本文鏈接:http://www.tebozhan.com/showinfo-26-12092-0.htmlSentinel原理介紹,你學會了嗎?
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: Python 3.12 版本正式推出:f-string 解析改進,整體性能提升 5%
下一篇: Java中定時任務調度不準確或執行異常,導致計劃任務失敗