2018 年夏天

国内微服务开源 领域,迎来了一位新成员。此后,在构建微服务注册中心和配置中心的过程中,国内开发者多了一个可信赖的选项。

Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台(官方网站),它凝聚了阿里巴巴十多年来在超大规模注册和配置上的最佳实践,可以用在微服务场景作为服务注册中心、配置中心等核心场景中,和阿里的其他微服务开源项目一样,Nacos 也是始于阿里,成长于社区的典型。

为什么要开源 Nacos ?

在大规模服务发现和服务治理领域,现有的开源解决方案并非已经非常完美,阿里巴巴从 IOE 集中式应用架构升级为互联网分布式服务化架构的演进过程中,积累了大量有关服务注册和服务配置的实践经验,而这些经验是可以在各个行业大规模复用。除此之外,更重要的是,希望和社区开发者共同发展,让 Nacos 可以帮助国内企业更自由的构建基于云原生应用的动态服务发现、配置和服务管理。

相比其他服务注册和配置中心开源方案,Nacos 的起步虽然晚了点,但除了注册和配置中心的功能外,他还提供了动态服务发现、服务共享与管理的功能,在大规模场景下具备更优秀的性能,在易用性上更便捷,分布式部署上更灵活。例如和 Consul / Eureka / Zookeeper 相比:(内容摘自《主流微服务注册中心浅析和对比》

  Nacos Consul Eureka Zookeeper
一致性协议 CP+AP CP AP CP
健康检查 TCP/HTTP/MYSQL/Client Beat TCP/HTTP/gRPC/Cmd Client Beat Keep Alive
负载均衡策略 权重/
metadata/Selector
Fabio Ribbon
雪崩保护
自动注销实例 支持 不支持 支持 支持
访问协议 HTTP/DNS HTTP/DNS HTTP TCP
监听支持 支持 支持 支持 支持
多数据中心 支持 支持 支持 不支持
跨注册中心同步 支持 支持 不支持 不支持
SpringCloud集成 支持 支持 支持 支持
Dubbo集成 支持 支持 不支持 支持
K8S集成 支持 支持 不支持 不支持

不想自己运维Nacos? 阿里云微服务引擎MSE提供Nacos托管服务

阿里云微服务引擎 ( MSE ) 是开源注册、配置中心的全托管平台,提供高可用、免运维的 ZooKeeper、Nacos 注册中心 和 Eureka 等集群,完全兼容开源产品标准接口,无需修改代码、开箱即用,并为客户提供相应的监控和运维工具。产品官网:https://www.aliyun.com/product/mse

那么,MSE托管的注册中心,和开源自建注册中心究竟有什么区别?可以通过下面这张表来进行对比。

  对比项 自建注册中心 MSE注册中心
成本 资源成本 ECS费用 支持按时/包年包月,约等于同等配置ECS费用
  人力成本 需要专人维护运维 MSE提供易用自动化能力运维,门槛低
高可用 容灾能力 支持多机房,多区域容灾
  宕机处理 手动处理 自动探测,自动恢复
  活性探测 不支持 支持进程活性探测,失败自动恢复
功能 数据管理 命令行 页面可视化,支持增删查改
  访问方式 机器IP直连,代码要变 域名,换机器,不需要变动
  业务报警 支持核心业务指标如链接数多维度报警配置
  网络方式 本地网络 VPC网络,公网
  服务管理 不支持 服务提供者,订阅者页面管理
  集群权限管理 不支持 支持子账号管理,可自定义子账号访问权限
  TPS/QPS统计 不支持 提供TPS,QPS监控视图
运维 集群观测 页面可视化,查看节点健康状态,角色
  监控图表 提供多种指标如Znode,链接数图形化视图
  配置运维 手动修改,手动重启 页面修改,一键重启生效
  节点伸缩 手动扩缩容,手动重启 页面选择,一键扩缩容
  性能伸缩 不支持 页面选择,一键伸缩

从了解到实践

Dubbo 应用如何保证业务不停机的情况下无缝迁移到MSE?

下面以基于 SpringBoot 构建的 Dubbo 应用为例介绍如何进行迁移

第一步:引入用于迁移的定制化注册中心依赖

虽然 Dubbo 本身提供了配置多注册中心的能力,但其存在比较大的局限性,当消费者配置多注册中心时,Dubbo 原有的策略为优先选取第一个注册中心的地址,若其地址为空,再读取第二个,依次类推选取地址。理想的模型应当是多个注册中心的地址合并后随机选取,为此,MSE 提供了专门的注册中心扩展,解决该问题:

<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-dubbo-migration-bom</artifactId>
<version>2.6.5.1</version>
<type>pom</type>
</dependency>

其中 edas-dubbo-migration-bom 有 2.6.5.1 和 2.7.5 两个版本,分别对应 Dubbo 2.6.x 和 Dubbo 2.7.x 两个大版本。

第二步:购买 MSE Nacos 实例,并配置对应 nacos server address

在 MSE 控制台购买相同 VPC 内的 Nacos 实例,并在应用的 application.properties 配置文件增加:

dubbo.registry.address = edas-migration://30.5.124.15:9999?service-registry=consul://${consulAddress}:8500,nacos://${nacosAddress}:8848&reference-registry=consul://${consulAddress}:8500,nacos://${nacosAddress}:8848

说明:

edas-migration://30.5.124.15:9999

多注册中心的头部信息。可以不做更改,ip 和 port 可以任意填写,主要是为了兼容 Dubbo 对 ip 和 port 的校验。启动时,如果日志级别是 WARN 及以下,可能会抛一个 WARN 的日志,可以忽略。

service-registry

服务注册的注册中心地址。写入多个注册中心地址。每个注册中心都是标准的 Dubbo 注册中心格式;多个用 , 分隔。

reference-registry

服务订阅的注册中心地址。每个注册中心都是标准的 Dubbo 注册中心格式;多个用,分隔。

第三步:确认双注册方案成功

启动应用,并观察到 MSE 实例的服务管理页面中注册上了提供者和消费者的信息。

同时在 Consul 的控制台中也能看相应的信息:

并且确认应用可以正常访问,到目前为止我们第一个应用迁移完毕。

第四步:依照迁移第一个应用的迁移步骤,逐步迁移全量应用

第五步 清理迁移配置

迁移完成后,删除原注册中心的配置和迁移过程专用的依赖 edas-dubbo-migration-bom,在业务量较小的时间分批重启应用。edas-dubbo-migration-bom 是一个迁移专用的 starter,虽然长期使用对您业务的稳定性没有影响,但其并不会跟随 Dubbo 的版本进行升级,为避免今后框架升级过程中出现兼容问题,推荐您在迁移完毕后清理掉,然后在业务量较小的时间分批重启应用。

Spring Cloud 应用如何保证业务不停机的情况下无缝迁移到MSE?

Spring Cloud 默认只支持 1 个注册中心,所以无法完成不停机的无缝迁移,这里对此作了增强,支持了双注册双订阅的模式,确保业务不停机进行迁移。

迁移方案:选择最先迁移的应用,建议是从最下层 Provider 开始迁移。但如果调用链路太复杂,比较难分析,也可以任意选一个应用进行迁移。选择完成后,即可参考下面的迁移步骤迁移第一个应用。

第一步:购买 MSE Nacos 实例,并配置对应 nacos server address

在 MSE 控制台购买相同 vpc 内的 Nacos 实例,并在应用的 application.properties 配置文件增加:

spring.cloud.nacos.discovery.server-addr={MSE对应Nacos实例的域名}:8848

第二步:在应用程序中添加依赖

在 pom.xml 文件中添加 spring-cloud-starter-alibaba-nacos-discovery 依赖。

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>{相应的版本}</version>
</dependency>

默认情况下 Spring Cloud 只支持在依赖中引入一个注册中心,当存在多个注册中心时:启动会报错。所以这里需要添加一个依赖 edas-sc-migration-starter,使 Spring Cloud 应用支持多注册。

<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-sc-migration-starter</artifactId>
<version>1.0.2</version>
</dependency>

Ribbon 是实现负载均衡的组件,为了使应用可以支持从多个注册中心订阅服务,需要修改 Ribbon 配置。在应用启动的主类中,将 RibbonClients 默认配置为 MigrationRibbonConfiguration 。假设原有的应用主类启动代码如下:

@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}

