Sentinel Go 0.3.0 發布,支持熔斷降級能力

2021-01-11 開源中國

Sentinel 是阿里巴巴開源的,面向分布式服務架構的流量控制組件,主要以流量為切入點,從限流、流量整形、熔斷降級、系統自適應保護等多個維度來幫助開發者保障微服務的穩定性。Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺、冷啟動、消息削峰填谷、集群流量控制、實時熔斷下遊不可用服務等,是保障微服務高可用的利器,原生支持 Java/Go/C++ 等多種語言,並且提供 Istio/Envoy 全局流控支持來為 Service Mesh 提供高可用防護的能力。

近期,Sentinel Go 0.3.0 正式發布,帶來了熔斷降級特性支持,可以針對 Go 服務中的不穩定調用進行自動熔斷,避免出現級聯錯誤/雪崩,是保障服務高可用重要的一環。結合 Sentinel Go 已經提供的 gRPC、Gin、Dubbo 等框架組件的適配模塊,開發者可以快速在 Web、RPC 調用層面配置熔斷降級規則來保護自身服務的穩定性。同時 0.3.0 版本也帶來了 etcd 動態數據源模塊,開發者可以方便地通過 etcd 來動態調整熔斷降級策略。

為什麼需要熔斷降級

一個服務常常會調用別的模塊,可能是另外的一個遠程服務、資料庫,或者第三方 API 等。例如,支付的時候,可能需要遠程調用銀聯提供的 API;查詢某個商品的價格,可能需要進行資料庫查詢。然而,這個被依賴服務的穩定性是不能保證的。如果依賴的服務出現了不穩定的情況,請求的響應時間變長,那麼調用服務的方法的響應時間也會變長,線程會產生堆積,最終可能耗盡業務自身的線程池,服務本身也變得不可用。

現代微服務架構都是分布式的,由非常多的服務組成。不同服務之間相互調用,組成複雜的調用鏈路。以上的問題在鏈路調用中會產生放大的效果。複雜鏈路上的某一環不穩定,就可能會層層級聯,最終導致整個鏈路都不可用。因此我們需要對不穩定的服務進行熔斷降級,暫時切斷不穩定調用,避免局部不穩定因素導致整體的雪崩。

Sentinel Go 熔斷降級特性基於熔斷器模式的思想,在服務出現不穩定因素(如響應時間變長,錯誤率上升)的時候暫時切斷服務的調用,等待一段時間再進行嘗試。一方面防止給不穩定服務「雪上加霜」,另一方面保護服務的調用方不被拖垮。Sentinel 支持兩種熔斷策略:基於響應時間(慢調用比例)和基於錯誤(錯誤比例/錯誤數),可以有效地針對各種不穩定的場景進行防護。

 

下面我們介紹一下 Sentinel 流控降級的一些最佳實踐。

流控降級最佳實踐

在服務提供方(Service Provider)的場景下,我們需要保護服務提供方不被流量洪峰打垮。我們通常根據服務提供方的服務能力進行流量控制,或針對特定的服務調用方進行限制。為了保護服務提供方不被激增的流量拖垮影響穩定性,我們可以結合前期的容量評估,通過 Sentinel 配置 QPS 模式的流控規則,當每秒的請求量超過設定的閾值時,會自動拒絕多餘的請求。

在服務調用端(Service Consumer)的場景下,我們需要保護服務調用方不被不穩定的依賴服務拖垮。藉助 Sentinel 的信號量隔離策略(並發數流控規則),限制某個服務調用的並發量,防止大量慢調用擠佔正常請求的資源;同時,藉助熔斷降級規則,當異常比率或業務慢調用比例超過某個閾值後將調用自動熔斷,直到一段時間過後再嘗試恢復。熔斷期間我們可以提供默認的處理邏輯(fallback),熔斷期間的調用都會返回 fallback 的結果,而不會再去嘗試本已非常不穩定的服務。需要注意的是,即使服務調用方引入了熔斷降級機制,我們還是需要在 HTTP 或 RPC 客戶端配置請求超時時間,來做一個兜底的保護。

同時 Sentinel 還提供全局維度的系統自適應保護能力,結合系統的 Load、CPU 使用率以及服務的入口 QPS、響應時間和並發量等幾個維度的監控指標,通過自適應的流控策略,讓系統的入口流量和系統的負載達到一個平衡,讓系統儘可能跑在最大吞吐量的同時保證系統整體的穩定性。系統規則可以作為整個服務的一個兜底防護策略,保障服務不掛。

Let's start hacking!

Sentinel Go 版本正在快速演進中,我們非常歡迎感興趣的開發者參與貢獻,一起來主導未來版本的演進。Sentinel Go 版本的演進離不開社區的貢獻。若您有意願參與貢獻,歡迎聯繫我們加入 Sentinel 貢獻小組一起成長(Sentinel 開源討論釘釘群:30150716)。

同時,一年一度的阿里巴巴編程之夏(Alibaba Summer of Code)開始啦!如果你是在校的學生,有興趣參與 Sentinel 項目的開發和演進,不要錯過此次機會,歡迎 pick 感興趣的 issue 提交提案:https://github.com/alibaba/Sentinel/issues/1497

Now let's start hacking!

