LocalDataServerChangeEvent及数据同步 [toc] ## 0x00 摘要 SOFARegistry 是蚂蚁金服开源的一个生产级、高时效、高可用的服务注册中心。 本系列文章重点在于分析设计和架构,即利用多篇文章,从多个角度反推总结 DataServer 或者 SOFARegistry 的实现机制和架构思路,让大家借以学习阿里如何设计。 本文为第十二篇,上文我们简述了Data节点变化之后,在dataServer中是如何变化处理的,本文我们按照数据流程继续进行,讲讲SOFARegistry如何处理本机房Data节点变化。 ## 0x02 业务范畴 ### 2.1 DataServer 数据一致性 DataServer 在 SOFARegistry 中,承担着核心的数据存储功能。数据按 dataInfoId 进行一致性 Hash 分片存储,支持多副本备份,保证数据高可用。这一层可随服务数据量的规模的增长而扩容。 如果 DataServer 宕机,MetaServer 能感知,并通知所有 DataServer 和 SessionServer,数据分片可 failover 到其他副本,同时 DataServer 集群内部会进行分片数据的迁移。 ### 2.2 本地机房策略 Data Center 代表的是本地机房,从目前来看: - 数据备份仅仅在本地机房完成; - 每个数据中心有自己的hash; 阿里有异机房备份,应该就是Global部分,但是没有开源。 所以我们得重点剖析本地节点如何继续处理。 ## 0x03 总体逻辑 我们先要提前剧透下总体逻辑,DataServer彼此通知是围绕着数据版本号进行,即: - 新加入节点 会通过 NotifyOnlineRequest 告诉其他已经在线的节点,我是新的,你可以做相应配置,以及告诉我,你有哪些版本号的数据。 - 在线服务节点 会通过 NotifyFetchDatumRequest 告诉新节点,我这里有你需要的版本号数据,你过来取。 所以我们总结如下:在收到 meta server 的 data server change 消息之后,同一个Data Center 之中所有data server 会互相通知彼此升级版本号。 - notifyOnline 会发送 NotifyOnlineRequest,而其他 D
