Sentinel最佳实践的谜之逻辑
Sentinel给的最佳实践
在单应用使用中,Sentinel Dashboard 是直接通过http向machine发送了规则修改,machine接收到之后.RuleManager应用规则.来完成的规则变更推送.
这个有两个问题
-
只能一台一台机器改
-
machine重启后规则丢失
在上图,某位阿里大神,给的解决方案确实加一个配置中心,Sentinel Dashboard先发给配置中心,然后machine监听配置中心更改,监听到数据改变后RuleManager应用规则.
我想说何必呢,这究竟是何必呢???
- Dashborad能直接调用服务修改规则,为什么要个配置中心???
- 既然能改一台不能改多台吗???
- 重启后重连Dashborad不能再去取一次吗???
- Dashborad并没有提供调用配置中心代码.是要我生成规则出来贴到配置中心里去吗???
Sentinel真最佳实践
- 项目重启从dashboard获取流控策略
- dashboard持久化流控策略
这样项目重启也不会丢失流控策略,当修改策略时dashboard持久化策略并且将策略从新发布给服务
Sentinel现有问题
- 规则没有持久化
- 多台machine同步修改规则
- machine重启后需要恢复规则
基于现有问题的修改
原有问题 | 解决方案 |
---|---|
所有rule都只是保存在内存中,dashboard如果重启将丢失.官方建议使用动态数据源推送规则,但这增加了无用的开销. | 修改持久层,使用JPA将rule都持久化到DB,这样即使重启rule也不会丢失. |
只能针对单个机器实例进行规则CURD. | 扩展该功能CD为同app批量操作,添加,删除规则时,将同步所有机器.新机器启动,或者死机器复活重新发送规则 |
机器重启后将丢失规则. | 在心跳中增加埋点.如果是新机器便会clone第一个台机器规则到自身.重启的机器将重新将规则推送. |
修改完集群流控配置,未同步rule到token server | 修改集群流控配置后,同步rule到token server |
完成进度
- 流量控制
- 热点参数限流
- 集群流控
- 熔断降级
使用方法
除增加application.properties中数据库配置外,其他配置皆参照下方官方文档.数据库表将通过JPA自动生成,无需手动建表.
代码已发布github感觉可以请帮忙star.谢谢观看.
https://github.com/zhuyb0614/sentinel-dashboard