Alibaba Sentinel規則持久化-推模式-手把手教程(基於Nacos)

前面,已經為Sentinel實現了 Alibaba Sentinel 規則持久化-拉模式-手把手教程(基於文件) ,本文來實現基於

推模式的規則持久化。

一、推模式架構圖

Alibaba Sentinel規則持久化-推模式-手把手教程(基於Nacos)

TIPS

圖片來自官方。

引用自 https://github.com/alibaba/Sentinel/wiki/在生產環境中使用-Sentinel

二、原理簡述

控制檯推送規則:

•將規則推送到Nacos或其他遠程配置中心

•Sentinel客戶端鏈接Nacos,獲取規則配置;並監聽Nacos配置變化,如發生變化,就更新本地緩存(從而讓本地緩存總是和Nacos一致)

控制檯監聽Nacos配置變化,如發生變化就更新本地緩存(從而讓控制檯本地緩存總是和Nacos一致)

三、微服務改造

1 加依賴

<dependency>
<groupid>com.alibaba.csp/<groupid>
<artifactid>sentinel-datasource-nacos/<artifactid>
/<dependency>

2 添加配置

spring:
cloud:
sentinel:
datasource:

# 名稱隨意
flow:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}-flow-rules
groupId: SENTINEL_GROUP
# 規則類型,取值見:
# org.springframework.cloud.alibaba.sentinel.datasource.RuleType
rule-type: flow
degrade:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}-degrade-rules
groupId: SENTINEL_GROUP
rule-type: degrade
system:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}-system-rules
groupId: SENTINEL_GROUP
rule-type: system
authority:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}-authority-rules
groupId: SENTINEL_GROUP
rule-type: authority
param-flow:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}-param-flow-rules
groupId: SENTINEL_GROUP
rule-type: param-flow

四、Sentinel控制檯改造

控制檯改造主要是為規則實現

•DynamicRuleProvider:從Nacos上讀取配置

•DynamicRulePublisher:將規則推送到Nacos上

1 修改pom.xml,找到:


<dependency>
<groupid>com.alibaba.csp/<groupid>
<artifactid>sentinel-datasource-nacos/<artifactid>
<scope>test/<scope>
/<dependency>

將 <scope>test/<scope> 這一行註釋掉,即改為如下:


<dependency>
<groupid>com.alibaba.csp/<groupid>
<artifactid>sentinel-datasource-nacos/<artifactid>

/<dependency>

2 找到 sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/rule/nacos目錄,將整個目錄拷貝到 sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos,如圖:

Alibaba Sentinel規則持久化-推模式-手把手教程(基於Nacos)

3 修改 com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2 ,找到

@Autowired
@Qualifier("flowRuleDefaultProvider")
private DynamicRuleProvider<list>> ruleProvider;
@Autowired
@Qualifier("flowRuleDefaultPublisher")
private DynamicRulePublisher<list>> rulePublisher;
/<list>/<list>

修改為:

@Autowired
@Qualifier("flowRuleNacosProvider")
private DynamicRuleProvider<list>> ruleProvider;
@Autowired
@Qualifier("flowRuleNacosPublisher")
private DynamicRulePublisher<list>> rulePublisher;
/<list>/<list>

4 修改 sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html,找到:





把註釋解開,即改為:




  • 齊活兒啦!終於把流控規則改造成推模式持久化啦!

    五、編譯 & 啟動

    •執行 mvn clean package -DskipTests

    •在項目的 target 目錄找到sentinel-dashboard.jar ,執行 java -jar sentinel-dashboard.jar 啟動控制檯。

    六、測試

    •測試1:用Sentinel控制檯【菜單欄的 流控規則 V1 】推送流控規則,規則會存儲到Nacos;

    •測試2:直接在Nacos上修改流控規則,然後刷新Sentinel控制檯,控制檯上的顯示也會被修改;

    •測試3:重啟Sentinel控制檯,並重啟微服務;刷新控制檯,可以發現規則依然存在。

    七、萬里長征才進行了第一步…

    以上,其實只實現了流控規則的持久化。Sentinel有若干種規則,例如降級規則、系統規則、授權規則、熱點規則等,都需要使用類似的方式,修改 com.alibaba.csp.sentinel.dashboard.controller 包中對應的Controller,才能實現持久化。

    八、懶人包

    筆者已經基於Sentinel Dashboard 1.6.2做了修改,為如下規則提供了持久化:

    •流控規則

    •降級規則

    •系統規則

    •參數熱點規則

    GitHub地址:https://github.com/eacdy/Sentinel-Dashboard-Nacos[1] ,使用1.6.2-NACOS分支即可。

    使用說明:https://github.com/eacdy/Sentinel-Dashboard-Nacos/releases[2]

    修改的文件:

    Alibaba Sentinel規則持久化-推模式-手把手教程(基於Nacos)

    九、推模式優缺點分析

    優點:

    •規則持久化

    •一致性好

    •性能優秀

    缺點:

    •改動多、並且麻煩

    •引入額外的依賴(Nacos)

    十、參考文檔

    https://github.com/alibaba/Sentinel/wiki/在生產環境中使用-Sentinel#pull模式


    分享到:


    相關文章: