天天看點

Spring Cloud Alibaba(9)---Sentinel概述

Sentinel概述

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

官方文檔

分布式系統的流量防衛兵

Sentinel系列筆記

Awesome Sentinel

一、Sentinel介紹

1、Sentinel 是什麼?

Sentinel譯為“哨兵”,顧名思義,面對您背景的大量服務/微服務,前置一個哨兵,但面對大量請求時,讓背景服務有序被調用,但某些服務的不可用時,采用服務熔斷降級等措施,讓系統仍能平穩運作,不至于造成系統雪崩。

典型應用場景

限流: MQ中消息在某些時間段(比如行情交易的高峰期,秒殺期等)消息并發量非常大時,通過Sentinel起到“削峰填谷”的作用;

熔斷: 某個業務服務非常複雜,需要調用大量微服務,其中某服務不可用時,不影響整體業務運作,如送出某個訂單,需要調用諸如驗證庫存,驗證優惠金額,支付,驗證手機号等,其中驗證手機号服務不可用時,采用降級的方式讓其通過,

不影響整個送出訂單的業務;

2、Sentinel特征

Sentinel 具有以下特征

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

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

廣泛的開源生态:Sentinel 提供開箱即用的與其它開源架構/庫的整合子產品,例如與 Spring Cloud、Dubbo、gRPC 的整合。您隻需要引入相應的依賴并進行簡單的配置即可快速地接入 Sentinel。

完善的 SPI 擴充點:Sentinel 提供簡單易用、完善的 SPI 擴充接口。您可以通過實作擴充接口來快速地定制邏輯。例如定制規則管理、适配動态資料源等。

Sentinel 的主要特性

Spring Cloud Alibaba(9)---Sentinel概述

Sentinel 分為兩個部分

核心庫:(Java 用戶端)不依賴任何架構/庫,能夠運作于所有 Java 運作時環境,同時對 Dubbo / Spring Cloud 等架構也有較好的支援。

控制台:(Dashboard)基于 Spring Boot 開發,打包後可以直接運作,不需要額外的 Tomcat 等應用容器。

二、Sentinel基本概念

這裡先介紹一下Sentinel的一些基本概念,友善讀者了解,引用内容都是主要來自官方文檔

資源

資源是 Sentinel 的關鍵概念。它可以是 Java 應用程式中的任何内容,例如,由應用程式提供的服務,或由應用程式調用的其它應用提供的服務,甚至可以是一段代碼。在接下來的文檔中,我們都會用資源來描述代碼塊。
隻要通過 Sentinel API 定義的代碼,就是資源,能夠被 Sentinel 保護起來。大部分情況下,可以使用方法簽名,URL,甚至服務名稱作為資源名來标示資源。
           

規則

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

舉個簡單的例子,我們提供的一個接口 127.0.0.1:8808/getUser 我們可以把它設定成一個資源。我們為這個接口設定每秒qps不能大于5,這個就是一個流量控制規則。

三、Sentinel 重要功能

Spring Cloud Alibaba(9)---Sentinel概述

1、流量控制

Spring Cloud Alibaba(9)---Sentinel概述

思想

:保證自己不被上遊服務壓垮

任意時間到來的請求往往是随機不可控的,而系統的處理能力是有限的。我們需要根據系統的處理能力對流量進行控制。Sentinel可以根據需要把随機的請求調整成合适的形狀。

2、熔斷降級

Spring Cloud Alibaba(9)---Sentinel概述

思想

:保證自己不被下遊服務拖垮

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

3、系統負載保護

Spring Cloud Alibaba(9)---Sentinel概述

思想

:保證外界環境良好(CPU、記憶體)

當系統負載較高的時候,如果還持續讓請求進入可能會導緻系統崩潰,無法響應。在叢集環境下,會把本應這台機器承載的流量轉發到其它的機器上去。如果這個時候其它的機器也處在一個邊緣狀态的時候,Sentinel 提供了對應的保護機制,

讓系統的入口流量和系統的負載達到一個平衡,保證系統在能力範圍之内處理最多的請求。

四、Sentinel 對比 Hystrix

Spring Cloud Alibaba(9)---Sentinel概述

從圖中可以看出Sentinel相比于Hystrix功能更強大。

Hystrix 的關注點在于以隔離和熔斷為主的容錯機制,逾時或被熔斷的調用将會快速失敗,并可以提供 fallback 機制。

而 Sentinel 的側重更多 包括:多樣化的流量控制、熔斷降級、系統負載保護、實時監控和控制台。而對于熔斷本身而言 Hystrix隻支援基于失敗比例熔斷,而Sentinel除了支援基于失敗比例熔斷,還支援逾時熔斷。

參考

1、分布式系統的流量防衛兵

2、Sentinel的概念和功能

3、Sentinel+學習筆記

4、Sentinel 對比 Hystrix

少說多做,句句都會得到别人的重視;多說少做,句句都會受到别人的忽視。(9)