随着分布式业务的发展,分布式节点会越来越多,就会出现各种各样的问题。
在应用启动的时候,往往需要从配置文件中读取一些应用启动的初始化配置参数,而这些配置一旦创建就会伴随着应用程序整个的生命周期。例如数据库的链接配置、redis的链接配置等等。这些配置一旦被创建使用在整个的应用程序的生命周期中都是有效的。
但是在分布式系统中,同一份的应用可能会在不同的环境中运行、例如生成环境的应用、测试环境的应用、开发环境的应用。并且有可能会出现不同集群之间的配置文件也是不一样的情况。那么这个时候我们就需要一个统一的配置中心来去管理这些配置。
配置中心就是将所有应用的配置文件从应用本身中剥离出来,对配置进行统一的管理,应用本身则不需要再去关心配置。
配置中心完成的功能如下
总体来讲,配置中心所完成的工作就是对系统中各个服务的配置文件进行管理。
目前市面上开源的配置中有如下几种
其中Disconf已经不再维护了,而Spring Cloud Config 则是比较依赖于Git或者是SVN进行管理的,所以这里我们介绍的就只有Apollo和Nacos了。
其实Nacos不但包括配置中心,它还包括了注册中心的功能,只不过这里我们重点介绍一下其配置中心的功能。
Nacos设计之初其实是为了实现服务的注册发现,也就是倾向于一个注册中心的个哦能。提供了一些动态发现功能、服务配置功能、元数据管理功能以及流量管理等功能。
其配置中心主要包括两部分内容,Server端和Client端,都是由JAVA语言开发,由Client端来完成对于服务的配置管理。所以Client支持多语言开发,并且与具体的应用模块嵌套到一起来完成服务的配置管理。并且Nacos也提供了相应的SDK和OpenAPI来完成服务的配置发现逻辑。
Apollo配置中心是携程基础架构部门研发的分布式配置中心项目,能够以集中式的管理方式来管理不同环境、不同集群的配置,并且配置修改完成之后可以实时的推送到应用端,并且能够实现权限管理,流程管理等等功能。
Apollo也分为Server端和Client端,它的Server端是基于Spring Boot和Spring Cloud开发,打包之后可以直接发布使用。客户端也是基于Java语言开发,几乎可以运行于所有的Java环境中,同时对于Spring Boot也有很好的支持。
Apollo是一个带有治理能力的分布式配置发布平台,它提供了基于不同版本、不同环境、不同集群的配置管理,并且支持配置热发布。通过版本管理来实现不同场景,不同环境的发布,基于权限管理提供了代码的审计检查、发布检查等功能。并且提供了OpenAPI支持二次开发。最主要的是Apollo与Spring Boot是天然结合,不需要再去多做任何处理。
如下图所示是Apollo的经典运行流程。
从配置中心本身的角度上来讲,Nacos的读写性能要略高于Apollo,其次通过上面的分析,我们可以看出二者基本上是功能相差不大,并且Nacos还提供了注册中心服务,所以整体优势方面也是略强于Nacos的,并且Nacos背靠阿里,也是有很大的应用发展空间。所以个人觉得如果配置性要求不是太强的场景完全可以使用Apollo因为其简单,如果配置性要求强的话,建议使用Nacos。