Nacos Committer 张龙:Nacos Sync 的设计原理和规划
图:Nacos Meetup @杭州
与你同行,抬头便是星空。
本文整理自Nacos Committer 张龙的现场分享,阿里巴巴中间件受权发布。
随着 Nacos 1.0.0 稳定版的发布,越来越多的企业开始在测试/预演/生产环境中逐步部署 Nacos。目前,除了部分企业已处于转型分布式架构的过程中,会考虑直接使用 Nacos 上生产,但仍有不少企业会考虑一些比较现实的问题:
- 存量用户如何迁移注册中心到 Nacos?
- 多区域注册中心之间如何同步?
- 已有注册中心与 Nacos 如何并存使用?
这里,我将通过对 Nacos Sync 的介绍,来回答这三个问题。
Nacos Sync 是什么?
Nacos Sync 是一个支持多种注册中心的同步组件,基于 SpringBoot 开发框架,数据层采用 Spring Data JPA,遵循了标准的 JPA 访问规范,支持多种数据源存储,默认使用 Hibernate 实现,更加方便的支持表的自动创建更新。
下图是 Nacos Sync 系统的概念图,Nacos Sync 通过从各个注册中心拉取注册的服务实例数据同步到 Nacos,左右两边是不同的注册中心,绿色代表目前是可以进行双向同步的,蓝色代表暂时只能进行单向同步。
组件特性
Nacos Sync 使用了高效的事件异步驱动模型,支持多种自定义事件,使得同步任务处理的延时控制在3s,8C16G的单机能够支持6K的同步任务。
除了单机部署,Nacos Sync 也提供了高可用的集群部署模式,作为无状态设计,支持将任务等状态数据迁移到了数据库,使得集群扩展非常方便。
系统模块架构
下图是 Nacos Sync 目前的系统架构图,画的比较简单,只是把一些比较重要的模块做了描述。
Web Console: 提供给用户进行注册中心和同步任务进行相关界面操作
Processor Frame: 注册中心和任务的业务处理逻辑
Timer Manager: 定时轮询数据库获取同步任务进行处理
Event Frame: 异步事件来进行同步任务的同步以及删除
Extension: 对接各种注册中心客户端的扩展实现
整体调用流程
我们来看一下 Nacos Sync 一次完整的调用流程:
- 通过 Web 控制台添加相关注册中心,一般都必须配置两个注册中心,一个源注册中心,另外一个是目标注册中心,注册中心相关数据会写入到数据库;
- 添加完注册中心以后,增加一个同步任务,添加需要同步的服务(对于Dubbo来说就是RPC接口,对于Spring Cloud就是应用名);
- Nacos Sync 会每隔 3s 从数据库捞取同步任务,并通过异步事件的方式进行发布;
- 同步服务管理监听到定时任务发布的的事件,目前有同步/删除这两种事件;
- 同步服务管理根据不同的策略选择相关的同步服务进行真正同步逻辑处理;
目前已经支持同步类型
下面的表格介绍了目前支持的几种同步类型,并且说明了在 Dubbo 和 Spring Cloud 下是否支持同步,表格中列举的几种注册中心,无论单向还是双向同步都是在和 Nacos 进行交互。
使用场景和 Demo
- 多个网络互通的 Region 之间进行服务共享,打破 Region 之间的服务调用限制;
- 双向同步功能,支持 Dubbo+ZooKeeper 服务平滑迁移到 Dubbo+Nacos ;
这里提供两个 Demo ,用来分别演示上面的两个经典使用场景,详细的操作步骤可以通过下方链接,进行访问。
单向同步场景,在 Spring Cloud 生态中,Eureka 同步到 Nacos 示例
https://github.com/paderlol/nacos-sync-example/tree/master/one-way-sync
双向同步场景,在 Dubbo 生态中 ZooKeeper 与 Nacos 互相同步示例
https://github.com/paderlol/nacos-sync-example/tree/master/two-way-sync
版本演进
Nacos Sync 目前已经发布3个小版本,通过下图,我们可以看到每个版本已经做了的一些工作,以及下个版本即将做的一些事情。
0.4.0 规划介绍
- 功能健壮性
同步数据一致性校验,0.4.0版本前,同步任务执行之后,双端数据一致性未进行检查的;
注册中心健康检查;
- 用户体验
同步数据实时状态透出 ,0.4.0版本前,控制台的任务状态是数据库的任务执行状态,用户没办法知道当前的数据状态;
任务批量删除;
多维度增加任务同步,优化只支持服务粒度,用户只能一个一个添加的用户体验;
- 功能完善
支持 Eureka/Consul 和 Nacos 的双向同步;
本文作者:张龙,Github ID: @paderlol,Nacos Committer,就职于长沙蜜獾信息科技有限公司。
原文链接
本文为云栖社区原创内容,未经允许不得转载。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何利用开源风控系统 TH-Nubula(星云)防止撞库?
“撞库”是安全领域经常发生的一种黑产攻击事件。在常见的安全防护中,安全团队通常会在登陆接口设置安全策略来应对攻击。可是,一旦黑产更换攻击规则,就会导致策略失效。 在这样的情况下,我们需要的就不仅仅的表层的“防火墙”,而是一套完整的业务风控系统,它可以有效的规避风险,降低损失。 在这篇文章中,我们将介绍如何利用开源风控系统TH-Nebule(星云)防止“撞库”攻击。 文章会从“撞库”的介绍逐渐深入到对TH-Nebula的使用,包括:如何部署、如何使用、和为什么需要风控系统等。阐述为什么需要一套“系统”去解决业务安全问题,接着手把手教你部署本系统,以及如何利用咱们这套风控来阻断风险,并提供模拟测试demo。 TH-Nebula是由威胁猎人开源的风控系统,目前源码已放在Github和Gitee上,完全开放所有源代码,文档,以及安装包。 地址: https://github.com/threathunterX/nebula https://gitee.com/threathunter/nebula 0x00 如何防止撞库 1.什么是撞库? 说到撞库,先得从”社工库”说起,社工库是社会工程学数据...
- 下一篇
HTTP的结构
HTTP结构图 HTTP结构之请求篇 (1)组成 http请求报文由三部分组成,分别是:请求行(请求头)、消息报头、请求正文。 请求头(请求行)以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF 其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。请求方法如下: 请求正文(实体主体):一般不用 (2)请求报文的例子 GET /chn/yxsz/index.htm HTTP/1.1 /*请求行使用相对URL*/ Host:www.tsinghua.edu.cn /*此行为首部行的开始,给出主机的域名*/ Connection:close /*告诉服务器发送完请求的文档可释放连接*/ user-Agent:Mozilla/5.0 /*表明用户代理是使用Netscape浏览器*/ Accept-Language:cn /*表示用户希望优先...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,CentOS8安装Elasticsearch6.8.6
- 2048小游戏-低调大师作品
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7安装Docker,走上虚拟化容器引擎之路