天天看點

K8S搭建微服務靈魂元件sentinel并通過Nacos動态配置

作者:簡簡單單程式員

Sentinel 是一個流量控制、熔斷降級和系統負載保護的開源庫。它主要用于保護分布式系統的穩定性和高可用性。Sentinel 提供了以下幾個關鍵特性:

  1. 流量控制:Sentinel 通過限流、流量整形和自适應流量控制等政策來實作對系統流量的控制。這有助于防止系統過載并確定系統在高流量下仍能正常運作。
  2. 熔斷降級:Sentinel 可以根據預定義的規則,如響應時間和異常比率等,自動熔斷和降級服務。這有助于在系統出現問題時,盡早發現并隔離故障,保證整體系統的穩定性。
  3. 實時監控:Sentinel 支援實時監控系統的運作狀況,提供實時的流量控制、熔斷降級等資訊,幫助我們更好地了解系統的運作狀态并及時排查問題。
  4. 系統負載保護:Sentinel 還可以通過自适應系統保護政策,如基于負載的自動限流和自适應響應時間等,來保護系統在高負載下的穩定性。

Nacos 是一個分布式服務配置、服務發現和動态服務管理的開源架構。它主要用于簡化分布式系統的配置管理和服務治理。将 Sentinel 和 Nacos 結合使用具有以下優點:

  1. 統一配置管理:通過 Nacos,我們可以将 Sentinel 的配置(如流量控制規則、熔斷降級政策等)統一管理和推送,這有助于簡化分布式系統中的配置管理和更新。
  2. 動态規則推送:Nacos 可以實時推送 Sentinel 規則的變更,使得我們能夠快速響應系統的變化,實作動态調整系統保護政策。
  3. 服務發現與治理:Nacos 提供了服務注冊和發現功能,可以幫助我們實作服務間的動态調用。同時,通過結合 Sentinel,我們可以對服務間的調用實施流量控制、熔斷降級等保護政策,提高整個系統的穩定性和可用性。
  4. 易于擴充和內建: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

K8S搭建微服務靈魂元件sentinel并通過Nacos動态配置

Ingress

K8S搭建微服務靈魂元件sentinel并通過Nacos動态配置

管理界面

預設賬号密碼:sentinel/sentinel

K8S搭建微服務靈魂元件sentinel并通過Nacos動态配置

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  // 是否為叢集限流:此處設定為單機限流
  }
]           
K8S搭建微服務靈魂元件sentinel并通過Nacos動态配置

此配置表示platform-cloud-service-link服務的add接口qps限流為1。即一秒鐘隻能接受一次請求。

當我們通過腳本并發請求時可以發現隻有一條請求成功。其他請求都将失敗。

K8S搭建微服務靈魂元件sentinel并通過Nacos動态配置

通過這種政策我們可以靈活配置我們服務的流控政策。通過nacos的動态配置機制可以實施修改我們的流控政策。

繼續閱讀