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 的主要特性
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 重要功能
1、流量控制
思想
:保證自己不被上游服務壓垮
任意時間到來的請求往往是隨機不可控的,而系統的處理能力是有限的。我們需要根據系統的處理能力對流量進行控制。Sentinel可以根據需要把隨機的請求調整成合適的形狀。
2、熔斷降級
思想
:保證自己不被下游服務拖垮
當檢測到呼叫鏈路中某個資源出現不穩定的表現,例如請求響應時間長或異常比例升高的時候,則對這個資源的呼叫進行限制,讓請求快速失敗,避免影響到其它的資源而導致級聯故障。
3、系統負載保護
思想
:保證外界環境良好(CPU、記憶體)
當系統負載較高的時候,如果還持續讓請求進入可能會導致系統崩潰,無法響應。在叢集環境下,會把本應這臺機器承載的流量轉發到其它的機器上去。如果這個時候其它的機器也處在一個邊緣狀態的時候,Sentinel 提供了對應的保護機制,
讓系統的入口流量和系統的負載達到一個平衡,保證系統在能力範圍之內處理最多的請求。
四、Sentinel 對比 Hystrix
從圖中可以看出Sentinel相比於Hystrix功能更強大。
Hystrix 的關注點在於以隔離和熔斷為主的容錯機制,超時或被熔斷的呼叫將會快速失敗,並可以提供 fallback 機制。
而 Sentinel 的側重更多 包括:多樣化的流量控制、熔斷降級、系統負載保護、實時監控和控制檯。而對於熔斷本身而言 Hystrix只支援基於失敗比例熔斷,而Sentinel除了支援基於失敗比例熔斷,還支援超時熔斷。
參考
少說多做,句句都會得到別人的重視;多說少做,句句都會受到別人的忽視。(9)