开发者社区> 中间件小哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Nacos Committer 张龙:Nacos Sync 的设计原理和规划

简介: 图:Nacos Meetup @杭州 与你同行,抬头便是星空。 本文整理自Nacos Committer 张龙的现场分享,阿里巴巴中间件受权发布。 随着 Nacos 1.0.0 稳定版的发布,越来越多的企业开始在测试/预演/生产环境中逐步部署 Nacos。
+关注继续查看

_2019_05_08_9_29_00


图: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,左右两边是不同的注册中心,绿色代表目前是可以进行双向同步的,蓝色代表暂时只能进行单向同步。

image_20190421182457700


组件特性

Nacos Sync 使用了高效的事件异步驱动模型,支持多种自定义事件,使得同步任务处理的延时控制在3s,8C16G的单机能够支持6K的同步任务。

除了单机部署,Nacos Sync 也提供了高可用的集群部署模式,作为无状态设计,支持将任务等状态数据迁移到了数据库,使得集群扩展非常方便。

系统模块架构

下图是 Nacos Sync 目前的系统架构图,画的比较简单,只是把一些比较重要的模块做了描述。

image_20190421183229070

Web Console: 提供给用户进行注册中心和同步任务进行相关界面操作

Processor Frame: 注册中心和任务的业务处理逻辑

Timer Manager: 定时轮询数据库获取同步任务进行处理

Event Frame: 异步事件来进行同步任务的同步以及删除

Extension: 对接各种注册中心客户端的扩展实现

整体调用流程

我们来看一下 Nacos Sync 一次完整的调用流程:


image_20190421183544116

  1. 通过 Web 控制台添加相关注册中心,一般都必须配置两个注册中心,一个源注册中心,另外一个是目标注册中心,注册中心相关数据会写入到数据库;
  2. 添加完注册中心以后,增加一个同步任务,添加需要同步的服务(对于Dubbo来说就是RPC接口,对于Spring Cloud就是应用名);
  3. Nacos Sync 会每隔 3s 从数据库捞取同步任务,并通过异步事件的方式进行发布;
  4. 同步服务管理监听到定时任务发布的的事件,目前有同步/删除这两种事件;
  5. 同步服务管理根据不同的策略选择相关的同步服务进行真正同步逻辑处理;

目前已经支持同步类型

下面的表格介绍了目前支持的几种同步类型,并且说明了在 Dubbo 和 Spring Cloud 下是否支持同步,表格中列举的几种注册中心,无论单向还是双向同步都是在和 Nacos 进行交互。

image_20190421191720201

使用场景和 Demo

  • 多个网络互通的 Region 之间进行服务共享,打破 Region 之间的服务调用限制;

image_20190421192139580

  • 双向同步功能,支持 Dubbo+ZooKeeper 服务平滑迁移到 Dubbo+Nacos ;

image_20190421192204261

这里提供两个 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个小版本,通过下图,我们可以看到每个版本已经做了的一些工作,以及下个版本即将做的一些事情。

image_20190421192920320

0.4.0 规划介绍

  • 功能健壮性

同步数据一致性校验,0.4.0版本前,同步任务执行之后,双端数据一致性未进行检查的;
注册中心健康检查;

  • 用户体验

同步数据实时状态透出 ,0.4.0版本前,控制台的任务状态是数据库的任务执行状态,用户没办法知道当前的数据状态;
任务批量删除;
多维度增加任务同步,优化只支持服务粒度,用户只能一个一个添加的用户体验;

  • 功能完善
    支持 Eureka/Consul 和 Nacos 的双向同步;

本文作者:张龙,Github ID: @paderlol,Nacos Committer,就职于长沙蜜獾信息科技有限公司。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
最简单流处理引擎——Kafka Streams简介
最简单流处理引擎——Kafka Streams简介
102 0
全网最详细!Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台 (中)
全网最详细!Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台 (中)
66 0
全网最详细!Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台 (下)
全网最详细!Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台 (下)
39 0
bioRxiv|利用机器智能设计抗新型冠状病毒药物
bioRxiv|利用机器智能设计抗新型冠状病毒药物
71 0
Java 异步化处理保证trace信息不丢失
Java 异步化处理保证trace信息不丢失
194 0
CV之Hog+HamMingDistance:基于Hog提取和汉明距离对比的应用—图像相似度对比之for循环将多个成对图片依次对比并输出相似度
CV之Hog+HamMingDistance:基于Hog提取和汉明距离对比的应用—图像相似度对比之for循环将多个成对图片依次对比并输出相似度
78 0
Nacos Committers 团队首亮相,发布 0.9.0 版本
223 天,发布 14 个版本,19 位 Committers,39 位 Contributors。 在宣布开源后的第 223 天,Nacos 发布了其第14个版本 - 0.9.0,该版本提升了 Nacos-Sync 的稳定性,支持 Server 功能拆分部署,以及提供了对 Python 语言体系的支持。
5419 0
+关注
中间件小哥
阿里中间件(Aliware)官方账号
1184
文章
52
问答
来源圈子
更多
阿里云中间件主要有包含这么几个: 分布式关系型数据库DRDS_水平拆分 做数据库扩展性的 、消息队列MQ 是做消息的中间件、企业级分布式应用服务EDAS 做分布式服务的、还有一些其他的中间件,比如配置服务、缓存等等。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载