前言
Apollo是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端。本文介绍了配置的概念、配置中心的必要性以及Apollo的特点,着重拆解分析Apollo客户端的设计原理,了解Apollo的原理,也能帮助读者更加能够理解配置中心的实现原理。
一、什么是配置
配置是程序运行时,动态调整行为的能力。
配置有以下属性:
配置是独立于程序的只读变量
同一份程序在不同的配置下才会有不同的行为,而且配置对于程序来说是只读的,所以程序可以通过读取配置来改变自己的行为,但是不能自己改动配置文件。
配置伴随应用的整个生命周期
应用在启动的时候通过读取配置来初始化,在运行时根据配置改变自己的行为。
配置有多中加载方式
程序内部hard code,这种做法是反模式,十分不建议。
配置文件。
环境变量,配置可以预置在操作系统的环境变量里,程序运行时读取。
启动参数,可以在程序启动时一次性提供参数。
基于数据库,将易变配置放在数据库中,这样可以在运行期灵活调整配置。
配置需要治理
权限控制:对配置的修改需要有比较完善的权限控制,否则不正确的配置会引起灾难。
不同环境、集群配置管理:同一份程序在不同环境(开发、测试、生产)、不同的集群(如不同的数据中心)经常需要有不同的配置,所以需要完善的环境、集群配置管理。
框架类组件配置管理:如CAT客户端的配置。
二、为什么需要配置中心
在没有引入配置中心之前,一般研发的时候会有以下痛点:
配置格式散乱不规范
有的用properties格式,有的用yml格式,有的用xml格式,还有存DB的,做法五花八门。
主要采用本地静态配置,配置修改麻烦
在分布式微服务环境下,当服务实例很多的时候,配置修改费时费力。
易引发生产事故
如将测试环境的配置带到生产环境上。
配置缺乏安全审计和版本控制功能
无法查看到修改配置的人,修改了什么内容,以及修改的时间,除了问题也无法及时回滚。
三、配置中心的核心需求
1.交付件和配置分离
传统做法应用在打包部署的时候,会为不同环境打出不同配置的