限流降級框架Sentinel之簡介
Sentinel是什麼
Sentinel是阿里巴巴於2018年開源的,面向分散式服務架構的輕量級流量控制框架,主要以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度來幫助您保護服務的穩定性。
版本歷史
版本 | 時間點 | 主要特性 |
---|---|---|
0.2 | 2018.9 | 非同步呼叫支援、熱點引數限流、黑白名單功能 |
1.4.0 | 2018.11 | 叢集限流(基礎版) |
1.5.0 | 2018.12 | 指標/監控 API 標準化,適配 Prothemeus 等 |
1.6.0 | 2019.1 | Service Mesh 初步支援 |
2.0.0 | 2019.2 - 2019.3 | 雲原生支援,智慧化限流 |
詳細版本內容見ofollow,noindex">官網
Sentinel概念及功能
概念
資源
資源是 Sentinel 的關鍵概念。它可以是 Java 應用程式中的任何內容 。例如,由應用程式提供的服務,或由應用程式呼叫的其它應用提供的服務,甚至可以是一段程式碼。
只要通過 Sentinel API 定義的程式碼,就是資源,能夠被 Sentinel 保護起來。大部分情況下,可以使用方法簽名,URL,甚至服務名稱作為資源名來標示資源。
規則
圍繞資源的實時狀態設定的規則,可以包括流量控制規則、熔斷降級規則以及系統保護規則 。所有規則可以動態實時調整。
功能
流量控制
流量控制有以下幾個角度:
- 資源的呼叫關係,例如資源的呼叫鏈路,資源和資源之間的關係;
- 執行指標,例如 QPS、執行緒池、系統負載等;
- 控制的效果,例如直接限流、冷啟動、排隊等。
使用者可以靈活選擇控制的角度,達到業務想要的效果。
熔斷降級
Sentinel 和 Hystrix 的原則是一致的: 當呼叫鏈路中某個資源出現不穩定,例如,表現為 timeout,異常比例升高的時候,則對這個資源的呼叫進行限制,並讓請求快速失敗,避免影響到其它的資源,最終產生雪崩的效果。
但是在限制手段上,與Hystrix採取的方法是不一樣的。
Hystrix 通過執行緒池的方式,來對依賴(在我們的概念中對應資源)進行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點是除了增加了執行緒切換的成本,還需要預先給各個資源做執行緒池大小的分配。
Sentinel 對這個問題採取了兩種手段:
通過併發執行緒數進行限制
和資源池隔離的方法不同,Sentinel 通過限制資源併發執行緒的數量,來減少不穩定資源對其它資源的影響。這樣不但沒有執行緒切換的損耗,也不需要您預先分配執行緒池的大小。當某個資源出現不穩定的情況下,例如響應時間變長,對資源的直接影響就是會造成執行緒數的逐步堆積。當執行緒數在特定資源上堆積到一定的數量之後,對該資源的新請求就會被拒絕。堆積的執行緒完成任務後才開始繼續接收請求。
通過響應時間對資源進行降級
除了對併發執行緒數進行控制以外,Sentinel 還可以通過響應時間來快速降級不穩定的資源。當依賴的資源出現響應時間過長後,所有對該資源的訪問都會被直接拒絕,直到過了指定的時間視窗之後才重新恢復。
Hystrix可以見Netflix/Hystrix/wiki/Configuration" target="_blank" rel="nofollow,noindex">官方文件
系統複雜保護
Sentinel 提供了對應的保護機制,讓系統的入口流量和系統的負載達到一個平衡,保證系統在能力範圍之內處理最多的請求。
Sentinel使用
1.對主流框架提供適配或者顯示的API,來定義需要保護的資源,並提供設施對資源進行實時統計和呼叫鏈路分析。
主框架目前提供的適配有,dubbo,servlet,grpc等。
2.根據預設的規則,結合對資源的實時統計資訊,對流量進行控制。同時,Sentinel 提供開放的介面,方便您定義及改變規則。
3.Sentinel 提供實時的監控系統,方便您快速瞭解目前系統的狀態,見:sentinel-dashboard專案
總結
1.介紹了sentinel是什麼?
2.sentinel的版本更新歷史
3.sentinel的基本概念
4.sentinel功能點及設計
5.sentinel的使用方法