那么修改后的应用主类启动代码如下:

@SpringBootApplication
@RibbonClients(defaultConfiguration = MigrationRibbonConfiguration.class)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}

第三步:确认双注册方案成功

启动应用,并观察到 MSE 实例的服务管理中注册上我们的服务。

同时在 Consul 的控制台中也能看到我们的服务。

并且确认应用可以正常访问,到目前为止我们第一个应用迁移完毕。

第四步:依照迁移第一个应用的迁移步骤,逐步迁移全量应用

第五步:清理迁移配置

迁移完成后,删除原有的注册中心的配置和迁移过程专用的依赖 edas-sc-migration-starter ,在业务量较小的时间分批重启应用。edas-sc-migration-starter 是一个迁移专用的 starter,虽然长期使用对您业务的稳定性没有影响,但在 Ribbon 负载均衡实现方面有一定的局限性,推荐您在迁移完毕后清理掉,然后在业务量较小的时间分批重启应用。

关于动态调整服务注册和订阅方式:
依赖 edas-sc-migration-starter 具备配合配置中心达到动态调整服务注册和订阅方式的效果,在完成迁移过程中,您可以通过修改您的配置动态变更服务注册和订阅方式。

动态调整服务订阅默认的订阅策略是从所有注册中心订阅,并对数据做一些简单的聚合。

