1. 程式人生 > >阿裏中間件開源組件:Sentinel 0.2.0正式發布

阿裏中間件開源組件:Sentinel 0.2.0正式發布

entry future 添加 變換 鏈接 內部 生效 slot bug

摘要: Sentinel 是阿裏中間件團隊開源的,面向分布式服務架構的輕量級流量控制組件,主要以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度來幫助用戶保護服務的穩定性。 關聯閱讀:阿裏巴巴宣布 Sentinel 開源,進一步完善 Dubbo 生態(附PPT) 近日,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)

原文鏈接

本文為雲棲社區原創內容,未經允許不得轉載。

阿裏中間件開源組件:Sentinel 0.2.0正式發布