
简 介
SOFARegistry
SOFARegistry 是蚂蚁集团在生产大规模使用的服务注册中心,经历了多年大促的考验,支撑蚂蚁庞大的服务集群,具有分布式可水平扩容、容量大、推送延迟低、高可用等特点。
蚂蚁生产集群 — SOFARegistry 支撑 1000 万服务发布者、4000 万服务订阅者,在业务应用大规模变更触发千万级别推送量的场景下,推送延迟的 p99 依然能够保持在 7s 以下。

《认识 SOFARegistry》 这一系列文章将会基于 SOFARegistry 新版本 (v6) 的代码,讲解注册中心在超大规模集群场景下落地的解析与实践,同时介绍 SOFARegistry 的各项功能,方便业务落地。
#01 部署架构
SOFARegistry

SOFARegistry 现有的架构设计:采用双层存储架构,外加一个负责内部元数据管理的 meta 组件。
SOFARegistry 的角色分为 4 个: client、session、data、meta。角色分工如下:
Client
提供应用接入服务注册中心的基本 API 能力,通过编程方式调用服务注册中心的服务订阅和服务发布能力。
SessionServer|会话服务器
负责接受 Client 的服务发布和服务订阅请求,并作为一个中间层将操作转发 DataServer 层。SessionServer 这一层可随业务机器数的规模增长而扩容。
DataServer|数据服务器
负责存储具体的服务数据,数据按 dataInfoId 进行分片存储,支持多副本备份,保证数据高可用。可随服务数据量的规模增长而扩容。
MetaServer|元数据服务器
负责维护集群 SessionServer 和 DataServer 的一致列表,作为 SOFARegistry 集群内部的地址发现服务,在 SessionServer 或 DataServer 节点变更时可以通知到整个集群。
借助双层数据分片的架构,SOFARegistry 具有了支撑海量数据的基石。
- 支持海量数据:每台 DataServer 只存储一部分的分片数据,随数据规模的增长,只要扩容 DataServer 服务器即可。
- 支持海量客户端:连接层的 SessionServer 只负责跟 Client 打交道,SessionServer 之间没有任何通信或数据复制,所以随着业务规模的增长,SessionServer 可以较轻量地扩容,不会对集群造成额外负担。
#02 数据结构
SOFARegistry
作为注册中心的基础功能,SOFARegistry 提供发布订阅的接口:Subscriber、Publisher。
在服务发现场景下,Subscriber 需要通过服务名称从注册中心订阅到多个服务方的地址,进行负载均衡的访问。

当存在服务方机器宕机时,注册中心通知所有的订阅方从服务列表中摘除这个 IP 地址,这样就不会再访问宕机的机器。

下面给出简化后的发布者和订阅者的字段,贴合上述服务发现的需求。
class Subscriber{
String dataId; // 服务名称
String group; // 业务类型,比如RPC、MSG等等
String instanceId; // 租户名称
String zone; // 所在分区,结合scope实现逻辑隔离
ScopeEnum scope; // 订阅范围: zone、dataCenter、global
}
class Pub

SOFARegistry是蚂蚁集团的高性能服务注册中心,支撑大规模服务集群,具有分布式、高可用、低延迟推送等特点。采用双层存储架构,支持海量数据和客户端,提供发布订阅功能,并通过Slot分片算法实现数据分片和高可用。此外,它还支持秒级服务上下线通知和无损运维。
最低0.47元/天 解锁文章
2631





