Open Bpazy opened 1 year ago
Refer: Sentinel 核心概念
目前的应用使用 Sentinel 存在一些问题:新增资源后,必须在 flowrule.json 中定义流控规则,且在 Dashboard 中修改规则只能临时生效,想要持久化必须修改代码并发布,不灵活。
flowrule.json
所以本调研的目标为:
参考文档: https://github.com/alibaba/Sentinel/wiki/动态规则扩展
第一步: 首先增加 Apollo 作为 Sentinel DataSource 的依赖:
<dependencies> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-apollo</artifactId> <version>1.7.2</version> </dependency> </dependencies>
第二步: 在 app.id 之下添加配置:
app.id
app.id=100008072 # sentinel datasource apollo # Apollo的空间名 spring.cloud.sentinel.datasource.ds.apollo.namespaceName=application # 配置规则的key名称 spring.cloud.sentinel.datasource.ds.apollo.flowRulesKey=sentinel.flowRules
Apollo 的配置应该如下:
第三步: 给 Application 增加注解: @EnableApolloConfig
Application
@EnableApolloConfig
第四步: 测试生效。现在更改流控规则只需要更新 Apollo(持久化)即可生效;
Apollo value 长度有上限默认 20000,目前一个资源需要大约 150 个字符,则默认情况最多能存储约 133 个流控规则。
F6 Apollo 最大支持长度为 20000 所以:
Apollo value 最大长度如何扩容: 调整 item.value.length.limit 参数(点击跳转文档)。但是依旧有上限:表长度最大值: 25000,来源:https://github.com/ctripcorp/apollo/issues/832
针对多个 key 配置流控规则问题,阅读 spring-cloud-alibaba 文档发现可支持多 key 配置,形如:
spring.cloud.sentinel.datasource.ds.apollo.namespaceName=application spring.cloud.sentinel.datasource.ds.apollo.flowRulesKey=sentinel.flowRules spring.cloud.sentinel.datasource.ds2.apollo.namespaceName=application spring.cloud.sentinel.datasource.ds2.apollo.flowRulesKey=sentinel.flowRules2
所以通过拆分规则的 key,就可以解决 Apollo 长度的问题了。
这一点 sentinel 的文档中提到,当使用外部数据源时,不再推荐通过 Sentinel Dashboard 来修改规则了:https://sentinelguard.io/zh-cn/docs/dashboard.html
所以这个“缺点”不详述了。真要做就必须修改 Sentinel Dashboard 的源码,比较麻烦:Sentinel-控制台(集群流控管理)#规则配置
背景说明
目前的应用使用 Sentinel 存在一些问题:新增资源后,必须在
flowrule.json
中定义流控规则,且在 Dashboard 中修改规则只能临时生效,想要持久化必须修改代码并发布,不灵活。所以本调研的目标为:
flowrule.json
,改为在 Apollo 中配置;使用 Apollo 替代 flowrule.json
应用配置
第一步: 首先增加 Apollo 作为 Sentinel DataSource 的依赖:
第二步: 在
app.id
之下添加配置:Apollo 的配置应该如下:
第三步: 给
Application
增加注解:@EnableApolloConfig
第四步: 测试生效。现在更改流控规则只需要更新 Apollo(持久化)即可生效;
解决 Apollo value 最大长度问题
Apollo value 长度有上限默认 20000,目前一个资源需要大约 150 个字符,则默认情况最多能存储约 133 个流控规则。
F6 Apollo 最大支持长度为 20000 所以:
Apollo value 最大长度如何扩容: 调整 item.value.length.limit 参数(点击跳转文档)。但是依旧有上限:表长度最大值: 25000,来源:https://github.com/ctripcorp/apollo/issues/832
针对多个 key 配置流控规则问题,阅读 spring-cloud-alibaba 文档发现可支持多 key 配置,形如:
所以通过拆分规则的 key,就可以解决 Apollo 长度的问题了。
Sentinel Dashboard -> Apollo 同步问题
这一点 sentinel 的文档中提到,当使用外部数据源时,不再推荐通过 Sentinel Dashboard 来修改规则了:https://sentinelguard.io/zh-cn/docs/dashboard.html
所以这个“缺点”不详述了。真要做就必须修改 Sentinel Dashboard 的源码,比较麻烦:Sentinel-控制台(集群流控管理)#规则配置