服务配置中心
服务配置中心是对微服务进行集中式配置管理的重要机制。集中配置管理可以分离应用代码与不同环境下的配置信息,实现应用“一次打包、随处运行”,通过这种外部化的配置管理还可以实现配置修改实时生效、灵活的权限及安全管理等特性。
服务配置中心管理
在传统的中心化单体架构中,所有的配置项都是通过本地的静态配置文件进行管理的,对于不同的环境(开发、测试、生产),我们需要手动维护和切换调整不同的配置。在分布式微服务环境下,一个系统往往又由多个微服务组成(X个),每个微服务都需要独立的配置文件(Y个),而分布式部署又会有多个机器或者容器(Z个),那么在这种情况下,如果使用静态配置管理,我们需要同时管理X×Y×Z个配置文件,这样无疑是非常低效并且容易出错的。
所以我们需要将各种配置参数全部放到一个集中的地方(服务配置中心,简称配置中心)进行统一管理,并提供一套标准的接口规范。当不同服务需要获取参数时,可以从配置中心拉取和配置,当修改配置时,可以由配置中心统一下发给集群中的所有实例。配置中心可以解决传统的配置文件的如下问题:
●服务修改不灵活。配置中心具备“实时更新”的功能,它可以用来解决传统的服务修改不灵活问题。当线上系统需要调整参数的时候,只需要在配置中心动态修改即可。
●配置文件无法区分环境。通过“配置与应用分离”可以解决传统的配置文件无法区分环境问题,配置并不跟着环境走,当不同环境有不同需求的时候,就到配置中心获取,可降低运维成本。
●配置文件过于分散。采用“配置集中管理”可解决传统的配置文件过于分散的问题。所有的配置都集中在配置中心管理,不需要每个项目都自带一个配置文件,降低了开发成本。
●配置修改无法追溯。采用静态配置文件,当配置进行修改后,不容易形成记录,更无法追溯是谁修改的、什么时间修改的、修改前的内容是什么。当配置出错时,更没办法回滚。
配置中心可以统一记录所有更改记录,用于后续审计管理。
配置中心的核心能力
如下图所示是配置中心的核心能力。
●交付与配置分离:在打包部署时,传统应用系统会为不同环境打出不同配置包,例如为开发、测试、生产环境分别制作发布包,每个包里包含特定配置。现代微服务提倡云原生(CloudNative)和不可变基础设施(ImmutableInfrastructure)的理念,推荐采用容器镜像这种方式打包和交付微服务,应用镜像一般只打一个包,可以部署到不同环境。这就要求交付物(比如容器镜像)和配置分离,交付件只制作一份,并且是不可变的,可以部署到任意环境,而配置由配置中心集中管理,所有环境的配置都可以在配置中心集中配置,运行期应用根据自身环境到配置中心动态拉取相应的配置。
●抽象标准化:企业应该由框架或者中间件团队提供标准化的配置中心服务,封装配置管理的细节和配置的不同格式,方便用户进行自助式的配置管理。一般用户只需要