阿里開源分佈式限流框架 -Sentinel Go 0.3.0 發佈,支持熔斷降級能力

頭圖.png

作者 | 宿何  阿里巴巴高級開發工程師

Sentinel 是阿里巴巴開源的,面向分佈式服務架構的流量控制組件,主要以流量爲切入點,從限流、流量整形、熔斷降級、系統自適應保護等多個維度來幫助開發者保障微服務的穩定性。Sentinel 承接了阿里巴巴近 10 年的 雙11 大促流量的核心場景,例如秒殺、冷啓動、消息削峯填谷、集羣流量控制、實時熔斷下游不可用服務等,是保障微服務高可用的利器,原生支持 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 來動態調整熔斷降級策略。

Sentinel Go 項目地址:https://github.com/alibaba/sentinel-golang

爲什麼需要熔斷降級

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

1.png

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

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

2.png

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

流控降級最佳實踐

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

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

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

3.png

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!

第 3 期雲原生網絡研討會邀您參加

今晚 19:00 - 20:00,阿里雲技術專家將爲大家帶來《如何爲雲原生應用帶來穩定高效的部署能力?》,屆時將會介紹阿里經濟體大規模應用上雲過程中遇到的核心部署問題、採取的對應解決方案,以及這些方案沉澱爲通用化能力輸出開源後,如何幫助阿里雲上的用戶提升應用部署發佈的效率與穩定性。

聽衆可獲取以下收益:

• 瞭解阿里經濟體大規模應用上雲的實踐經驗,如何解決原生 K8s workload 不滿足場景需求的問題;
• 作爲外部用戶,如何體驗和使用上阿里經濟體上雲所沉澱下來的應用部署發佈能力;
• 演示阿里巴巴針對大規模 K8s 集羣如何做到 DaemonSet 高可用的灰度升級(即將開源!)

點擊鏈接即可預約直播:https://yq.aliyun.com/live/2898

阿里巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的公衆號。”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章