微服務之間的通訊安全(八)-Sentinel入門之規則持久化


規則持久化

  現在我們配置的規則實際上是在內存中的,如果客戶端應用配置中有控制台(dashboard),當流量經過客戶端的時候,會把規則同步給控制台;同樣當在控制台配置規則后,也會把規則推送給相應的客戶端。規則都是存放在兩邊的內存中,一旦控制台或客戶端重啟,內存中的規則就消失了。如下圖:

  我們需要一個遠程的配置中心,將規則都存放在里面,如下圖,當控制台有規則變化時,將規則推送到遠程配置中心進行持久化,如果遠程配置中心有規則變化,可以推送給客戶端,這樣的話,不管是客戶端還是控制台重啟,都不會丟掉現有的規則配置。

遠程配置中心支持的組件有很多,如:ZooKeeper 、Nacos 、Apollo 等,這里我們使用ZooKeeper 作為配置中心。

1.1、准備zookeeper,下載連接http://mirror.bit.edu.cn/apache/zookeeper/stable/

1.2、改造控制台

  1.2.1、下載或克隆Sentinel項目到本地 https://github.com/alibaba/Sentinel/tree/release-1.7 ,通過IDE打開sentinel-dashboard項目

  1.2.2、將pom中的zookeeper客戶端curator依賴的scope去掉

  1.2.3、將test\java\com\alibaba\csp\sentinel\dashboard\rule\zookeeper移動到\main\java\com\alibaba\csp\sentinel\dashboard\rule下

  1.2.4、將com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2中的DynamicRuleProvider、DynamicRulePublisher 引用的名字修改為zookeeper的

   1.2.5、將sidebar.html中的dashboard.flowV1改為dashboard.flow

   1.2.6、如果需改端口,或登陸的用戶名和密碼可以在application.properties中進行修改

1.3、改造客戶端

1.3.1、客戶端pom添加配置數據源依賴sentinel-datasource-zookeeper,因為spring-cloud-starter-alibaba-sentinel中的sentinel為1.5.2,這是使用一樣的

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-zookeeper</artifactId>
            <version>1.5.2</version>
        </dependency>

1.3.2、配置Sentinel從Zookeeper中獲取配置。

 

/**
 * 從遠程配置中心獲取規則,進行配置
 *
 * @author caofanqi
 * @date 2020/2/11 15:50
 */
@Component
public class SentinelConfig{

    @Value("${sentinel.zookeeper.address}")
    private String remoteAddress;

    @Value("${sentinel.zookeeper.path}")
    private String path;

    @Value("${spring.application.name}")
    private String appName;


    @PostConstruct
    public void loadRules(){
        //流控規則數據源
        ReadableDataSource<String, List<FlowRule>> flowRuleDataSource = new ZookeeperDataSource<>(remoteAddress, path + "/" + appName,
                source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>() {}));
        FlowRuleManager.register2Property(flowRuleDataSource.getProperty());

        //....
    }

}

1.4、測試

1.4.1、啟動認證服務器、zk,sentinel控制台、客戶端order服務,給order服務訪問流量,登陸sentinel客戶端,為createOrder設置流控規則

1.4.2、通過zk客戶端可以看到,規則已經持久化進去了

1.4.3、重啟sentinel控制台、客戶端order服務,快速訪問創建訂單,流控生效

 1.4.5、打開sentinel控制台,也可看到規則還在。

 

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

 

項目源碼:https://github.com/caofanqi/study-security/tree/dev-sentinel4


免責聲明!

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



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