2018 年夏天


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

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

为什么要开源 Nacos ?


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

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

除此之外,Nacos 支持多种启动模式,用户可以根据业务场景自由选择,将各个功能模块,如注册中心和配置中心,分开部署或者合并部署,从而能够完整支持小型创业公司成长到大型企业,微服务全生命周期的演进。
在 “Who is using Nacos” 的社区调研中,有 140 条留言,留言企业包括工商银行、爱奇艺、海康威视、APUS、上海识装等,而实际使用 Nacos 来构建注册和配置中心的企业数量远不止于此,虎牙直播是最早一批将 Nacos 大规模引入到生产环境的典型用户:

Who is using Nacos:

https://github.com/alibaba/nacos/issues/273

“虎牙关注 Nacos 是从v0.2 开始的,我们也参与了社区的建设,可以说是比较早期的企业用户。引入Nacos前,我们也对比了Spring Cloud Config Server、ZooKeeper 和 ectd ,总体评估下来,基于我们微服务体系现状以及业务场景,决定使用 Nacos 作为服务化改造中服务注册和服务发现的方案。使用过程中,我们发现,随着社区版本的不断更新和虎牙的深入实践,Nacos 的优势远比调研过程中发现的多。” #虎牙 基础保障部中间件团队负责人张波在一次开发者活动上分享道。

从开源到商业增值


似乎从开源软件诞生的第一天起,商业增值就出现了,它为那些基于开源来构建业务,但苦于效率、时间成本和稳定性问题的企业,提供了更多、更契合的选项,而这一魅力使得开源生态的发展越发健康。

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

产品官网:

https://www.aliyun.com/product/mse

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

从了解到实践


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 。假设原有的应用主类启动代码如下:

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

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

[1 ]https://yq.aliyun.com/articles/698930

作者信息:

望陶,GitHub ID @ralf0131,Apache Dubbo PPMC Member,Apache Tomcat PMCMember,阿里巴巴高级技术专家。

从 2018 年 Nacos 开源说起相关推荐

  1. Nacos 开源、自研、商业化三位一体战略解读

    简介: Nacos作为整个阿里云原生三位战略中的核心组成部分,我们在2018年以Configserver/VIPServer/Diamond为基础通过Nacos开源输出阿里十年沉淀的注册中心和配置中心 ...

  2. 2018年Python开源项目Top100!只在这里!

    整理 | Jane 出品 | Python大本营 2018 年的最后一天,营长为大家新鲜出炉了一份 2018 年 Python 开源项目 Top100 清单!这些项目都是营长每月通过收集 Mybrid ...

  3. 2018 年度 GtiHub 开源项目 TOP 25:数据科学 机器学习

    2018 年度 GtiHub 开源项目 TOP 25:数据科学 & 机器学习 雷锋网 AI 科技评论按:本文作者 Pranav Dar 是 Analytics Vidhya 的编辑,对数据科学 ...

  4. python 哪些项目_一份2018年Python开源项目Top100清单!

    2018 年的最后一天,营长为大家新鲜出炉了一份 2018 年 Python 开源项目 Top100 清单!这些项目都是营长每月通过收集 Mybridge 的数据整理而来的,是不是很棒!(我要在留言区 ...

  5. 2018中国人工智能开源软件发展白皮书-笔记

    "2018中国人工智能开源软件发展白皮书"是新手了解人工智能技术原理和技术现状的好文档,读完之后有再读几遍的冲动,学到了很多东西,做了笔记分享给大家共同学习,有不对的地方多多指出. ...

  6. 2018 年度国产开源软件新秀榜单

    来源于开源中国整理分享 开源中国社区在 2018 年新收录了近 2000 款开源软件,种类林林总总.根据开源软件的关注度和活跃度,以及它们在功能上的独特构思,最终产生了这份 2018 年度国产开源软件 ...

  7. 2018 年度新增开源软件排行榜之国产新秀榜

    回看 2018 年,无论是国内外,科技公司对「开源」投入的巨大资本不仅令人咋舌,更重要的是,伴随着资本的强势注入,有理由相信「开源」将会有更光明且清晰可见的未来.而开源软件作为其中最重要的一环,除了充 ...

  8. 2018 年度新增开源软件排行榜之国产 TOP 50[转载]

    榜单根据 2018 年开源中国社区新收录的开源项目的关注度.活跃度,以及所属分类整理而来,相信在一定程度上反映了国内大部分开发者在 2018 年所使用的技术栈和希望学习的技术. 可以看到,Java 相 ...

  9. 2018 年度新增开源软件排行榜之国产 TOP 50

    2019独角兽企业重金招聘Python工程师标准>>> 2018 年开源中国社区「新增」开源软件排行榜之国产 TOP 50 终于发布了! 榜单根据 2018 年开源中国社区新收录的开 ...

最新文章

  1. 被骗两次?黄仁勋骗过世界的14秒,英伟达押宝未来的元宇宙……
  2. asp.net core 使用identityServer4的密码模式来进行身份认证(2) 认证授权原理
  3. python数据库sqlite3_Python数据库之SQLite3
  4. java BigDecimal八种舍入模式
  5. android之视频直播与播放Vitamio
  6. oracle o7参数,Oracle技术之初始化参数O7_DICTIONARY_ACCESSIBILITY
  7. Android表格布局之设置边框
  8. cad设计师证书怎么考
  9. 概率论基础-严士健 第二版 习题与补充2.1答案
  10. windows10强制删除文件_Windows10中恶意软件删除
  11. 户外便携吹尘器方案浅析
  12. 计蒜客 人人都有极客精神(模拟)
  13. 安卓版企业微信下载的文件保存目录
  14. 使用系统打印服务器配置,打印服务器配置教程.pdf
  15. 3种简单的键盘记录简单介绍
  16. 蓝牙遥控器获取电量GATT
  17. 团体无线心理测评系统:心理健康评估、抑郁筛查、危机预警、问卷调查、物联网测评
  18. iOS 16 swift 横屏适配
  19. 我真的没读野鸡大学!是他们不好好起名字!
  20. MobileNeXt: Rethinking Bottleneck Structure for Efficient Mobile Network Design

热门文章

  1. Ubuntu安装搜狗输入法Linux版
  2. Python logging使用
  3. Python代码发送post请求接口测试--转载
  4. linux中文件名有英文括号的问题
  5. iOS一个灵活可扩展的开源Log库
  6. WIN10系统触摸板快捷键
  7. Tomcat的设置1——设置根目录
  8. 带你认识“货真价实”的P2P网贷风控
  9. 如何判断UIWebView是否loading完全
  10. [转]只让指定的机器连接SQLServer服务器