本文介绍配置管理相关的基本概念。

配置

在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如WAR,JAR包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成这个步骤。配置变更是调整系统运行时行为的有效手段之一。

配置管理

编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动,统称为配置管理。

动态配置和静态配置

系统配置可以是静态或者动态配置。

  • 静态配置:配置的版本与软件本身的版本强绑定。
  • 动态配置:在同一个版本软件部署且运行期间,配置可以连续发生多次变更,则称之为动态配置。

例如build-version: 1.0.0配置与软件版本绑定,则为静态配置;而线程池大小的配置则可以在软件运行期间连续多次变更,则为动态配置。

配置推送

配置管理中,通常需要将配置的变更分发到相关的系统。从分发到配置生效的过程称为配置推送。

推送轨迹

从配置变更、配置推送到配置生效过程的整个轨迹称为推送轨迹。通过查看某个配置的推送轨迹,可以获知一个配置在哪些应用、哪些机器上变更,在哪个时间点生效,产生了哪些影响等。

配置监听

配置监听,是指配置管理组件允许软件系统通过使用SDK等方式向配置管理系统注册监听器(Listener),从而监听并消费该配置的变更。

配置项

配置项是指一个具体的可配置的参数与其值域,通常是param-key=param-value的形式存在。例如配置系统的日志输出级别(logLevel=INFO|WARN|ERROR)就是一个配置项。

配置集

一组相关或者不相关的配置项的集合称为配置集。通常系统中的一个配置文件就是一个配置集,包含了系统各个方面配置。例如一个配置集可能包含数据源、线程池、日志级别等配置项。

配置集ID(Data ID)

配置集的ID,是配置组织的维度之一。一般通过Data ID来组织、划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集可以用有意义的名称来标识这个配置集。Data ID通常采用类Java包命名方式(如com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

配置分组(Group)

配置集的分组,是配置组织的维度之一。通常使用一个有意义的字符串来分组配置集,例如Buy,Trade等,用以区分相同Data ID的配置集。创建配置时,如果未填Group名字,则默认用DEFAULT_GROUP代替。Group的常用场景是同一个配置类型用于不同应用或者组件,如database_url配置,MQ_topic配置等。

命名空间(Namespace)

命名空间用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的Group,Data ID的配置。Namespace的常用场景之一是不同环境的配置的区分隔离,如开发测试环境和生产环境的配置隔离等。

配置快照

配置管理客户端SDK会在本地生成配置的快照。当客户端无法连接到配置管理服务端时,可以利用快照提供系统的整体容灾能力。配置快照类似于Git中的本地commit的概念,也类似缓存,会在适当的时机更新,但是不会缓存过期(expire)。