这次我想分享如何管理分布式应用系统中的配置项,我们的实践与遇到的问题
为什么要用配置中心
我相信大家在开发的过程中,经常会遇到的问题是
- 我有个新的特性,但是我需要对其进行控制,在必要时能将功能关闭或打开
- 链接数据库的线程池需要调整
- 访问某个目标的超时时间需要调整
- 调节任务执行器的线程池大小
- 随着业务发展,几百,几千的虚机或是容器实例配置需要管理
难道每次配置我都要去代码库中改变然后重新发布版本么?我在曾经的项目中就是这么做的,得益于当时完善的CICD,我们只需要几分钟就可以完成这样的一次变更,但是依然要面临进程的重启,所以之后的实践中我们直接将配置管理放入到了编程框架中,并配以中心式的配置管理服务
使用编程框架
我在这篇分享中有大量分享欢迎参考,Go语言分布式系统配置管理实践--go archaius
有了这次改变后我们就做到了在运行时让配置生效,不用通过流水线重新发布新版本。
在流水线中能做的只是在发布一个服务时,对接配置中心的API,对相关配置进行变更。。比如进行一次新版本的发布,更改金丝雀发布策略。
配置逐渐变得难以管理
配置中心的数据模型逐渐无法满足需求
Dimension概念
配置项以Dimension划分 Dimension由{service}@{app}#{version}表示,也就是服务相关信息拼接而成的字符串。
Dimension就是一个唯一的ID,关联各个配置项,也就是一段json结