在專案中使用Spring Cloud Alibaba Sentinel組件
Sentinel 是什么
Sentinel與Hystrix的區別
Sentinel的使用步驟:
一、控制臺(Dashboard)
二、搭建客戶端
三、查看介面的流量的詳情
Sentinel 是什么
隨著微服務的流行,服務和服務之間的穩定性變得越來越重要,Sentinel 以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性,
官網:https://github.com/alibaba/Sentinel
中文官網:https://github.com/alibaba/Sentinel/wiki
Sentinel與Hystrix的區別
由于Hystrix不再積極的開發,進入維護階段,現在越來越多的開發者在專案中使用Spring Cloud Alibaba Sentinel組件,
Hystrix的關注點在于以 隔離和熔斷為主的容錯機制,超時或被熔斷的呼叫將會快速失敗,并可以提供 fallback 機制,
Sentinel的側重點在于:多樣化的流量控制、熔斷降級,系統負載保護,實時監控和控制臺,
對比詳圖

Sentinel的功能特點--摘自官方

Sentinel分為兩大部分:
核心庫(Java 客戶端)--自己的專案中的代碼,不依賴任何框架/庫,能夠運行于 Java 7 及以上的版本的運行時環境,同時對 Dubbo / Spring Cloud 等框架也有較好的支持,
控制臺(Dashboard)--控制臺主要負責管理推送規則、監控、集群限流分配管理、機器發現等,
一、控制臺(Dashboard)
1、下載sentienl的jar包,本例使用:sentinel-dashboard-1.7.2.jar,地址:https://github.com/alibaba/Sentinel/releases
2、使用java -jar命令啟動Sentinel控制臺
啟動 Sentinel 控制臺需要 JDK 版本為 1.8 及以上版本,

3、訪問地址:http://localhost:8080/,8080為Sentinel的默認埠 默認賬號密碼為sentinel

二、搭建客戶端
1.在自己的專案中引入依賴
<!---sentinel的依賴-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
2.編輯專案中的 application.yml或者bootstrap.yml檔案
添加Sentinel 控制臺配置資訊
spring:
sentinel:
transport:
port: 8719 # 應用與Sentinel控制臺互動的埠,應用本地會起一個該埠占用的HttpServer # 默認8719埠,假如埠被占用,依次+1,直到找到未被占用埠
dashboard: localhost:8080 #sentinel控制臺的請求地址,需要啟動一個dashboard的jar
3.資源是 Sentinel 中的一個關鍵概念,它可以是任何東西,例如服務、方法,甚至是代碼片段,
一旦被 Sentinel API 包裹,就被定義為資源,可以申請 Sentinel 提供的保護,
把需要控制流量的代碼用 Sentinel的關鍵代碼 SphU.entry("資源名") 和 entry.exit() 包圍起來即可,
實體代碼--摘自官方
Entry entry = null;
try {
// 定義一個sentinel保護的資源,名稱為test-sentinel-api
entry = SphU.entry(resourceName);
// 模擬執行被保護的業務邏輯耗時
Thread.sleep(100);
return a;
} catch (BlockException e) {
// 如果被保護的資源被限流或者降級了,就會拋出BlockException
log.warn("資源被限流或降級了", e);
return "資源被限流或降級了";
} catch (InterruptedException e) {
return "發生InterruptedException";
} finally {
if (entry != null) {
entry.exit();
}
ContextUtil.exit();
}
}
使用注解@SentinelResource 用于定義資源,并提供可選的例外處理和 fallback 配置項
- value:資源名稱,必需項(不能為空)
- entryType:entry 型別,可選項(默認為 EntryType.OUT)
- blockHandler / blockHandlerClass: blockHandler 對應處理 BlockException 的函式名稱,可選項
- fallback:fallback 函式名稱,可選項,用于在拋出例外的時候提供 fallback 處理邏輯,
在專案中Controller中添加@SentinelResource(value = "Sentinel-name")
例如:

啟動專案
三、查看介面的流量的詳情
1.實時監控

2.簇點鏈路

3.等等:其他使用方法有待發掘
補充:
1.QPS:每秒請求數,當前呼叫該api的QPS到達閾值的時候進行限流
2.執行緒數:當呼叫該api的執行緒數到達閾值的時候,進行限流
3.直接:當api大達到限流條件時,直接限流4
4.關聯:當關聯的資源到達閾值,就限流自己
5.鏈路:只記錄指定路上的流量,指定資源從入口資源進來的流量,如果達到閾值,就進行限流,api級別的限流
6.熱點規則即經常訪問的資料,很多時候我們希望統計某個熱點資料中訪問頻次最高的 Top K 資料,并對其訪問進行限制,
7.回應時間是指系統對請求作出回應的時間,
8.吞吐量是指系統在單位時間內處理請求的數量,
如果本篇博客對您有一定的幫助,大家記得留言+點贊哦,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/290254.html
標籤:java
