引言
配置中心是大型分布式系统必不可少的重要基础组件,本文主要简要分析下分布式系统中为什么需要配置中心,以及在进行技术选型的时候如何根据自己实际的业务场景进行配置中心选型。
配置
在分析配置中心之前,我们来思考一下到底什么叫做配置?简单来讲配置就是一种在重新写代码的情况下,动态改变程序运行逻辑的操作手段。
在单服务扛业务的时代,尚可以通过运维小哥进行人肉修改配置,因为那个时候服务还不是很多。但是在当前为服务爆炸的年代,一个服务动辄几十上百台服务器。要是让运维小哥哥去修改配置那还不得疯掉。直接删库跑路了。我们可以分析下本地配置有哪些痛点。
1、配置修改后需要重启服务才能生效
运维小哥哥当修改一些配置信息后,需要将对应的服务进行重启,该修改的配置项才会生效,对于生产环境的应用来说,这个是很不容易接受的,因此需要一种不重启应用但是可以使得配置生效的解决方法。
2、配置维护性差
由于没有统一管理系统配置项的地方因此对于配置的修改维护也是十分艰难,运维恩怨需要运程到对应的服务器上修改配置文件,这种运维交互体验非常差。同时由于是人肉操作,因此有操作失误的可能性,进一步降低了配置可维护性的体感。
3、无法环境隔离
由于一般公司中都有开发环境、测试环境、预生产环境以及生产环境。因此同一个配置项在不同环境中的值可能是不一样的,因此需要通过一种方式将配置项通过环境进行隔离,各自环境管好自己环境配置项即可,制定环境的配置项修改不影响其他环境的配置项。这一点在以前的时代也是难以满足的。
综上所属,特别是分布式微服务时代,特别需要有一个地方可以将系统中的所有配置进行统一的收口以及管理,这样不仅可以很方便的进行配置修改以及变更,同时还可以操作记录,看看那些人修改了哪项配置,这样起到了系统配置统一管控的的作用,大大提升了生产安全以及运维效率。常见的配置形式有xml文件、properties文件、yaml文件等,我们希望这个配置统一管控的地方也可以将这些不同服务的配置文件进行统一管理。
配置中心
上文中分析了曾经年代服务架构中,配置管理存在的问题,只有理解了这些问题,才能够更加深刻的理解配置中心的价值所在。那么什么是配置中心呢?配置中心实际上就是分布式系统中集中统一管理线上应用程序配置项的管理平台。总结起来最主要包括以下三方面核心功能。
(1)配置统一管理
配置项的修改编辑统一在配置中心页面进行,还包括统一的配置版本管理、环境隔离、灰度发布以及热发布,在不重启应用的情况下使得修改的配置可以生效起作用。
(2)权限统一控制
主要控制其配置的读取权限以及修改权限,通过统一的权限管理提升运维效率。
(3)操作统一审计
记录用户操作修改配置的历史信息,这样在出现问题的时候可以进行复盘回查,同时进行操作审计。
如何选型
常见的主流配置中心主要有:
(1)spring-cloud-config
spring大家族
(2)nacos
阿里巴巴中间件
(3)apollo配置中心
携程开源的配置管理中心
这三款配置中心的选型对比可以参见下图:
从我个人角度来说,目前阶段apollo
配置中心相对成熟,现在已经被各个公司实际使用,所以比较推荐。但是现在nacos
发展势头很猛烈,估计在未来是配置中心的不二选择。
apollo
配置中心的整体架构图入戏所示:
看上去很复杂,其实主要由三部分组成:
(1)portal
提供配置修改编辑的页面管理
(2)admin service
负责配置信息的修改以及发布的功能
(3)config service
提供配置的修改以及发布等功能,这里需要注意的是configservice其实是包含了架构途中的euraka以及metaservice的。