码迷,mamicode.com
首页 > 其他好文 > 详细

微服务之间的通讯安全(八)-Sentinel入门之规则持久化

时间:2020-02-12 23:59:41      阅读:329      评论:0      收藏:0      [点我收藏+]

标签:security   appname   同步   pre   pac   apach   component   也会   read   

规则持久化

  现在我们配置的规则实际上是在内存中的,如果客户端应用配置中有控制台(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

微服务之间的通讯安全(八)-Sentinel入门之规则持久化

标签:security   appname   同步   pre   pac   apach   component   也会   read   

原文地址:https://www.cnblogs.com/caofanqi/p/12301851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!