SOFARegistry 源码|数据同步模块解析

SOFARegistry 数据同步机制解析
本文深入解析了SOFARegistry的数据同步模块,重点分析了SessionServer与DataServer之间的数据同步以及DataServer多副本之间的数据同步。同步机制采用推拉结合的方式,保证数据一致性。此外,还探讨了增量同步的diff计算逻辑。SOFARegistry的数据同步设计在一致性、异步处理和生产-消费模型方面提供了启示。

6e62089659eadd3f5b4834e9a678a40d.gif

文|宋国磊(GitHub ID:glmapper )

SOFAStack Committer

华米科技高级研发工程师

负责华米账号系统、框架治理方向的开发

本文 3024 字 阅读 10 分钟

|前言|

本文主要围绕 SOFARegistry 的数据同步模块进行了源码的解析。其中,对于注册中心的概念以及 SOFARegistry 的基础架构将不再做详细的阐述,有兴趣的小伙伴在《海量数据下的注册中心 - SOFARegistry 架构介绍》[1]一文中获取相关介绍。

本文主要的思路大致分为以下 2 个部分:


第一部分,借助 SOFARegistry 中的角色分类来说明哪些角色之间会进行数据同步;

- 第二部分,对数据同步的具体实现进行解析。

PART. 1

SOFARegistry 的角色分类

f9fd57dddefd165724b4b20e619364a7.png

如上图所示,SOFARegistry 包含以下 4 个角色:

Client

提供应用接入服务注册中心的基本 API 能力,应用系统通过依赖客户端 JAR 包,通过编程方式调用服务注册中心的服务订阅和服务发布能力。

SessionServer

会话服务器,负责接受 Client 的服务发布和服务订阅请求,并作为一个中间层将写操作转发 DataServer 层。SessionServer 这一层可随业务机器数的规模的增长而扩容。

DataServer

数据服务器,负责存储具体的服务数据,数据按 dataInfoId 进行一致性 Hash 分片存储,支持多副本备份,保证数据高可用。这一层可随服务数据量的规模的增长而扩容。

MetaServer

元数据服务器,负责维护集群 SessionServer 和 DataServer 的一致列表,作为 SOFARegistry 集群内部的地址发现服务,在 SessionServer 或 DataServer 节点变更时可以通知到整个集群。

在这 4 个角色中,MetaServer 作为元数据服务器本身不处理实际的业务数据,仅负责维护集群 SessionServer 和 DataServer 的一致列表,不涉及数据同步问题。

Client 与 SessionServer 之间的核心动作是订阅和发布,从广义上来说,属于用户侧客户端与 SOFARegistry 集群的数据同步,详情可以见:

https://github.com/sofastack/sofa-registry/issues/195,因此不在本文讨论范畴之内。

SessionServer 作为会话服务,它主要解决海量客户端连接问题,其次是缓存客户端发布的所有 pub 数据。Session 本身不持久化服务数据,而是将数据转写到 DataServer。DataServer 存储服务数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值