Sentinel 是一個流量控制、熔斷降級和系統負載保護的開源庫。它主要用于保護分布式系統的穩定性和高可用性。Sentinel 提供了以下幾個關鍵特性:
- 流量控制:Sentinel 通過限流、流量整形和自适應流量控制等政策來實作對系統流量的控制。這有助于防止系統過載并確定系統在高流量下仍能正常運作。
- 熔斷降級:Sentinel 可以根據預定義的規則,如響應時間和異常比率等,自動熔斷和降級服務。這有助于在系統出現問題時,盡早發現并隔離故障,保證整體系統的穩定性。
- 實時監控:Sentinel 支援實時監控系統的運作狀況,提供實時的流量控制、熔斷降級等資訊,幫助我們更好地了解系統的運作狀态并及時排查問題。
- 系統負載保護:Sentinel 還可以通過自适應系統保護政策,如基于負載的自動限流和自适應響應時間等,來保護系統在高負載下的穩定性。
Nacos 是一個分布式服務配置、服務發現和動态服務管理的開源架構。它主要用于簡化分布式系統的配置管理和服務治理。将 Sentinel 和 Nacos 結合使用具有以下優點:
- 統一配置管理:通過 Nacos,我們可以将 Sentinel 的配置(如流量控制規則、熔斷降級政策等)統一管理和推送,這有助于簡化分布式系統中的配置管理和更新。
- 動态規則推送:Nacos 可以實時推送 Sentinel 規則的變更,使得我們能夠快速響應系統的變化,實作動态調整系統保護政策。
- 服務發現與治理:Nacos 提供了服務注冊和發現功能,可以幫助我們實作服務間的動态調用。同時,通過結合 Sentinel,我們可以對服務間的調用實施流量控制、熔斷降級等保護政策,提高整個系統的穩定性和可用性。
- 易于擴充和內建:Sentinel 和 Nacos 均具有良好的擴充性和易于內建的特點,可以友善地與其他微服務架構(如 Spring Cloud、Dubbo 等)結合使用,提供全面的服務治理和保護能力。
綜上所述,Sentinel 和 Nacos 的結合可以為我們提供更加強大的微服務系統。
Sentinel官網:https://sentinelguard.io/zh-cn/docs/introduction.html
Nacos安裝:K8S上搭建微服務注冊中心nacos叢集
Sentinel安裝
鏡像:bladex/sentinel-dashboard:1.7.2
Ingress
管理界面
預設賬号密碼:sentinel/sentinel
sentinel的這個面闆主要是通過可視化的方式展示sentinel的配置規則與監控。我們在開發微服務的時候如果想實作sentinel的功能如容錯熔斷限流等。需要在代碼的pom.xml中引用
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
然後在spring配置檔案中增加配置:
spring:
cloud:
sentinel:
eager: true
log:
dir: ${logging.dir}/sentinel/${spring.profiles.active}/platform-cloud-service-data/${logging.instanceName}
datasource:
ds:
nacos:
server-addr: ${NACOS_CONFIG_SERVERS:127.0.0.1:8848}
dataId: ${spring.application.name}-sentinel.json
groupId: com.tinem
namespace: ${NACOS_NAMESPACE:7bc977a7-fbc5-4946-bc78-cceb84b14bc8}
rule-type: flow
transport:
client-ip: ${SENTINEL_CLIENT_IP}
port: ${SENTINEL_TRANSPORT:8719}
dashboard: ${SENTINEL_DASHBOARD:localhost:8858}
其中dataId是在nacos中配置檔案的名字。
[
{
"resource": "/add.api", // 要限流的資源(例如,一個 API 路徑)
"limitApp": "default", // 限流應用名稱,通常設定為 "default"
"grade": 1, // 限流政策:0 代表線程數,1 代表 QPS
"count": 1, // 限流門檻值:此處設定為 100 QPS
"strategy": 0, // 調用關系限流政策:0 代表直接限流,1 代表關聯限流,2 代表鍊路入口限流
"controlBehavior": 0, // 限流效果:0 代表直接拒絕,1 代表 Warm Up,2 代表勻速排隊
"clusterMode": false // 是否為叢集限流:此處設定為單機限流
}
]
此配置表示platform-cloud-service-link服務的add接口qps限流為1。即一秒鐘隻能接受一次請求。
當我們通過腳本并發請求時可以發現隻有一條請求成功。其他請求都将失敗。
通過這種政策我們可以靈活配置我們服務的流控政策。通過nacos的動态配置機制可以實施修改我們的流控政策。