美文网首页
Sentinel规则持久化

Sentinel规则持久化

作者: 王侦 | 来源:发表于2023-03-12 15:05 被阅读0次

    1.原始模式

    如果不做任何修改,Dashboard 的推送规则方式是通过 API 将规则推送至客户端并直接更新到内存中。

    这种做法的好处是简单,无依赖;坏处是应用重启规则就会消失,仅用于简单测试,不能用于生产环境。

    2.拉模式

    Pull 模式的数据源(如本地文件、RDBMS 等)一般是可写入的。使用时需要在客户端注册数据源:将对应的读数据源注册至对应的 RuleManager,将写数据源注册至 transport 的 WritableDataSourceRegistry 中。

    基于本地文件拉模式的核心源码:

    • Dashboard那边通过SentinelApiClient与微服务端进行通信
    • 微服务端也采用了Reactor模式接收Dashboard的请求
    • 单线程池executor处理连接,多线程池bizExecutor处理读写请求
    • 业务处理通过SimpleHttpCommandCenter处理
    • getRules请求通过FetchActiveRuleCommandHandler处理
    • setRules请求通过ModifyRulesCommandHandler处理
    • 写数据源为FileWritableDataSource(通过SPI机制加载FileDataSourceInit)
    • 读数据源为FileRefreshDataSource,3s扫描一次监控配置文件是否变化,如果变化则更新到内存,也即FlowRuleMananger的flowRules中(sentinel-datasource-extension中有)

    3.推模式

    生产环境下一般更常用的是 push 模式的数据源。对于 push 模式的数据源,如远程配置中心(ZooKeeper, Nacos, Apollo等等),推送的操作不应由 Sentinel 客户端进行,而应该经控制台统一进行管理,直接进行推送,数据源仅负责获取配置中心推送的配置并更新到本地。因此推送规则正确做法应该是 配置中心控制台/Sentinel 控制台 → 配置中心 → Sentinel 数据源 → Sentinel,而不是经 Sentinel 数据源推送至配置中心。

    3.1 基于Nacos配置中心控制台实现推送(相对于基于文件的拉模式差异较小)

    核心源码:

    • 读数据源NacosDataSource,由包springcloud-alibaba-sentinel-datasource提供的NacosDataSourceFactoryBean和sentinel-datasource-nacos包引入的NacosDataSource共同完成实现。
    • 写数据源NacosWritableDataSource,由SPI机制加载InitFunc的NacosDataSourceInitFunc实现

    3.2 基于Sentinel控制台实现推送

    从 Sentinel 1.4.0 开始,Sentinel 控制台提供 DynamicRulePublisher 和 DynamicRuleProvider 接口用于实现应用维度的规则推送和拉取:

    • DynamicRuleProvider<T>: 拉取规则
    • DynamicRulePublisher<T>: 推送规则

    核心源码:

    • Dashboard的SentinelApiClient替换为FlowRuleNacosProvider和FlowRuleNacosPublisher,FlowRuleNacosProvider负责从远程配置中心拉取规则,FlowRuleNacosPublisher负责推送规则到远程配置中心
    • 微服务端不再与Dashboard建立通信连接,而是通过读数据源NacosDataSource从Nacos config配置中心读取配置规则
    • 配置中心配置规则有变化,会立马通知微服务端去重新拉取,拉取后会调用NacosDataSource的configListener#receiveConfigInfo()更新配置规则到FlowRuleManager的flowRules中

    相关文章

      网友评论

          本文标题:Sentinel规则持久化

          本文链接:https://www.haomeiwen.com/subject/gvifrdtx.html