一、安裝
Release v1.8.3 · alibaba/Sentinel · GitHubA powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服務的高可用流控防護組件) - Release v1.8.3 · alibaba/Sentinelhttps://github.com/alibaba/Sentinel/releases/tag/1.8.3https://github.com/alibaba/Sentinel/releases/tag/1.8.3https://github.com/alibaba/Sentinel/releases/tag/1.8.3https://github.com/alibaba/Sentinel/releases/tag/1.8.3
打開網址,可以看到下面有一個1.8.3的版本
下載完之后放在自己指定的文件夾里
然后在上面輸入cmd打開cmd控制臺,進行啟動
java -Dserver.port=8888 -jar sentinel-dashboard-1.8.1.jar
這里的-Dserver.port=8888
意味著設置了一個名為server.port
的系統屬性,其值為8888
。這個系統屬性通常被Java應用程序用來指定其運行時的服務器端口號。
二、客戶端訪問
瀏覽器訪問:
127.0.0.1:8888(ip+端口號,端口號為剛剛設置的8888)
密碼默認都是sentinel
輸入賬號和密碼之后
?看到這頁面說明安裝成功!
三、微服務整合sentinel
(1)引入依賴
<!--引入sentinel客戶端依賴-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>${spring-cloud-alibaba.version}</version>
</dependency>
(2)修改配置
server:port: 9090
spring:cloud:sentinel:transport:dashboard: 127.0.0.1:8888 #sentinel控制臺所在的ip和端口
(3)瀏覽器訪問
sentinel屬于懶加載模式,其核心思想是僅在需要時才加載資源。具體來說,在Sentinel中,懶加載模式意味著只有當一個資源(如API接口)被實際訪問時,Sentinel才會開始對該資源進行監控和限流等策略的配置。
所以我們得需要先訪問一下接口,才能加載進去
@RestController
@RequestMapping("/test")
public class UserController {//這邊為了做測試,就簡單的寫一個test接口@RequestMapping("/test1")public String test1(){return "test1";}//多添加一個hello的測試接口,下面會用到@RequestMapping("/hello")public String hello(){return "hello";}
}
重啟服務器,在瀏覽器訪問一下我們剛剛寫的接口?
訪問成功之后,重新刷新一下sentinel
點擊打開就能看見相關信息
四、sentinel做限流
對資源進行設置限流規則
資源:ip,變量,參數, url==》一般用url做限流規則
1、如何做限流規則
新增完之后就可以看見新添的
這邊用jmeter進行壓力測試
可以看到,假設我們一秒鐘請求10個,則只有五個通過,因為我們上面進行限流,一秒鐘最多五個請求
這個就是直接模式
2、三種流控模式
直接,關聯,鏈路
(1)直接模式
剛剛用的就是直接的流控模式
(2)關聯模式(更多使用在同一個微服務)
這邊我們舉個例子來理解關聯模式
比如我們有一個訂單的微服務
訂單微服務 ==》資源訪問數100
--創建訂單 ==》它90
--查詢訂單 ==》它只能10
設置:流控模式換成關聯模式,新增一個hello的接口,來進行測試
?測試:
當它測試數據過多的時候,訪問跟它相關聯的/test/test1
(3)鏈路模式(更多使用在不同的微服務)
資源A可以訪問資源B A-》B
資源C也可以訪問B C-》B
舉例場景:
創建訂單===》調用商品
查詢訂單===》調用商品
這邊涉及到微服務之間的相互調用,則需要寫接口,修改配置
訂單調用商品,用戶調用商品,形成一個鏈路模式,然后就先寫一下不同微服務之間的調用,如果在不同的微服務下,訂單是個微服務,就要設置讓openfeign接受sentinel,就要修改配置(修改兩個),隨后運行項目,讓sentinel里面有對應的微服務的方法,并且設置限流模式為鏈路模式,進行限流,設置參數,然后就用jmeter進行壓力測試,使用json斷言來判斷,查看結果樹,看會不會影響到?,這邊就不做演示,思路大概是這樣子的
#修改配置
spring:cloud:sentinel:transport:dashboard: 127.0.0.1:8888 #sentinel控制臺所在的ip和端口web-context-unify: false #關閉,使得鏈路跟蹤不會受到影響feign:sentinel:enabled: true #讓openfeign支持sentinel
?五、拓展
(1)什么是sentinel,核心功能是什么?
Sentinel 是面向分布式系統的流量控制組件,核心功能包括流量控制、熔斷降級、系統自適應保護、實時監控等,目標是保障微服務的穩定性。
(2)Sentinel 和 Hystrix 的主要區別是什么?
Sentinel 更強調流量控制(QPS/并發量)和實時監控,支持動態規則配置;Hystrix 側重于熔斷和線程隔離,但已進入維護模式。Sentinel 的流量控制模型更靈活(如直接拒絕、Warm Up、勻速排隊)。
(3)為什么要使用sentinel?
流量控制:Sentinel可以進行限流操作,從而防止系統被過載壓垮。這對于保護系統在高并發場景下的穩定性至關重要。
熔斷降級:Sentinel通過熔斷機制,可以在檢測到某個服務出現不穩定表現時(如請求響應時間長或異常比例升高),自動對該服務的調用進行限制,讓請求快速失敗,從而避免影響到其他服務,保證系統的整體穩定性。
實時監控與報警:Sentinel提供了實時的監控功能,可以在控制臺中看到接入應用的單臺機器秒級數據,甚至500臺以下規模的集群的匯總運行情況。同時,根據預設的規則,Sentinel還可以對系統的異常情況進行實時報警,及時通知相關人員進行處理,避免問題擴大化。