您可以通过在您的配置中心修改 spring.cloud.edas.migration.subscribes 属性以便选择从哪几个注册中心订阅数据。

spring.cloud.edas.migration.subscribes=nacos,consul # 同时从 Consul 和 Nacos 订阅服务
spring.cloud.edas.migration.subscribes=nacos # 只从 Nacos 订阅服务

动态变更服务注册默认的注册策略是注册到所有注册中心。您可以通过在您的配置中心的
spring.cloud.edas.migration.registry.excludes 属性来选择关闭指定的注册中心。

spring.cloud.edas.migration.registry.excludes=   #默认值为空,注册到所有的服务注册中心
spring.cloud.edas.migration.registry.excludes=consul #关闭 Consul 的注册
spring.cloud.edas.migration.registry.excludes=nacos,consul #关闭 Nacos 和 Consul 的注册

阿里云微服务引擎 MSE 重磅升级发布会即将开启

抛开担忧,迎接确性。

从配置中心,到微服务全面治理,MSE 正在迎接他的第一个成人礼,在原有配置中心托管的基础上,全面升级引入微服务治理能力,并通过 Java Agent 技术使得您的应用无需修改任何代码和配置,即可享有阿里云提供的微服务治理能力,已经上线的功能包含服务查询、无损下线、服务鉴权、离群实例摘除、标签路由。

从 2018 年 Nacos 开源说起的更多相关文章

  1. SpringCloud之Nacos服务发现(十七)

    一 Nacos简介 Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现.配置和管理. Nacos主要提供以下四大功能: 服务发现与服务健康检查 Nacos使服务更容易注册自己并 ...

  2. Nacos 发布 1.0.0 GA 版本,可大规模投入到生产环境

    经过 3 个 RC 版本的社区体验之后,Nacos 正式发布 1.0.0 GA 版本,在架构.功能和 API 设计上进行了全方位的重构和升级. 1.0.0 版本的发布标志着 Nacos 已经可以大规模 ...

  3. 构建安全可靠的微服务 | Nacos 在颜铺 SaaS 平台的应用实践

    作者 | 殷铭  颜铺科技架构师 本文整理自架构师成长系列 3 月 19 日直播课程. 关注"阿里巴巴云原生"公众号,回复 "319",即可获取对应直播回放链接 ...

  4. Nacos发布0.5.0版本,轻松玩转动态 DNS 服务

    阿里巴巴微服务开源项目Nacos于近期发布v0.5.0版本,该版本主要包括了DNS-basedService Discovery,对Java 11的支持,持续优化Nacos产品用户体验,更深度的与Sp ...

  5. F#周报2018年第51期

    新闻 有经验的开发者选择F# 2018年10佳技术讲话 试用F#开发WebAssembly Fable.Remoting: 刷新访问令牌 F#开发WebAssembly现在可以使用代码补全 Rider ...

  6. zz开源 MNN:淘宝在移动 AI 上的实践

    开源 MNN:淘宝在移动 AI 上的实践   陈以鎏(离青) 阅读数:40612019 年 6 月 28 日   随着深度学习的快速发展和端侧设备算力的不断提升,原本在云端执行的推理预测工作正在部分迁 ...

  7. Nacos 常见问题及解决方法

    Nacos 开源至今已有一年,在这一年里,得到了很多用户的支持和反馈.在与社区的交流中,我们发现有一些问题出现的频率比较高,为了能够让用户更快的解决问题,我们总结了这篇常见问题及解决方法,这篇文章后续 ...

  8. Nacos: Namespace 和 Endpoint 在生产环境下的最佳实践

    随着使用 Nacos 的企业越来越多,遇到的最频繁的两个问题就是:如何在我的生产环境正确的来使用 namespace 以及 endpoint.这篇文章主要就是针对这两个问题来聊聊使用 nacos 过程 ...

  9. 【巨杉数据库SequoiaDB】企业级和开源领域“两开花”,巨杉引领国产数据库创新

    2019年12月15日,OSC 源创会·年终盛典在深圳圆满举行.巨杉数据库作为业界领先的金融级分布式数据库厂商, 获得 “2019年开源数据库先锋企业” 及 “2019 GVP-Gitee最有价值开源 ...

  10. MySQL数据库与Nacos搭建监控服务

    目录 Nacos部署 项目环境 快速开始 nacos2.2.0版本配置说明 MySQL部署 安装方式 Linux平台(CentOS-Stream-9)部署MySQL 调试防火墙管理工具 MySQL用户 ...

