Nacos-Sync官方文档:NacosSync 用户手册
介绍
- NacosSync是一个支持多种注册中心的同步组件,基于Spring boot开发框架,数据层采用Spring Data JPA,遵循了标准的JPA访问规范,支持多种数据源存储,默认使用Hibernate实现,更加方便的支持表的自动创建更新
- 使用了高效的事件异步驱动模型, 支持多种自定义事件,使得同步任务处理的延时控制在3s,8C16G的单机能够支持6K的同步任务
- NacosSync除了单机部署,也提供了高可用的集群部署模式,NacosSync是无状态设计,将任务等状态数据迁移到了数据库,使得集群扩展非常方便
- 抽象出了Sync组件核心接口,通过注解对同步类型进行区分,使得开发者可以很容易的根据自己需求,去扩展不同注册中心,目前已支持的同步类型:
-
- Nacos数据同步到Nacos
- Zookeeper数据同步到Nacos
- Nacos数据同步到Zookeeper
- Eureka数据同步到Nacos
- Consul数据同步到Nacos
操作流程
初始化
启动如图所示的两个nacos集群,这两个集群用的使用通一个MySQL数据库,因此有相同的namespace。
启动一个服务nacos-client-01,注册到cluster1的happy命名空间中,此时可以在cluster1的控制台看到服务
在开启nacos-sync前,cluster2的happy命名空间服务中是没有服务nacos-client-01的
进行服务同步
利用nacos-sync将cluster1中happy命名空间下的nacos-client-01服务同步到cluster2中happy命名空间下
在nacos-sync控制台中,添加两个集群的信息
添加完成后的集群信息如图所示
新增一个同步任务
添加完成后会自动进行同步,下图中同步已完成
问题
这两个nacos集群使用的同一个数据库,但刚开始在cluster2中为什么没有服务nacos-client-01?
这是因为Nacos服务注册的信息默认是存储在内存中的,而不是直接存储在数据库中。Nacos使用了一种基于RAFT协议的分布式一致性算法来保证数据的一致性和可靠性。当你服务注册到第一个集群中时,它会将注册信息保存在内存中的实例列表中。当使用nacos-sync将第一个集群中的服务提供者同步到第二个集群时,它会将内存中的实例列表复制到第二个集群的内存中,从而使第二个集群中也能查看到注册的服务。