
文|宋国磊(GitHub ID:glmapper )
SOFAStack Committer
华米科技高级研发工程师
负责华米账号系统、框架治理方向的开发
本文 3024 字 阅读 10 分钟
|前言|
本文主要围绕 SOFARegistry 的数据同步模块进行了源码的解析。其中,对于注册中心的概念以及 SOFARegistry 的基础架构将不再做详细的阐述,有兴趣的小伙伴在《海量数据下的注册中心 - SOFARegistry 架构介绍》[1]一文中获取相关介绍。
本文主要的思路大致分为以下 2 个部分:
- 第一部分,借助 SOFARegistry 中的角色分类来说明哪些角色之间会进行数据同步;
- 第二部分,对数据同步的具体实现进行解析。
PART. 1
SOFARegistry 的角色分类

如上图所示,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 存储服务数据
SOFARegistry 数据同步机制解析

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

被折叠的 条评论
为什么被折叠?



