天天看點

SpringCloudAlibaba之Sentinel介紹

Sentinel 是什麼

随着微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 是面向分布式服務架構的流量控制元件,主要以流量為切入點,從限流、流量整形、熔斷降級、系統負載保護、熱點防護等多個次元來幫助開發者保障微服務的穩定性。

Sentinel 的曆史

  • 2012 年,Sentinel 誕生,主要功能為入口流量控制。
  • 2013-2017 年,Sentinel 在阿裡巴巴集團内部迅速發展,成為基礎技術子產品,覆寫了所有的核心場景。Sentinel 也是以積累了大量的流量歸整場景以及生産實踐。
  • 2018 年,Sentinel 開源,并持續演進。
  • 2019 年,Sentinel 朝着多語言擴充的方向不斷探索,推出 C++ 原生版本,同時針對 Service Mesh 場景也推出了 Envoy 叢集流量控制支援,以解決 Service Mesh 架構下多語言限流的問題。
  • 2020 年,推出 Sentinel Go 版本,繼續朝着雲原生方向演進。

Sentinel 基本概念

資源

資源是 Sentinel 的關鍵概念。它可以是 Java 應用程式中的任何内容,例如,由應用程式提供的服務,或由應用程式調用的其它應用提供的服務,甚至可以是一段代碼。在接下來的文檔中,我們都會用資源來描述代碼塊。

隻要通過 Sentinel API 定義的代碼,就是資源,能夠被 Sentinel 保護起來。大部分情況下,可以使用方法簽名,URL,甚至服務名稱作為資源名來标示資源。

規則

圍繞資源的實時狀态設定的規則,可以包括流量控制規則、熔斷降級規則以及系統保護規則。所有規則可以動态實時調整。

Sentinel 功能和設計理念

流量控制

什麼是流量控制

流量控制在網絡傳輸中是一個常用的概念,它用于調整網絡包的發送資料。然而,從系統穩定性角度考慮,在處理請求的速度上,也有非常多的講究。任意時間到來的請求往往是随機不可控的,而系統的處理能力是有限的。我們需要根據系統的處理能力對流量進行控制。Sentinel 作為一個調配器,可以根據需要把随機的請求調整成合适的形狀。

流量控制設計理念

流量控制有以下幾個角度:

  • 資源的調用關系,例如資源的調用鍊路,資源和資源之間的關系;
  • 運作名額,例如 QPS、線程池、系統負載等;
  • 控制的效果,例如直接限流、冷啟動、排隊等。

Sentinel 的設計理念是讓您自由選擇控制的角度,并進行靈活組合,進而達到想要的效果。

熔斷降級

什麼是熔斷降級

除了流量控制以外,及時對調用鍊路中的不穩定因素進行熔斷也是 Sentinel 的使命之一。由于調用關系的複雜性,如果調用鍊路中的某個資源出現了不穩定,可能會導緻請求發生堆積,進而導緻級聯錯誤。

Sentinel 和 Hystrix 的原則是一緻的: 當檢測到調用鍊路中某個資源出現不穩定的表現,例如請求響應時間長或異常比例升高的時候,則對這個資源的調用進行限制,讓請求快速失敗,避免影響到其它的資源而導緻級聯故障。

熔斷降級設計理念

在限制的手段上,Sentinel 和 Hystrix 采取了完全不一樣的方法。

Hystrix 通過 線程池隔離 的方式,來對依賴(在 Sentinel 的概念中對應 資源)進行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點是除了增加了線程切換的成本(過多的線程池導緻線程數目過多),還需要預先給各個資源做線程池大小的配置設定。

Sentinel 對這個問題采取了兩種手段:

  • 通過并發線程數進行限制

和資源池隔離的方法不同,Sentinel 通過限制資源并發線程的數量,來減少不穩定資源對其它資源的影響。這樣不但沒有線程切換的損耗,也不需要您預先配置設定線程池的大小。當某個資源出現不穩定的情況下,例如響應時間變長,對資源的直接影響就是會造成線程數的逐漸堆積。當線程數在特定資源上堆積到一定的數量之後,對該資源的新請求就會被拒絕。堆積的線程完成任務後才開始繼續接收請求。

  • 通過響應時間對資源進行降級

除了對并發線程數進行控制以外,Sentinel 還可以通過響應時間來快速降級不穩定的資源。當依賴的資源出現響應時間過長後,所有對該資源的通路都會被直接拒絕,直到過了指定的時間視窗之後才重新恢複。

系統自适應保護

Sentinel 同時提供系統次元的自适應保護能力。防止雪崩,是系統防護中重要的一環。當系統負載較高的時候,如果還持續讓請求進入,可能會導緻系統崩潰,無法響應。在叢集環境下,網絡負載均衡會把本應這台機器承載的流量轉發到其它的機器上去。如果這個時候其它的機器也處在一個邊緣狀态的時候,這個增加的流量就會導緻這台機器也崩潰,最後導緻整個叢集不可用。

針對這個情況,Sentinel 提供了對應的保護機制,讓系統的入口流量和系統的負載達到一個平衡,保證系統在能力範圍之内處理最多的請求。

Sentinel 是如何工作的

Sentinel 的主要工作機制如下:

  • 對主流架構提供适配或者顯示的 API,來定義需要保護的資源,并提供設施對資源進行實時統計和調用鍊路分析。
  • 根據預設的規則,結合對資源的實時統計資訊,對流量進行控制。同時,Sentinel 提供開放的接口,友善您定義及改變規則。
  • Sentinel 提供實時的監控系統,友善您快速了解目前系統的狀态。

繼續閱讀