dashborad 支持持久化么?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
我们知道,Sentinel dashboard默认是是没有持久化功能的,都是保存在内存中的,对于sentinel客户端同样如此,当在sentinel dashboard配置规则的时候,dashboard会获取对应应用配置的dashboard给应用传递消息的http,将规则通过HTTP请求发送给sentinel客户端,同样,sentinel客户端也是没有持久化的都是放在内存中的。 sentinel dashbord通过HTTP向sentinel客户端获取客户端的限流配置,而在dashboard更新配置之后则通过HTTP向sentinel客户端推送更新的限流配置。 sentinel dashboard和sentinel客户端两个都各自开启了HTTP服务用来通信,sentinel dashboard开启的是一个正常的web应用,比如默认用spingboot就是基于tomcat,而sentinel客户端同样也会开启端口,让dashbaoard请求发送消息给sentinel客户端,值只不过这个客户端是一个简易的HTTP实现,实现就是基于常规的ServerSocket去实现的。而不管是sentinel dashboard将规则推送给sentinel客户端,还是sentinel客户端将相关信息推送给sentinel dashboard,sentinel dashboatd和sentinel客户端都是保存在内存中的 如果sentinel-dashboard重启,或者sentinel客户端重启,两者数据都会丢失,这对于生产肯定是不行的,因此需要进行持久化。 查看相关源码之后,我觉得可以通过两种方式
sentinel提供了DataSource方式,将需要保存的数据放在datasouce中,dashboard操作datasouce中数据,而sentinel客户端则从datasouce中拉取数据 这里我们以网上常说的基于Nacos为例来说明。
Sentinel Datasource 在说这个之前,需要说下sentinel中的Datasource,可以理解为这是对sentinel配置存储的一个抽象, 我们以大家常见的spring cloud位列,说下这个是怎么生效的。 在sentinel spring cloud中,提供了SentinelProperties的配置类,其中有一个: private Map<String, DataSourcePropertiesConfiguration> datasource = new TreeMap<>( String.CASE_INSENSITIVE_ORDER);则是配置Datasource的入口, 而DataSourcePropertiesConfiguration中有如下几种配置:
public class DataSourcePropertiesConfiguration {
private FileDataSourceProperties file;
private NacosDataSourceProperties nacos;
private ZookeeperDataSourceProperties zk;
private ApolloDataSourceProperties apollo;
private RedisDataSourceProperties redis;
private ConsulDataSourceProperties consul;
}
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系列产品 Serverless 化。RocketMQ 中文社区:https://rocketmq-learning.com/