随机推荐

  1. day10-Spring Cloud Alibaba Nacos-服务注册与配置中心

    Spring Cloud Alibaba Nacos-服务注册与配置中心 官网:https://github.com/alibaba/nacos,Nacos官方中文手册 Nacos:Spring Cl ...

  2. IO 多路复用原理

    IO 多路复用 普通情况下,一个进程只能监视一个文件描述符(阻塞),如果使用非阻塞 IO,则会使 CPU 频繁陷入内核和空转,降低效率.而IO 多路复用是操作系统提供的接口,他会帮你同时监视多个 fd ...

  3. 04_QT_Windows开发环境搭建

    FFmpeg 为什么选择FFmpeg? 每个主流平台基本都有自己的音视频开发库(API),用以处理音视频数据,比如: iOS:AVFoundation.AudioUnit等 Android:Media ...

  4. 5G+实时云渲染:交互实时云看车革新购车体验

    随着科技的发展,用户的购车方式已然发生了改变. 传统的购车过程中,用户需要亲自去4S店看车.选车.预约试驾,最后完成交易. 互联网的发展和突如其来的疫情,让看车.选车.预约试驾这三个过程,逐步被搬到线 ...

  5. 基于QGIS生产建筑物高度与遥感影像数据集

    1. 概述 利用遥感影像推知建筑物高度是一经典研究,现有很多学者利用机器学习的方式,利用现有数据进行训练从而构建模型 本文旨在记述使用QGIS进行建筑物高度与遥感影像数据集的获取与制作 如果不想自己动 ...

  6. 记录--经常被cue大文件上传,忍不住试一下

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 大文件上传主要步骤: 获取文件对象,切分文件 根据文件切片,计算文件唯一hash值 上传文件切片,服务端保存起来 合并文件切片,前端发送合 ...

  7. 记录--vue3实现excel文件预览和打印

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在前端开发中,有时候一些业务场景中,我们有需求要去实现excel的预览和打印功能,本文在vue3中如何实现Excel文件的预览和打印 ...

  8. vscode插件设置——Golang开发环境配置

    适用读者: Go初学者, 到这里, 你应该是处于已经完成了 go 的安装之后, 准备写个 "Hello Gopher" 之前. 本篇力求给初学者-未来的Gopher 们 一个正确的 ...

  9. LOTO任意波形发生器SIG82模拟输出继电器吸合断开的信号波形用于算法调试

    LOTO任意波形发生器SIG82模拟输出继电器吸合断开的信号波形用于算法调试 继电器吸合的电流变化过程是如图这样的波形,0到2的时间大约为17毫秒,2到3的时间大约38毫秒. 批量继电器产品吸合是否满 ...

  10. Linux服务器下启动和关闭node

    首先将node工程的代码和node_modules目录上传到服务器的某一个目录下 1.用forever 进行管理 前提:linux下已经安装了node npm install -g forever / ...