从 2018 年 Nacos 开源说起

lALPD4d8peXtLP3NAZPNAt4_734_403.png_720x720q90g.jpg

2018 年夏天

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

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

为什么要开源 Nacos ?

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

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

 NacosConsulEurekaZookeeper
一致性协议CP+APCPAPCP
健康检查TCP/HTTP/MYSQL/Client BeatTCP/HTTP/gRPC/CmdClient BeatKeep Alive
负载均衡策略权重/
metadata/Selector
FabioRibbon
雪崩保护
自动注销实例支持不支持支持支持
访问协议HTTP/DNSHTTP/DNSHTTPTCP
监听支持支持支持支持支持
多数据中心支持支持支持不支持
跨注册中心同步支持支持不支持不支持
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 。假设原有的应用主类启动代码如下:

@SpringBootApplicationpublic 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 技术使得您的应用无需修改任何代码和配置,即可享有阿里云提供的微服务治理能力,已经上线的功能包含服务查询、无损下线、服务鉴权、离群实例摘除、标签路由。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用三国杀讲分布式算法,舒适了吧?

来源 | 悟空聊架构头图 | 付费下载于视觉中国点击播放&#xff0c;看文效果更佳&#xff01;东汉末年&#xff0c;袁绍作为盟主&#xff0c;汇合了十八路诸侯一起攻打董卓。在讲解之前&#xff0c;我们先聊下分布式协议和算法整体脉络。现在很多开发同学对分布式的组件怎么使用…

软件设计师 - UML图

文章目录总览UML图关系活动图通信图用例图类图 对象图顺序图状态图组件图总览 UML图关系 包含&#xff1a; 扩展&#xff1a; 泛化&#xff1a; 用例的泛化&#xff1a;把可选行为从必须行为中分离出来&#xff1b; 参与者的泛化&#xff1a;可以完成参与者的同样的任务&am…

SpringBoot 使用宝兰德中间件替换tomcat运行部署+控制台部署

文章目录1. 排除tomcat依赖2. 集成宝兰德依赖3. 项目打包方式4. 支持war部署配置5. 控制台部署1. 排除tomcat依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions>…

戚俊:可能是最懂架构的投资人

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 简介&#xff1a; 戚俊的快速成长离不开恰逢其时的机遇和委以重任的伯乐&#xff0c;毕业一两年受邀创业。当腻了CTO&#xf…

除了 Docker,我们还有哪些选择?

来源 | CSDN编译 | 弯月 责编 | 张文头图 | CSDN下载于视觉中国【编者按】所谓三十年河东&#xff0c;三十年河西&#xff0c;曾经在容器领域叱咤风云的 Docker 如今已风光不再。抛开情怀&#xff0c;我们不得不承认&#xff0c;Docker 已经被后浪拍死在沙滩上了……大约 4 年前…

阿里云李飞飞:今年将帮1000家企业“去O”,完成10000套传统数据仓库上云

阿里云直播回放头号云话题直播回放 “今年将帮1000家企业去O&#xff0c;完成10000套传统数据仓库上云。”6月9日&#xff0c;阿里云数据库负责人李飞飞在阿里云峰会上表示&#xff0c;经过多年技术演进&#xff0c;传统数据库上云已进入大规模攻坚阶段。 达摩院数据库首席科学…

系统架构设计师 - 23种设计模式(GOF)

文章目录总览创建型&#xff08;5种&#xff09;工厂方法 Factory Method抽象工厂 Abstract Factory生成器模式 Builder原型模式 Prototype单例模式 Singleton结构型&#xff08;7种&#xff09;适配器 Adapter桥接 Bridge组合模式 Composite装饰者模式 Decorator外观模式 Faca…

如何使用Trie树,设计实践Google一样的输入提示功能

来源 | 搜索技术责编 | 小白Google和百度都支持输入提示功能&#xff0c;辅助你快速准确的输入想要的内容。如下&#xff1a;输入“五一”&#xff0c;会提示“五一劳动节”等。那如何实现谷歌这样的输入提示功能呢&#xff1f;分析下输入提示的功能需求当输入前面的词A&#x…

计算机与网络

文章目录1.计算机组成2.操作系统进程管理存储管理设备管理文件管理3.数据库系统关系代数数据仓库4.计算机网络1.计算机组成 计算机组成&#xff1a;控制器、运算器、存储设备、输入设备、输出设备。 控制器功能程序计数器&#xff08;PC&#xff09;下条要执行指令的地址指令…