相關焦點

  • 流控降級組件 Sentinel Go 0.4.0 發布,支持熱點流量防護能力
    Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺、冷啟動、消息削峰填谷、集群流量控制、實時熔斷下遊不可用服務等,是保障微服務高可用的利器,原生支持 Java/Go/C++ 等多種語言,並且提供 Istio/Envoy/SOFA MOSN 全局流控支持來為 Service Mesh 提供高可用防護的能力。
  • Sentinel Go 0.4.0 發布,支持熱點流量防護能力
    Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺、冷啟動、消息削峰填谷、集群流量控制、實時熔斷下遊不可用服務等,是保障微服務高可用的利器,原生支持 Java/Go/C++ 等多種語言,並且提供 Istio/Envoy/SOFA MOSN 全局流控支持來為 Service Mesh 提供高可用防護的能力。
  • Sentinel Go 1.0.1 發布,雲原生流控降級組件
    Sentinel Go 1.0.1 版本正式發布,針對 1.0 GA 版本進行了一些功能改進和 bug fix。
  • Sentinel Go 0.6.0 發布,支持 Warm-Up 預熱流控
    Sentinel Go 0.6.0 正式發布,該版本帶來了 Warm-Up 預熱流控特性、go-micro 框架的適配模塊,以及其它的一些特性改進
  • 阿里雙11流控降級組件Sentinel Go正式GA,助力雲原生服務穩穩穩
    今年年初,Sentinel 社區宣布了 Sentinel Go 版本的發布,為 Go 語言的微服務和基礎組件提供高可用防護和容錯能力的原生支持,標誌著 Sentinel 朝著多元化與雲原生邁出了新的一步。
  • Sentinel 1.5.0 正式發布,引入 Reactive 支持
    流控降級組件 Sentinel 的又一個裡程碑版本 1.5.0 正式發布,引入了 reactive 的支持,並提供多項新特性與改進。
  • Sentinel 1.7.0 發布,支持 Envoy 集群流量控制
    流控降級中間件 Sentinel 1.7.0 版本正式發布,引入了 Envoy 集群流量控制支持、properties 文件配置、Consul/Etcd/Spring Cloud Config
  • 阿里中間件開源組件 Sentinel 發布首個官方推薦可生產版本
    近日,阿里中間件開源組件Sentinel 發布首個官方推薦可生產版本:1.3.0-GA ,該版本包括 Sentinel 控制臺功能的完善和一些
  • Sentinel V1.7.0 已發布
    在這個版本中,Sentinel使用Sentinel令牌伺服器提供了一個Sentinel全局RLS的實現,使得Sentinel的分布式流量控制能力可以充分發揮。詳情請看這裡。
  • 基於Sentinel的高可用限流系統設計及實現完整版
    2、Sentinel的主要特點多樣化的流量控制 熔斷降級 系統負載保護 實時監控和控制臺3、默認的架構其默認的架構很簡單,應用的註冊和監控數據,都是保存在Sentinel的內存中的,不能夠直接使用於生產。不過也正因為其簡單,方便大家體驗,才會受到這麼多用戶的歡迎,並且其提供了許多的擴展點給用戶,大家可以根據自己的應用場景去設計。
  • Sentinel 1.6.3 正式發布,引入網關流控控制臺的支持
    Sentinel 1.6.3 正式發布,引入網關流控控制臺的支持,同時帶來一些 bug 修復和功能改進,歡迎使用!
  • 邁向雲原生,Sentinel Golang 首個版本發布
    Sentinel 是阿里巴巴開源的,面向分布式服務架構的流量控制組件,主要以流量為切入點,從限流、流量整形、熔斷降級、系統自適應保護等多個維度來幫助開發者保障微服務的穩定性。Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺、冷啟動、消息削峰填谷、集群流量控制、實時熔斷下遊不可用服務等,是保障微服務高可用的利器。
  • J2Cache 2.7.0 發布了,支持 Lettuce 替代 Jedis
    J2Cache 2.7.0 在周末悄沒聲息的發布了!!!
  • pacebox-springboot 2020.0.0.0 發布,java 生態框架
    pacebox-springboot 融合封裝已發布,旨在提供快速開發腳手架、打造更好的開源生態環境。希望有志同道合的朋友一起維護該軟體、打造一款快速應用開發級生態框架。
  • SpringBlade 2.0 正式版發布,集成Nacos與Sentinel
    經過一個半月的持續迭代,SpringBlade2.0的正式版終於發布了,同時全新官網上線。下面我們來看一下正式版有哪些驚喜。集成 SpringCloud Alibaba Sentinel,從流量控制、熔斷降級、系統負載等多個維度保護服務的穩定性。Sentinel Dashboard 鏡像推送至DockerHub,開發調試可用docker啟動,更加方便。
  • Gse v0.30.0 發布, Go 高性能分詞, 增加 hmm 支持
    Go 語言高效分詞, 支持英文、中文、日文等詞典用雙數組 trie(Double-Array Trie)實現, 分詞器算法為基於詞頻的最短路徑加動態規劃
  • Robotgo v0.90.0 發布,Go GUI 自動化,大幅度更新
    Robotgo v0.90.0 發布了,Golang 跨平臺控制滑鼠、鍵盤、位圖、屏幕、窗口句柄以及全局事件監聽。
  • Sentinel Dashboard(基於1.8.1)流控規則持久化到Nacos——涉及...
    前言之前雖然也一直在使用sentinel實現限流熔斷功能,但卻沒有好好整理之前看的源碼與資料,今天有時間將之前自己整理過的資料寫成一篇博文,或者是是一篇關於Sentinel(基於目前最近版本1.8,如果沒有特殊說明,都指最新1.8版本)持久化Nacos的指南,因為我發現網上的一些博文雖然有參考價值但卻沒有好好完善好細節,一知半解
  • Hprose for Go 2.0.0 發布,微服務首選引擎
    Hprose 2.0 for Golang 終於發布了。這是一個裡程碑版本,針對開發者進行了多項改進。
  • 安卓8.0添加降級保護功能:升了就別降了
    這個Rollback Protection其實是一個降級保護功能,說白了就是,有了這個功能之後,再想降級回到老版本的時候,就會被拒絕。 (原標題:安卓8.0添加降級保護功能 升了就別降了)