作者:阿里云 MVP郦强
1、主流微服务配置中心对比Spring Cloud Config、阿里云ACM、Nacos
说到配置,记得很早用SSH或SSM框架开发项目的时候都是xml的配置文件,内容很多,很容易写错,稍微有一个地方出错了,整个项目就启动不了,现在技术不断日新月异,更新换代很快,而且开源项目框架很多,层出不穷,目前一般都是用微服务的框架,项目基本都用注解方式了,当然除了项目的配置外,还有其他的一些配置文件,比如:开发(dev)、测试(test)、发布(pro)的配置、redis的配置、rabbitMQ的配置、定时任务配置、微服务的路由配置等等,所以用一款好的配置管理工具能事半功倍。
目前主流的一些配置管理中心有Spring Cloud Config Server、Zookeeper、阿里云ACM、Nacos等,这里介绍阿里云ACM,主要是阿里云MSE的微服务引擎支持的Nacos暂时还没有配置这块,所以这里做一个介绍。公司之前有个项目也用了ACM产品,还是不错的,如果后期MSE支持Nacos的配置中心,那我一定强烈推荐大家使用这个MSE产品了。
1)Spring Cloud Config Server
为服务端和客户端提供了分布式系统的外部配置支持,配置服务器为各应用的所有环境提供了一个中心化的外部配置。Spring Cloud 配置服务器默认采用 Git 来存储配置信息,其配置存储、版本管理、发布等功能都基于 Git 或其他外围系统来实现。
SpringCloud Config 配置git
支持Profile的方式隔离多个环境,通过在Git上配置多个Profile的配置文件,客户端启动时指定Profile就可以访问对应的配置文件。单独创建一个配置文件的项目,在config server的git中配置即可。
单独创建的配置文件项目,在Spring Cloud Config中指定
Spring Cloud Config原生不支持配置的实时推送,需要依赖Git的WebHook、Spring Cloud Bus和客户端/bus/refresh端点:
a)基于Git的WebHook,配置变更触发server端refresh
b)Server端接收到请求并发送给Spring Cloud Bus
c)Spring Cloud Bus接到消息并通知给客户端
d)客户端接收到通知,请求Server端获取最新配置
2)阿里云ACM(Application Configuration Management)
应用配置管理 ACM 是一款在分布式架构环境中对应用配置进行集中管理和推送的产品。利用 ACM,可以在微服务、DevOps、大数据等场景下极大减轻配置管理的工作量,并增强配置管理的服务能力。这个是官网的介绍,的确功能强大,公司之前的项目也用这个配置过。
应用配置管理 ACM(Application Configuration Management)前身为淘宝内部配置中心 Diamond,现已作为 Nacos 的配置中心模块开源。
关于ACM的使用场景,大家可以点击这个链接查看:https://help.aliyun.com/document_detail/59972.html?spm=a2c4g.11186623.6.546.5a623733KW3wIe 好处很多,我就结合公司的自身项目,说说两个应用场景:
a)微服务应用架构下的配置管理
使用微服务框架的人都知道,随着应用和机器数目的增多,配置管理的工作会变得很繁琐。单个应用下多个机器的配置分发,应用对应用的配置依赖,都将是很麻烦的事情。在传统架构的应用发布过程中,修改一个应用配置就需要将整个应用重新打包发布,整个过程非常繁琐,不仅增加了运维的工作量,而且容易出错。
使用了ACM配置管理中心后,新的配置发布并不依赖配置打包,在新版本的配置发布后,所有应用立即生效,动态更新,这个很方便,下面展示两张ACM的图
传统方式,配置更改需要重新打包
ACM配置方式,动态更新,无需重新打包
b)应用业务场景动态推送
这个场景也是经常要用到的,公司有个奶酪生活的项目,就是淘宝、京东、拼多多返利模式,这个项目运营经理经常要搞活动,展示运营页面,比如618,双十一,马上又要到双十二了,所以运营活动页面经常要变,层出不穷,吸引消费者来使用。如何让前端页面快速响应运营活动、降低开发成本、提高运营效率,也是 ACM 的使用场景之一。
通过在前端 Javascript 埋入 ACM 的配置内容(如三方库版本号,静态资源 URL 等),在运营活动发布时,运营人员可以通过运营工具修改 ACM 配置规则,直接让前端 Javascript 的展示生效。
动态推送网页配置信息,更新更加便捷
3)Nacos
Nacos是阿里开源的,Nacos 支持基于 DNS 和基于 RPC 的服务发现。在Spring Cloud中使用Nacos,只需要先下载 Nacos 并启动 Nacos server,Nacos只需要简单的配置就可以完成服务的注册发现。
Nacos除了服务的注册发现之外,还支持动态配置服务。动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
一句话概括就是Nacos = MSE + ACM。
另外配置中心还有Apollo,Zookeeper等,不过项目中实际没使用过,所以这里就不提了。
2、总结:
个人还是非常偏好Nacos的,一来开源,现在也有稳定的release版本了,二来支持多种语言,现在运维部署用的是k8s,Nacos对docker,k8s都支持很好,最好的一点,可以把之前Consul(公司前一个项目用的)上的配置通过Nacos Sync同步过来,而且迁移到Nacos上相当的方便。下一篇文章,我们将对主流微服务注册中心产品进行比较 Eureka、Consul、Nacos
本文参考链接:
1、https://help.aliyun.com/document_detail/59957.html?spm=a2c4g.11174283.6.545.48d7613624gxGu
首发于简书。