从 2018 年 Nacos 开源说起
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 开源说起的更多相关文章
- SpringCloud之Nacos服务发现(十七)
一 Nacos简介 Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现.配置和管理. Nacos主要提供以下四大功能: 服务发现与服务健康检查 Nacos使服务更容易注册自己并 ...
- Nacos 发布 1.0.0 GA 版本,可大规模投入到生产环境
经过 3 个 RC 版本的社区体验之后,Nacos 正式发布 1.0.0 GA 版本,在架构.功能和 API 设计上进行了全方位的重构和升级. 1.0.0 版本的发布标志着 Nacos 已经可以大规模 ...
- 构建安全可靠的微服务 | Nacos 在颜铺 SaaS 平台的应用实践
作者 | 殷铭 颜铺科技架构师 本文整理自架构师成长系列 3 月 19 日直播课程. 关注"阿里巴巴云原生"公众号,回复 "319",即可获取对应直播回放链接 ...
- Nacos发布0.5.0版本,轻松玩转动态 DNS 服务
阿里巴巴微服务开源项目Nacos于近期发布v0.5.0版本,该版本主要包括了DNS-basedService Discovery,对Java 11的支持,持续优化Nacos产品用户体验,更深度的与Sp ...
- F#周报2018年第51期
新闻 有经验的开发者选择F# 2018年10佳技术讲话 试用F#开发WebAssembly Fable.Remoting: 刷新访问令牌 F#开发WebAssembly现在可以使用代码补全 Rider ...
- zz开源 MNN:淘宝在移动 AI 上的实践
开源 MNN:淘宝在移动 AI 上的实践 陈以鎏(离青) 阅读数:40612019 年 6 月 28 日 随着深度学习的快速发展和端侧设备算力的不断提升,原本在云端执行的推理预测工作正在部分迁 ...
- Nacos 常见问题及解决方法
Nacos 开源至今已有一年,在这一年里,得到了很多用户的支持和反馈.在与社区的交流中,我们发现有一些问题出现的频率比较高,为了能够让用户更快的解决问题,我们总结了这篇常见问题及解决方法,这篇文章后续 ...
- Nacos: Namespace 和 Endpoint 在生产环境下的最佳实践
随着使用 Nacos 的企业越来越多,遇到的最频繁的两个问题就是:如何在我的生产环境正确的来使用 namespace 以及 endpoint.这篇文章主要就是针对这两个问题来聊聊使用 nacos 过程 ...
- 【巨杉数据库SequoiaDB】企业级和开源领域“两开花”,巨杉引领国产数据库创新
2019年12月15日,OSC 源创会·年终盛典在深圳圆满举行.巨杉数据库作为业界领先的金融级分布式数据库厂商, 获得 “2019年开源数据库先锋企业” 及 “2019 GVP-Gitee最有价值开源 ...
- MySQL数据库与Nacos搭建监控服务
目录 Nacos部署 项目环境 快速开始 nacos2.2.0版本配置说明 MySQL部署 安装方式 Linux平台(CentOS-Stream-9)部署MySQL 调试防火墙管理工具 MySQL用户 ...
随机推荐
- day10-Spring Cloud Alibaba Nacos-服务注册与配置中心
Spring Cloud Alibaba Nacos-服务注册与配置中心 官网:https://github.com/alibaba/nacos,Nacos官方中文手册 Nacos:Spring Cl ...
- IO 多路复用原理
IO 多路复用 普通情况下,一个进程只能监视一个文件描述符(阻塞),如果使用非阻塞 IO,则会使 CPU 频繁陷入内核和空转,降低效率.而IO 多路复用是操作系统提供的接口,他会帮你同时监视多个 fd ...
- 04_QT_Windows开发环境搭建
FFmpeg 为什么选择FFmpeg? 每个主流平台基本都有自己的音视频开发库(API),用以处理音视频数据,比如: iOS:AVFoundation.AudioUnit等 Android:Media ...
- 5G+实时云渲染:交互实时云看车革新购车体验
随着科技的发展,用户的购车方式已然发生了改变. 传统的购车过程中,用户需要亲自去4S店看车.选车.预约试驾,最后完成交易. 互联网的发展和突如其来的疫情,让看车.选车.预约试驾这三个过程,逐步被搬到线 ...
- 基于QGIS生产建筑物高度与遥感影像数据集
1. 概述 利用遥感影像推知建筑物高度是一经典研究,现有很多学者利用机器学习的方式,利用现有数据进行训练从而构建模型 本文旨在记述使用QGIS进行建筑物高度与遥感影像数据集的获取与制作 如果不想自己动 ...
- 记录--经常被cue大文件上传,忍不住试一下
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 大文件上传主要步骤: 获取文件对象,切分文件 根据文件切片,计算文件唯一hash值 上传文件切片,服务端保存起来 合并文件切片,前端发送合 ...
- 记录--vue3实现excel文件预览和打印
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在前端开发中,有时候一些业务场景中,我们有需求要去实现excel的预览和打印功能,本文在vue3中如何实现Excel文件的预览和打印 ...
- vscode插件设置——Golang开发环境配置
适用读者: Go初学者, 到这里, 你应该是处于已经完成了 go 的安装之后, 准备写个 "Hello Gopher" 之前. 本篇力求给初学者-未来的Gopher 们 一个正确的 ...
- LOTO任意波形发生器SIG82模拟输出继电器吸合断开的信号波形用于算法调试
LOTO任意波形发生器SIG82模拟输出继电器吸合断开的信号波形用于算法调试 继电器吸合的电流变化过程是如图这样的波形,0到2的时间大约为17毫秒,2到3的时间大约38毫秒. 批量继电器产品吸合是否满 ...
- Linux服务器下启动和关闭node
首先将node工程的代码和node_modules目录上传到服务器的某一个目录下 1.用forever 进行管理 前提:linux下已经安装了node npm install -g forever / ...