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 的主要特性
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiETPwJWZ3ZCMwcTP39zZwpmLuJkbhVXVU9keBRlT3VEVONDMD90dRRVT5tmaNFTRU9UeRRUT4lERNlHM55EeZRUT1EEVNZXUE1EeJRUT5hTeOhXWE1UNBRVT2NmMiNnSywEd5ITW110MaZHetlVdO1GT3lERNl3YXJGc5kHT20ESjBjUIF2Lc12bj5SYphXa5VWen5WY35iclN3Ztl2Lc9CX6MHc0RHaiojIsJye.jpg)
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除了支援基于失敗比例熔斷,還支援逾時熔斷。
參考
1、分布式系統的流量防衛兵
2、Sentinel的概念和功能
3、Sentinel+學習筆記
4、Sentinel 對比 Hystrix
少說多做,句句都會得到别人的重視;多說少做,句句都會受到别人的忽視。(9)