Sentinel 规则持久化是指将配置在 Sentinel 控制台的流量控制、熔断降级等规则存储到持久化存储系统中,使得即使服务重启或者 Sentinel 守护进程重启,规则也能自动恢复,无需重新手动配置。
持久化方案:
-
通过 Nacos 实现持久化:
- Sentinel 与 Nacos 集成后,可以通过 Nacos 数据源实现规则的持久化。修改服务端代码以监听 Nacos 中的 Sentinel 规则变化,并将规则实时加载至内存中。
- 在 Sentinel 控制台中创建或更新规则后,这些规则会被推送到 Nacos 中保存。
-
使用 WritableDataSource 扩展点:
- Sentinel 提供了
WritableDataSource
接口,允许开发者自定义数据源来持久化规则,比如可以将规则写入数据库、文件或者其他第三方配置中心(如 ZooKeeper、Apollo 等)。
- Sentinel 提供了
-
客户端主动拉取:
- 客户端也可以周期性地从某个规则管理中心(如 RDBMS 或者文件)拉取规则,实现规则的自动刷新和持久化。
-
整合 Spring Cloud Alibaba:
- 在 Spring Cloud Alibaba 的环境中,Sentinel 通常能够无缝集成 Nacos、Apollo 等组件进行规则持久化。只需要配置相应的数据源和客户端适配器即可。
具体步骤示例(以Nacos为例):
- 添加依赖并配置数据源指向 Nacos。
- 在 Sentinel 控制台推送变更时,规则会同步保存到 Nacos。
- 客户端启动时会从 Nacos 中读取规则并应用到 Sentinel 框架内。
示例代码简述(简化版):
// 创建 Nacos 数据源
Converter<String, List<FlowRule>> flowRuleConverter = source -> JSON.parseArray(source, FlowRule.class);
NacosDataSource<List<FlowRule>> flowRuleDataSource = new NacosDataSource<>("localhost:8848", "DEFAULT_GROUP", "sentinel-flow-rules", flowRuleConverter);
// 注册数据源到 Sentinel
FlowRuleManager.register2Property(flowRuleDataSource.getProperty());
上述代码创建了一个 Nacos 数据源用于读取流控规则,并将其注册到 Sentinel 的 FlowRuleManager
中,这样每当 Nacos 中的规则发生变化时,Sentinel 就能自动更新本地的规则配置。