从 2018 年 Nacos 开源说起

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 抛开担忧,迎接确性

lALPD4d8peXtLP3NAZPNAt4_734_403.png_720x720q90g.jpg

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?

lADPD2eDMhrDJZPMs80BnA_412_179.jpg_720x720q90g.jpg

下面以基于 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 实例的服务管理页面中注册上了提供者和消费者的信息。

lADPD3lGq1KjpZbNAQ_NBDg_1080_271.jpg_720x720q90g.jpg

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

lADPD4BhqJwwpZjNARfNBDg_1080_279.jpg_720x720q90g.jpg

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

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

第五步 清理迁移配置

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

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

lADPD26eL2RQJZrMs80BnA_412_179.jpg_720x720q90g.jpg

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 实例的服务管理中注册上我们的服务。

lADPD3lGq1KjpZ7NARzNBDg_1080_284.jpg_720x720q90g.jpg

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

lADPD26eL2RQJaDM880EOA_1080_243.jpg_720x720q90g.jpg

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

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

第五步:清理迁移配置

迁移完成后,删除原有的注册中心的配置和迁移过程专用的依赖 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 技术使得您的应用无需修改任何代码和配置,即可享有阿里云提供的微服务治理能力,已经上线的功能包含服务查询、无损下线、服务鉴权、离群实例摘除、标签路由。

相关实践学习
使用DAS实现数据库自动SQL优化
本场景介绍如何使用DAS实现数据库自动SQL优化。
SpringMVC框架入门
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts2等。 相关的阿里云产品企业级分布式应用服务 EDAS:企业级分布式应用服务 EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的 PaaS 平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持 Spring Cloud、Apache Dubbo(以下简称 Dubbo )等微服务运行环境,助力您的各类应用轻松上云。产品详情: https://www.aliyun.com/product/edas&nbsp;
相关文章
|
3月前
|
存储 Cloud Native Nacos
恭喜 Nacos 和 Sentinel 荣获 2023 开源创新榜“优秀开源项目”
恭喜 Nacos 和 Sentinel 荣获 2023 开源创新榜“优秀开源项目”
|
3月前
|
运维 Kubernetes Cloud Native
Nacos 2.3.0 正式版发布,Nacos Controller 项目开源
Nacos 2.3.0 正式版发布,Nacos Controller 项目开源
|
5月前
|
NoSQL API Nacos
Nacos是一个开源的微服务架构下的服务发现和配置管理工具,
Nacos是一个开源的微服务架构下的服务发现和配置管理工具,
54 2
|
6月前
|
Kubernetes Java 开发者
【测评体验】探索阿里云MSE-Nacos的开源版
本文通过体验测评,分享对阿里云MSE-Nacos的开源版的测评,重点关注其在开源选型、最佳实践和开源需求方面的表现。通过对性能、功能、控制台体验、上下游生态和社区体验的比对,以及对使用过程中遇到的问题和需求的探讨,读者可以了解阿里云MSE-Nacos开源版的优势、挑战和未来发展方向。
370 1
【测评体验】探索阿里云MSE-Nacos的开源版
|
自然语言处理 Cloud Native Dubbo
Nacos 开源、自研、商业化三位一体 | 学习笔记
快速学习 Nacos 开源、自研、商业化三位一体
405 0
Nacos 开源、自研、商业化三位一体 | 学习笔记
|
消息中间件 Cloud Native 容灾
我们总结了 3 大使用建议,并首次公开 Nacos3.0 规划图 | Nacos 开源 4 周年
在开源领域其实只要你愿意熟悉,一定会有所收获,祝愿每一位开发者在自己喜欢的领域能做出你想要的产品。最后感谢 Nacos 开源社区每一位同学!
304 1
我们总结了 3 大使用建议,并首次公开 Nacos3.0 规划图 | Nacos 开源 4 周年
|
消息中间件 Cloud Native 容灾
我们总结了 3 大使用建议,并首次公开 Nacos 3.0 规划图 | Nacos 开源 4 周年
在开源领域其实只要你愿意熟悉,一定会有所收获,祝愿每一位开发者在自己喜欢的领域能做出你想要的产品。最后感谢 Nacos 开源社区每一位同学!
我们总结了 3 大使用建议,并首次公开 Nacos 3.0 规划图 | Nacos 开源 4 周年
|
消息中间件 Cloud Native 容灾
我们总结了3大使用建议,并首次公开 Nacos3.0 规划图 | Nacos 开源4周年
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施
|
供应链 Kubernetes Cloud Native
Nacos 开源之夏 2022 来了
欢迎在校同学们参与 Nacos 开源之夏,社区导师手把手让你的代码被社会广泛复用,来赚取最高 12000 奖金,可推荐入职/实习你心意公司,又拿钱又成长又有价值,你还等什么呢?报名马上截止,快来参与 Nacos 开源之夏。
Nacos 开源之夏 2022 来了
|
Java 测试技术 API
PassJava 开源(四)之 整合 Spring Cloud 整合 Nacos配置中心
PassJava 开源(四)之 整合 Spring Cloud 整合 Nacos配置中心
289 0
PassJava 开源(四)之 整合 Spring Cloud 整合 Nacos配置中心