阿里开源分布式限流框架 -Sentinel Go 0.3.0 发布,支持熔断降级能力
作者 | 宿何? 阿里巴巴高級開發(fā)工程師
Sentinel 是阿里巴巴開源的,面向分布式服務(wù)架構(gòu)的流量控制組件,主要以流量為切入點,從限流、流量整形、熔斷降級、系統(tǒng)自適應(yīng)保護等多個維度來幫助開發(fā)者保障微服務(wù)的穩(wěn)定性。Sentinel 承接了阿里巴巴近 10 年的 雙11 大促流量的核心場景,例如秒殺、冷啟動、消息削峰填谷、集群流量控制、實時熔斷下游不可用服務(wù)等,是保障微服務(wù)高可用的利器,原生支持 Java/Go/C++ 等多種語言,并且提供 Istio/Envoy 全局流控支持來為 Service Mesh 提供高可用防護的能力。
近期,Sentinel Go 0.3.0 正式發(fā)布,帶來了熔斷降級特性支持,可以針對 Go 服務(wù)中的不穩(wěn)定調(diào)用進行自動熔斷,避免出現(xiàn)級聯(lián)錯誤/雪崩,是保障服務(wù)高可用重要的一環(huán)。結(jié)合 Sentinel Go 已經(jīng)提供的 gRPC、Gin、Dubbo 等框架組件的適配模塊,開發(fā)者可以快速在 Web、RPC 調(diào)用層面配置熔斷降級規(guī)則來保護自身服務(wù)的穩(wěn)定性。同時 0.3.0 版本也帶來了 etcd 動態(tài)數(shù)據(jù)源模塊,開發(fā)者可以方便地通過 etcd 來動態(tài)調(diào)整熔斷降級策略。
Sentinel Go 項目地址:https://github.com/alibaba/sentinel-golang
為什么需要熔斷降級
一個服務(wù)常常會調(diào)用別的模塊,可能是另外的一個遠程服務(wù)、數(shù)據(jù)庫,或者第三方 API 等。例如,支付的時候,可能需要遠程調(diào)用銀聯(lián)提供的 API;查詢某個商品的價格,可能需要進行數(shù)據(jù)庫查詢。然而,這個被依賴服務(wù)的穩(wěn)定性是不能保證的。如果依賴的服務(wù)出現(xiàn)了不穩(wěn)定的情況,請求的響應(yīng)時間變長,那么調(diào)用服務(wù)的方法的響應(yīng)時間也會變長,線程會產(chǎn)生堆積,最終可能耗盡業(yè)務(wù)自身的線程池,服務(wù)本身也變得不可用。
現(xiàn)代微服務(wù)架構(gòu)都是分布式的,由非常多的服務(wù)組成。不同服務(wù)之間相互調(diào)用,組成復(fù)雜的調(diào)用鏈路。以上的問題在鏈路調(diào)用中會產(chǎn)生放大的效果。復(fù)雜鏈路上的某一環(huán)不穩(wěn)定,就可能會層層級聯(lián),最終導(dǎo)致整個鏈路都不可用。因此我們需要對不穩(wěn)定的服務(wù)進行熔斷降級,暫時切斷不穩(wěn)定調(diào)用,避免局部不穩(wěn)定因素導(dǎo)致整體的雪崩。
Sentinel Go 熔斷降級特性基于熔斷器模式的思想,在服務(wù)出現(xiàn)不穩(wěn)定因素(如響應(yīng)時間變長,錯誤率上升)的時候暫時切斷服務(wù)的調(diào)用,等待一段時間再進行嘗試。一方面防止給不穩(wěn)定服務(wù)“雪上加霜”,另一方面保護服務(wù)的調(diào)用方不被拖垮。Sentinel 支持兩種熔斷策略:基于響應(yīng)時間(慢調(diào)用比例)和基于錯誤(錯誤比例/錯誤數(shù)),可以有效地針對各種不穩(wěn)定的場景進行防護。
下面我們介紹一下 Sentinel 流控降級的一些最佳實踐。
流控降級最佳實踐
在服務(wù)提供方(Service Provider)的場景下,我們需要保護服務(wù)提供方不被流量洪峰打垮。我們通常根據(jù)服務(wù)提供方的服務(wù)能力進行流量控制,或針對特定的服務(wù)調(diào)用方進行限制。為了保護服務(wù)提供方不被激增的流量拖垮影響穩(wěn)定性,我們可以結(jié)合前期的容量評估,通過 Sentinel 配置 QPS 模式的流控規(guī)則,當每秒的請求量超過設(shè)定的閾值時,會自動拒絕多余的請求。
在服務(wù)調(diào)用端(Service Consumer)的場景下,我們需要保護服務(wù)調(diào)用方不被不穩(wěn)定的依賴服務(wù)拖垮。借助 Sentinel 的信號量隔離策略(并發(fā)數(shù)流控規(guī)則),限制某個服務(wù)調(diào)用的并發(fā)量,防止大量慢調(diào)用擠占正常請求的資源;同時,借助熔斷降級規(guī)則,當異常比率或業(yè)務(wù)慢調(diào)用比例超過某個閾值后將調(diào)用自動熔斷,直到一段時間過后再嘗試恢復(fù)。熔斷期間我們可以提供默認的處理邏輯(fallback),熔斷期間的調(diào)用都會返回 fallback 的結(jié)果,而不會再去嘗試本已非常不穩(wěn)定的服務(wù)。需要注意的是,即使服務(wù)調(diào)用方引入了熔斷降級機制,我們還是需要在 HTTP 或 RPC 客戶端配置請求超時時間,來做一個兜底的保護。
同時 Sentinel 還提供全局維度的系統(tǒng)自適應(yīng)保護能力,結(jié)合系統(tǒng)的 Load、CPU 使用率以及服務(wù)的入口 QPS、響應(yīng)時間和并發(fā)量等幾個維度的監(jiān)控指標,通過自適應(yīng)的流控策略,讓系統(tǒng)的入口流量和系統(tǒng)的負載達到一個平衡,讓系統(tǒng)盡可能跑在最大吞吐量的同時保證系統(tǒng)整體的穩(wěn)定性。系統(tǒng)規(guī)則可以作為整個服務(wù)的一個兜底防護策略,保障服務(wù)不掛。
Let’s start hacking!
Sentinel Go 版本正在快速演進中,我們非常歡迎感興趣的開發(fā)者參與貢獻,一起來主導(dǎo)未來版本的演進。Sentinel Go 版本的演進離不開社區(qū)的貢獻。若您有意愿參與貢獻,歡迎聯(lián)系我們加入 Sentinel 貢獻小組一起成長(Sentinel 開源討論釘釘群:30150716)。
同時,一年一度的阿里巴巴編程之夏(Alibaba Summer of Code)開始啦!如果你是在校的學(xué)生,有興趣參與 Sentinel 項目的開發(fā)和演進,不要錯過此次機會,歡迎 pick 感興趣的 issue 提交提案:https://github.com/alibaba/Sentinel/issues/1497
Now let’s start hacking!
第 3 期云原生網(wǎng)絡(luò)研討會邀您參加
今晚 19:00 - 20:00,阿里云技術(shù)專家將為大家?guī)怼度绾螢樵圃鷳?yīng)用帶來穩(wěn)定高效的部署能力?》,屆時將會介紹阿里經(jīng)濟體大規(guī)模應(yīng)用上云過程中遇到的核心部署問題、采取的對應(yīng)解決方案,以及這些方案沉淀為通用化能力輸出開源后,如何幫助阿里云上的用戶提升應(yīng)用部署發(fā)布的效率與穩(wěn)定性。
聽眾可獲取以下收益:
? 了解阿里經(jīng)濟體大規(guī)模應(yīng)用上云的實踐經(jīng)驗,如何解決原生 K8s workload 不滿足場景需求的問題;
? 作為外部用戶,如何體驗和使用上阿里經(jīng)濟體上云所沉淀下來的應(yīng)用部署發(fā)布能力;
? 演示阿里巴巴針對大規(guī)模 K8s 集群如何做到 DaemonSet 高可用的灰度升級(即將開源!)
點擊鏈接即可預(yù)約直播:https://yq.aliyun.com/live/2898
“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢、云原生大規(guī)模的落地實踐,做最懂云原生開發(fā)者的公眾號。”
總結(jié)
以上是生活随笔為你收集整理的阿里开源分布式限流框架 -Sentinel Go 0.3.0 发布,支持熔断降级能力的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Istio 从懵圈到熟练:二分之一活的微
- 下一篇: Arthas | 定位线上 Dubbo