非持久配置中心 ConfigServer,用于非持久数据的发布和订阅。
产品架构基于发布订阅模型,去中心无master设计,保证了系统的可扩展性、高可用。在集团内部主要场景为分布式消息系统Notify、分布式RPC框架HSF提供地址发现服务。
ConfigServer产品特性
无Master架构
ConfigServer基于无Master架构ConfigServer是无中心化的架构,不存在单点问题,通过特定的算法进行数据增量同步。
自动聚合
ConfigServer支持数据的自动聚合配置数据的聚合功能。每台机器向ConfigServer注册自己的服务元信息,ConfigServer会根据服务名和分组自动聚合所有元数据,提供给服务订阅方使用。
实时
ConfigServer是推数据的模型ConfigServer的服务端与客户端是基于长连接的方式进行通信,在客户端订阅关系确定后,配置信息一旦发生变化,会主动推送配置数据到客户端,并回调客户端的业务监听器.
集群版本V3
架构设计:
Session集群负责与客户端的交互,可动态扩容
DataServer集群解决数据的容灾,数量固定
实现原理:
- 客户端将地址注册到session,session异步复写到DataServer
- ConfigServer以1s为周期压缩后推送到所有session上
- session缓存dataServer推送的数据,只保存本地数据和推送的压缩数据
好处:
- session集群可根据业务规模水平扩容,而DataServer集群数量固定不会影响集群性能
2.单一职责,方便运维
如何保证数据一致性(最终一致性):
1.问题:client写session的时候,session挂了,怎么办
解决:client选择其他session重新写入
2.问题:session写入DataServer失败了怎么办
解决:对于每一个写任务,session通过重试确保最终写成功
3.问题:DataServer挂了怎么办
解决:机器恢复后,在有写入操作时,session会自动将本地全量数据写入到DataServer中.
4.问题:session复写DataServer的时候数据冲突了,怎么办?
解决: 固定顺序复写,不会冲突?
5.问题:DataServer在推送数据给session的时候失败了,怎么办
解决:重试
6.问题:session挂了,怎么办?
解决:client和session有心跳机制,会连接其他session并获取最新的数据
异步非阻塞
好处:
1.更低的延时,更高的吞吐量
2.方便扩展,可以有针对性的设置线程数量,分配资源
3.系统设计之初,很难考虑到瓶颈所在,当要求高性能时,能做的就是尽量设计成异步非阻塞
观察者模式-事件机制
好处:
1.解耦:各模块和Configwork线程彼此不感知
2.可扩展性好,如果需要扩展模块,只需监听相应事件,对其他模块无影响
ConfigServer | Eureka | ZK | |
架构 | 无中心 | 无中心 | 主从 |
数据获取方式 | push | pull | push+pull注册watcher,数据变更后发送通知,client再pull数据 |
CAP | AP | AP | CP |
适合场景 | 服务发现 | 服务发现 | 数据存储 |