物联网与万物互联有什么区别?

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; IoE与IoT&#xff1a;有什么区别? 除非您是专家&#xff0c;否则物联网(IoT)和万物互联(IoE)之间几乎没有什么区别。但是&am…

宝兰德中间件同台机器多个实例安装

文章目录1. 启动多实例2. 修改实例13. 修改实例21. 启动多实例 同一台机器同时启动两个示例ins-1和ins-2需要修改和规划端口避免冲突&#xff0c;端口配置在中间件安装目录下的conf/server.conf文件中。示例端口规划如下&#xff1a; 只需要修改http管理端口、http服务端口、J…

5G网络打破专有系统的桎梏

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 随着技术的不断变迁&#xff0c;专有无线接入网络的时代正在逐渐消失。运营商希望能在降低成本的同时增加灵活性&#xff0c;…

为普及再助一把力!《2021年中国低代码/无代码市场研究报告》正式发布

开发能力“下放”&#xff0c;普通人也能通过“拖拉拽”快速搭建软件——在经历了大型套装软件、软件SaaS化之后&#xff0c;我国企业数字化进程即将迎来低代码/无代码开发的全新时代。 1月19日&#xff0c;海比研究院、中国软件网联合中国软件行业协会在北京举行《2021年中国…

阿里云CDN六大边缘安全能力,全力助推政企数字化转型

6月9日&#xff0c;2020年阿里云线上峰会召开。阿里云智能总裁张建锋认为&#xff0c;数字化已经成为中国经济的主要驱动力&#xff0c;疫情让政府、企业都认识到数字化的迫切性。在峰会上&#xff0c;阿里云CDN正式对外发布基于CDN构建的六大边缘安全能力&#xff0c;全力助推…

PageHelper循环依赖 com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration

在用pageHelper的时候突然遇到个问题&#xff0c;启动项目后出现这个情况&#xff1a; springboot2.6好像禁止循环依赖还是啥的&#xff0c;翻来翻去没看到解决办法&#xff0c;后面去pageHelper github看&#xff0c;才看到最新版本已经解决了这个问题。 解决方案&#xff…

获奖名单出炉,快来看看有没有你!

这次千万别再错过&#xff01;周五福利日&#xff0c;人人都可免费领会员&#xff01;详情戳这里奖品多多&#xff0c;不仅有CSDN月卡会员、CSDN年卡会员&#xff0c;还有5w现金奖品等你瓜分&#xff01;邀请越多奖品越多&#xff01;本周五上午11:00&#xff0c;准点开放领取&…

看我如何用Dataphin实现自动化建模

前言&#xff1a;更多关于数智化转型、数据中台内容可扫码加群一起探讨 阿里云数据中台官网 https://dp.alibaba.com/index 作者&#xff1a;数据小海豚 随着大数据趋势的迅速增长&#xff0c;数据的重要性与日俱增&#xff0c;企业内看数据、用数据的诉求越来越强烈&#x…

EasyExcel 导出时 Converter转换器 注入 ExcelContentProperty 为null

异常现象&#xff1a; Converter转换器 注入 ExcelContentProperty 为null 直接原因&#xff1a; 调用**.head(&#xff09;**方法&#xff0c;重写表头样式&#xff0c;就导致ExcelContentProperty 注入失败。 源码原因&#xff1a; todo 解决办法&#xff1a; todo

SaaS模式云数据仓库:持续保护云上数据及服务安全

2020年6月9日&#xff0c;阿里云 MaxCompute 全新发布企业级新能力&#xff0c;在成本、性能、安全方面&#xff0c;持续定义企业级SaaS模式云数据仓库&#xff0c;通过 “云数据仓库” 的新模式&#xff0c;帮助企业实现数字经济新优势。 据介绍&#xff0c;最新发布的算力资…

看穿容器的外表,Linux容器实现原理演示

来源 | 多选参数责编 | 程序锅头图 | 下载于视觉中国容器技术的核心功能&#xff0c;就是通过约束和修改进程的动态表现&#xff0c;从而为其创造出一个“边界”也就是独立的“运行环境”。下面我们使用 C 语言和 Namespace 技术来手动创建一个容器&#xff0c;演示 Linux 容器…