1. 程式人生 > >微服務架構之阿里巴巴開源限流降級中介軟體Sentinel

微服務架構之阿里巴巴開源限流降級中介軟體Sentinel

Sentinel簡介

隨著微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。說的簡單一點,Sentinel是一個對資源呼叫的控制組件,主要涵蓋限流、降級、負載保護等功能模組。

Sentinel於2012年誕生,第一個版本的主要功能為入口流量控制。在之後的6年裡,Sentinel 在阿里巴巴集團內部迅速發展,成為基礎技術模組,覆蓋了所有的核心場景。Sentinel 也因此積累了大量的流量歸整場景以及生產實踐。
如今,阿里巴巴決定把Sentinel開源,可以說是對開源社群的一個重大貢獻。

在開源的同時,阿里巴巴還宣佈把 Sentinel 的介面卡捐給了Dubbo,進一步完善了 Dubbo 生態。在複雜的生產環境下可能部署著成千上萬的 Dubbo 服務例項,流量持續不斷地進入,服務之間進行相互呼叫。但是分散式系統中可能會因流量激增、系統負載過高、網路延遲等一系列問題,導致某些服務不可用,如果不進行相應的控制可能導致級聯故障,影響服務的可用性,因此如何對流量進行合理的控制,成為保障服務穩定性的關鍵。隨著Sentinel的開源,對於使用Dubbo構建微服務的企業和開發團隊來說是一大福音。

Sentinel 的特徵

豐富的應用場景: Sentinel承接了阿里巴巴近10年的雙十一大促流量的核心場景,例如秒殺,即突發流量控制在系統容量可以承受的範圍;訊息削峰填谷;實時熔斷下游不可用應用,等等。

完備的監控功能: Sentinel同時提供最實時的監控功能,您可以在控制檯中看到接入應用的單臺機器秒級資料,甚至 500 臺以下規模的叢集的彙總執行情況。

簡單易用的擴充套件點: Sentinel提供簡單易用的擴充套件點,您可以通過實現擴充套件點,快速的定製邏輯。例如定製規則管理,適配資料來源等。

Sentinel分為兩個部分:

服務端基於Spring Boot開發,打包後可以直接執行,不需要額外安裝Tomcat等應用容器。

Java客戶端不依賴任何框架,能夠運行於所有Java執行時環境,同時對Spring/Spring Boot環境也有較好的支援。 服務端基於Spring Boot和Spring Cloud開發,打包後可以直接執行,不需要額外安裝Tomcat等應用容器。

Sentinel 的功能

限流

當我們設計了一個函式,準備上線,這時候這個函式會消耗一些資源,處理上限是1秒服務3000個QPS,但如果實際情況遇到高於3000的QPS該如何解決呢?Sentinel提供了兩種流量統計方式,一種是統計併發執行緒數,另外一種則是統計 QPS,當併發執行緒數超出某個設定的閾值,新的請求會被立即拒絕,當QPS超出某個設定的閾值,系統可以通過直接拒絕、冷啟動、勻速器三種方式來應對,從而起流量控制的作用。

降級

接觸過Spring Cloud、Service Mesh的同學,都知道熔斷降級的概念。服務之間會有相互依賴關係,例如服務A做到了1秒上萬個QPS,但這時候服務B並無法滿足1秒上萬個QPS,那麼如何保證服務A在高頻呼叫服務B時,服務B仍能正常工作呢?一種比較常見的情況是,服務A呼叫服務B時,服務B因無法滿足高頻調用出現響應時間過長的情況,導致服務A也出現響應過長的情況,進而產生連鎖反應影響整個依賴鏈上的所有應用,這時候就需要熔斷和降級的方法。Sentinel通過併發執行緒數進行限制和響應時間對資源進行降級兩種手段來對服務進行熔斷或降級。

塑形

通常我們遇到的流量具有隨機性、不規則、不受控的特點,但系統的處理能力往往是有限的,我們需要根據系統的處理能力對流量進行塑形,即規則化,從而根據我們的需要來處理流量。Sentinel通過資源的呼叫關係、執行指標、控制的效果三個維度來對流量進行控制,開發者可以自行靈活組合,從而達到理想的效果。

負載保護

平時系統執行都沒問題,但遇到大促的時候,發現機器的load非常高,這時候對系統的負載保護就顯得非常重要,以防止雪崩。Sentinel 提供了對應的保護機制,讓系統的入口流量和系統的負載達到一個平衡,保證系統在能力範圍之內處理最多的請求。需要注意的是,Sentinel在系統負載保護方面的判斷機制是根據系統能夠處理的請求,和允許進來的請求,來做平衡,而不是根據一個間接的指標(系統load)來做限流。因為我們最終追求的目標是在系統不被拖垮的情況下,提高系統的吞吐率,而不是load一定要到低於某個閾值。