1. 程式人生 > >阿里中介軟體開源元件:Sentinel 0.2.0正式釋出

阿里中介軟體開源元件:Sentinel 0.2.0正式釋出

Sentinel 是阿里中介軟體團隊開源的,面向分散式服務架構的輕量級流量控制組件,主要以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度來幫助使用者保護服務的穩定性。

近日,Sentinel 0.2.0 正式釋出。作為一個重要的里程碑版本,Sentinel 0.2.0 釋放了多項產品新特性,如 非同步呼叫支援、熱點引數限流 等,幷包括了大量的體驗優化與 bug 修復。下面我們來看一下 Sentinel 0.2.0 的重要新特性。

非同步呼叫支援

未來各種 RPC 框架、Web 框架都朝著非同步化的目標發展,例如Spring WebFlux, Vert.x, 非同步 Servlet, Netty 服務,等等。整個 Java 的發展方向也在朝著非同步、響應式進行演進,無論是 CompletableFuture, Reactive Streams 還是後面的 Project Loom 協程,因此支援非同步呼叫是各類開源組建的重要迭代內容之一。

Sentinel 0.2.0 引入非同步呼叫鏈路的支援後,可以方便地統計非同步呼叫資源的資料,維護非同步呼叫鏈路,同時具備了適配非同步框架/庫的能力。非同步呼叫資源訪問與普通的資源訪問類似,只不過非同步呼叫資源 exit 通常都是在非同步回撥中進行。同時,Sentinel 還支援非同步呼叫的巢狀(比如在非同步回撥中巢狀普通的資源呼叫或另一個非同步資源呼叫)。只需要藉助 Sentinel 提供的上下文切換功能,在對應的地方進行 Context 變換,即可維持正確的呼叫鏈路關係。

熱點引數限流

熱點即經常訪問的資料。很多時候我們希望統計某個熱點資料中訪問頻率最高的 Top K 資料,並對其訪問進行限制。比如:

  • 商品 ID 為引數,統計一段時間內最常購買的商品 ID 並進行限制
  • 使用者 ID 為引數,針對一段時間內頻繁訪問的使用者 ID 進行限制

這時候,就可以使用 Sentinel 的 熱點引數限流功能。熱點引數限流會統計傳入引數中的熱點引數,並根據配置的限流閾值與模式,對包含熱點引數的資源呼叫進行限流。熱點引數限流可以看做是一種特殊的流量控制,僅對包含熱點引數的資源呼叫生效。Sentinel 利用 LRU 策略,結合底層的滑動視窗機制來實現熱點引數統計。LRU 策略可以統計單位時間內,最近最常訪問的熱點引數,而滑動視窗機制可以幫助統計每個引數的 QPS。

此外,Sentinel 還支援配置引數限流例外項,可以指定對某個特定的值配置單獨的限流閾值。要使用熱點引數限流功能,只需引入對應的依賴,為對應的資源配置熱點引數限流規則,並在 entry 的時候傳入相應的引數,即可使熱點引數限流生效。

黑白名單控制

很多時候,我們需要根據呼叫方資訊來判斷資源是否允許訪問,比如服務 A 只允許來自 appA 和 appB 呼叫方的請求通過,而服務 B 不允許來自 appC 呼叫方的請求通過,這時候可以使用 Sentinel 的 黑白名單控制功能。

黑白名單根據資源的請求來源(origin)限制資源是否通過,若配置白名單則只有請求來源位於白名單內時才可通過;若配置黑名單則請求來源位於黑名單時不通過,其餘的請求通過。

Slot Chain擴充套件

阿里巴巴內部是通過一系列的 slot 組成的 slot chain 來實現Sentinel 的各種功能的,包括構建呼叫鏈、呼叫資料統計、規則檢查等。各個 slot 之間的順序非常重要。Sentinel 0.2.0 將 SlotChainBuilder 作為 SPI 介面進行擴充套件,使得 Slot Chain 具備了擴充套件的能力。由此,使用者便可以加入自定義的 slot 並編排 slot 間的順序,從而可以給 Sentinel 新增自定義的功能。

動態規則資料來源重構

Sentinel 的動態規則資料來源 用於從中讀取及寫入規則。Sentinel 0.2.0 對動態規則資料來源(DataSource)進行了重構,將動態規則資料來源劃分為兩種型別:讀資料來源(ReadableDataSource)和寫資料來源(WritableDataSource),從而使不同型別的資料來源職責更加清晰:

讀資料來源僅負責監聽或輪詢讀取遠端儲存的變更;

寫資料來源僅負責將規則變更寫入到規則源中。

在實際的場景中,不同的儲存型別對應的資料來源型別也不同,可以參考之前的“在生產環境中使用 Sentinel 控制檯”一文。對於 push 模式的資料來源,一般不支援寫入;而 pull 模式的資料來源則是可寫的。Sentinel 0.2.0 提供了本地檔案寫資料來源的實現。

其他重要特性

Sentinel 0.2.0 還包含了下面的一些特性和改進:

  • 增加 Redis 動態資料來源適配
  • Sentinel Dubbo Adapter 支援統計更多種類的異常
  • Sentinel Dashboard 提供監控資料持久化的介面,開發者可自行擴充套件實現監控資料持久化
  • Sentinel Web Servlet Filter 支援從 HTTP 請求中提取來源資訊(origin)

線下分享預告:

趙奕豪(宿何)受邀參加 10月20 - 21日,在深圳舉辦的2018中國開源年會 COSCon'18,並進行主題為《從入門到精通Sentinel》的分享,歡迎來現場和宿何小哥進行交流。

_2018_10_11_3_52_12