一、Sentinel 介紹
1、什么是?Sentinel?
? ? ?一句話來說,Sentinel就是:分布式系統的流量衛兵(官網)。
? ? ?隨著微服務的普及,服務調用的穩定性變得越來越重要。Sentinel以“流量”為切入點,在流量
? ? ?控制、斷路、負載保護等多個領域開展工作,保障服務可靠性。
? ??Sentinel 中文官方文檔:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
2、Sentinel 特點
? ? ? Sentinel 提供的功能特點如下圖所示:
? ? ? ? ? ? ??
? ? ??Sentinel 主要特點如下:
? ? ? 2.1、豐富的應用場景
? ? ? ? ? ? ? ?Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發流
? ? ? ? ? ? ? ?量控制在系統容量可以承受的范圍)、消息削峰填谷、集群流量控制、實時熔斷下游不
? ? ? ? ? ? ? ?可用應用等。
? ? ? 2.2、完備的實時監控
? ? ? ? ? ? ??Sentinel 同時提供實時的監控功能。您可以在控制臺中看到接入應用的單臺機器秒級數
? ? ? ? ? ? ? 據,甚至 500 臺以下規模的集群的匯總運行情況。
? ? ? 2.3、廣泛的開源生態
? ? ? ? ? ? ? ?Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、
? ? ? ? ? ? ? ?Apache Dubbo、gRPC、Quarkus 的整合。您只需要引入相應的依賴并進行簡單的配置
? ? ? ? ? ? ? ?即可快速地接入 Sentinel。同時 Sentinel 提供 Java/Go/C++ 等多語言的原生實現。
? ? ? ? ? ? ? ?如下圖所示:
? ? ? ? ? ? ? ?? ??
? ? ? 2.4、完善的SPI擴展機制
? ? ? ? ? ? ??Sentinel 提供簡單易用、完善的 SPI 擴展接口。您可以通過實現擴展接口來快速地定制邏
? ? ? ? ? ? ? 輯。例如定制規則管理、適配動態數據源等。
3、Sentinel 解決了什么問題?
3.1、分布式系統中面臨的問題:
? ? ? ? ?復雜的體系結構中的應用程序可能有數十個依賴關系,每個依賴關系在某些時候將不可避免
? ? ? ? ?的失敗,比如如下的例子中,當我們調用A、E、F、J、K這幾個服務的時候如果其中一個服
? ? ? ? ?務出現問題會造成什么問題?
? ? ? ? ?其實就會出現整體系統效率全部下降,而且嚴重就會出現服務雪崩的問題!
? ? ? ? ?如下圖所示業務:
? ? ? ? ? ? ? ?
3.2、什么是服務雪崩?
? ? ? ??多個微服務之間調用的時候,假設A調用B和C,B和C又調用其他的微服務,這就是所謂的
? ? ? ?扇出。如果扇出的某個鏈路上某個微服務調用的響應時間過程或者不可用,微服務A的調用
? ? ? ?就用占用越來越多的系統資源,從而引起系統崩潰,這也就是服務雪崩。其實就是服務的
? ? ? ? 高可用遭到了破壞。
? ? ? ? 對于高流量的應用來說,單一的后端依賴可能會導致服務器上的所有資源都在幾秒鐘內飽
? ? ? ? 和。同時還有可能造成這些應用程序導致服務之間的延遲增加,備份列隊,線程和其他的
? ? ? ? 系統資源緊張,導致整個系統發生更多的級聯故障。這些都表示需要對故障和延遲進行隔
? ? ? ? 離和管理,以便單個依賴關系失敗,不能取消整個應用程序或系統,所以通常發生了一個
? ? ? ? 模塊的某個實例失敗后,這時候這個模塊依然還會接受流量,然后這個有問題的模塊還調
? ? ? ? 用其他的模塊,這樣就會發生級聯故障,或者叫做雪崩。
3.3、Sentinel 是如何解決服務雪崩問題的?
? ? ? ? ?要解決服務雪崩問題的出現,就要在某個鏈路上的服務不可用用時,對整個鏈路服務做
? ? ? ? ?服務降級處理;
? ? ? ? ?Sentinel通過斷路器實現熔斷降級,保證在一個依賴出現問題的情況下,不會導致整體服務
? ? ? ? ?失敗,避免級聯故障(即雪崩問題出現),提高分布式系統的彈性。
? ? ? ? ?Sentinel斷路器:
? ? ? ? ? ? ? ?斷路器,它本身是一種開關裝置,當某個服務單元發生故障之后,通過斷路器的故障監
? ? ? ? ? ? ? ?控(類似于熔斷保險絲),向調用方返回一個符合預期的、可處理的備選響應
? ? ? ? ? ? ? (FallBack),而不是長時間的等待或者拋出調用方法無法出的異常,這樣就保證了
? ? ? ? ? ? ? ?服務調用方的不會被長時間、不必要的占用,從而避免了故障在分布式系統中蔓延
? ? ? ? ? ? ?(類似于病毒傳染),從而避免了故障在系統中蔓延,乃至崩潰。
? ? ? ??
4、Sentinel 對比其他同類產品的優勢
? ? ??對比與其他的產品而言,如:Hystrix,Sentinel 不需要我們自己手動搭建監控平臺,而且它有
? ? ? 一套類似于Nacos的Web界面,可以讓我們進行更加細粒度的配置流控、速率、服務熔斷、
? ? ? 服務降級等,在使用上更簡單方便。
5、Sentinel 組成
? ? ?Sentinel 由2部分組成,即:核心庫(Java 客戶端)與 控制臺(Dashboard)
? ? ?1)核心庫(Java 客戶端)
? ? ? ? ? ?不依賴任何框架/庫,能夠運行于所有 Java 運行時環境,同時對 Dubbo / Spring Cloud 等框
? ? ? ? ? ?架也有較好的支持。
? ? ? ? ? ?在工作中,如果需要集成?Sentinel ,需要深入?Sentinel 的核心庫;但如果時spring cloud 項
? ? ? ? ? ?目一般直接引入spring-cloud-starter-alibaba-sentinel,該依賴中包含了?Sentinel 核心庫,
? ? ? ? ? ? 如下圖所示:
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ?Sentinel 核心庫如下所示:
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>版本</version>
</dependency>
? ? ?2)控制臺(Dashboard)
? ? ? ? ? ?控制臺(Dashboard)基于 SpringBoot開發,打包后可以直接運行,不需要額外的Tomcat
? ? ? ? ? ?等應用容器。
二、Sentinel 安裝
? ? ? ?注意:這里的?Sentinel 安裝 其實安裝的是?Sentinel 控制臺(Dashboard)
? ? ? ?下載地址:https://github.com/alibaba/Sentinel/releases
? ? ? ?由上邊知道,Sentinel?Dashboard 是基于spring boot 開發,所以我們下載編譯好的
? ? ? ?jar 包,直接運行就行了。如下圖所示:
? ? ? ? ? ? ??
? ? ? ?注意:下載時注意看下你所下載的版本對JDK的版本的要求,JDK版本不一致可能啟動報錯
2、運行?Sentinel?Dashboard
? ? ?Sentinel?Dashboard 默認監聽端口是 8080,我們可以在啟動時使用參數?-Dserver.port 來指定
? ? ?其所監聽的端口,如:-Dserver.port=8090(指定 Dashboard? 監聽端口是 8090);
? ? ?Sentinel?Dashboard控制臺默認登錄用戶和密碼都是sentinel
? ? ?運行命令:java -Dserver.port=8090 -jar sentinel-dashboard-1.8.8.jar 來啟動 Dashboard;
? ? 如下圖所示:
? ? ? ? ??
? ? ?Sentinel?Dashboard 啟動成功后在瀏覽器訪問http://localhost:8090,并使用默認用戶?sentinel
? ? ?登錄,如下圖所示:
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?
? ? ? ? ? ? ?