微服務的限流


1 sentinel

1.1介紹

隨着微服務的流行,服務和服務之間的穩定性變得越來越重要。

Sentinel 是面向分布式服務架構的流量控制組件,主要以流量為切入點,從限流、流量整形、熔斷降級、系統負載保護、熱點防護等多個維度來幫助開發者保障微服務的穩定性。

Sentinel 具有以下特性

    - 豐富的應用場景

        Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發流量控制在系統容量可以承受的范圍)、消息削峰填谷、集群流量控制、實時熔斷下游不可用應用等。

    - 完備的實時監控

        Sentinel 同時提供實時的監控功能。您可以在控制台中看到接入應用的單台機器秒級數據,甚至 500 台以下規模的集群的匯總運行情況

    - 廣泛的開源生態

        Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應的依賴並進行簡單的配置即可快速地接入 Sentinel。

    - 完善的 SPI 擴展點

        Sentinel 提供簡單易用、完善的 SPI 擴展接口。您可以通過實現擴展接口來快速地定制邏輯。例如定制規則管理、適配動態數據源等。

1.2 sentinel的基本組成

  • 核心庫(Java 客戶端):不依賴任何框架/庫,能夠運行於 Java 7 及以上的版本的運行時環境,可以結合springcloud一起使用

  • 控制台(Dashboard):控制台主要負責管理推送規則、監控、集群限流分配管理等,使用賬號密碼登錄,初始賬號密碼都是sentinel

1.3 sentinel的生態

1.4 啟動sentinel

下載好的sentinel就是一個打包好的jar包,可以直接用控制台啟動

java -jar sentinel-dashboard-1.7.2.jar --server.port=自定義端口號

1.5 配置客戶端

1.5.1 已有項目 引入pom依賴

只需要在需要引入sentinel的項目中加入依賴,具體使用的版本號會自動與當前springcloud的版本號對應,比如在springcloud項目的父模塊的pom文件中加入該依賴,也可以在項目的子模塊中引入該依賴,即單獨為模塊引入

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

通過查看GitHub上alibaba提供的springcloud說明文檔可以找到組件和主版本的對應關系,其中seata是做分布式事務的,dubbon是做服務調用的,rocketMQ是消息隊列,nacos是做注冊中心,sentinel是做流量監控的

1.5.2 新項目 springboot骨架創建時啟用

如果是新項目,那么可以在springboot骨架創建項目時就引入這個組件

1.5.3 配置yml

如果是手動引入的sentinel,需要配置sentinel

spring:
  application:
    name: nacos-order
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: 127.0.0.1:8080

如果是基於springboot-alibaba骨架創建的,那么yml已經配置好了,我們只需要修改部分參數

1.6 控制台頁面

1.6.1 布局

啟動springboot項目,並訪問一次配置了sentient客戶端的模塊后,就可以通過控制台查看到項目,具體使用規則可以看官方在GitHub上的文檔說明

1.6.2 降級規則

可以在控制台新增降級規則,在什么時候進行服務降級,和Hystrix提供的設置很相似

資源名 就是controller的方法的請求路徑

異常比例 就是Hystrix提供的錯誤率

時間窗口 就是降級多少秒才恢復

1.6.3 流控規則

QPS即每秒查詢數

資源名 就是controller的方法的請求路徑

單機閾值 就是單台機器最多發送幾個查詢

1.7 springboot項目中的sentinel實際就是個過濾器

在服務器上啟動sentinel,然后啟動配置了sentinel的springboot項目,此時sentinel在springboot上就是一個過濾器

sentient提供一個網頁端控制台,運維或者開發通過控制台設定規則,然后把控制台上設定好的規則推送到所有裝了sentinel的客戶端上,此時各個客戶端上的sentient就以過濾器的角色執行這些規則,這也就是為什么sentient是低侵入的原因


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM