1 配置中心功能简述
日常开发系统,对于常变的信息会通过配置的形式来完成。并在运行时调整配置改变系统运行状态。为了实现这样的能力就需要用到统一配置中心。实现对配置的管理。本文以Java服务端应用为例进行说明。
2 配置中心的组成
一个完整的配置中心需要具备下列能力:
配置服务器
- 提供最终配置的管理能力:将配置存储在不同的存储介质中,并可以快速查找
- 配置变更通知:当配置变更时能通知客户端
- 配置管理平台:外部操作界面,用户可在平台上完成配置增改
其它的能力可能还包括权限控制、配置回滚等能力
客户端本地代理与远程代理
当配置服务器上的配置变更时,变更由客户端本地代理拉取,同时存储在本地缓存上。在客户端和服务器之间加一层代理有如下作用:
- 客户端使用配置中心的功能需要引入Jar包,这样将易变的能力放在中间代理中处理,提高灵活性。例如升级本地缓存和容灾管理能力,直接升级本地中间代理,这样变化就对客户端无感知。此外也可以在这里进行流量控制等功能,同时达到对客户端无感知
当客户端代理故障时,为了增加可靠性,引入远程代理(哨兵)。功能与本地代理一致,提高可用性。
客户端SDK
提供标准的,不易变的通用接口。
- 提供配置读取能力:读配置通过缓存完成,这里缓存指SDK本地缓存
- 提供配置读写分离能力:写与读分离,写指将信息写到本地代理,由本地代理更新服务器
- 本地容灾能力:当配置中心挂掉后,仍然能读到启动时的配置
上述介绍的能力是三个核心能力,最终配置系统的结构如下图所示:
3 客户端操作
读配置
- 客户端启动后,与本地代理交互,读取配置放入缓存,随后可通过读接口读数据。
- 扫描定义的配置字段,对所有维护的可配置字段增加监听器,当配置字段发生变更后,更新缓存中对应的配置
写配置
- 写操作发起,更新配置时,直接向服务器发起更新请求。这时服务器会进行鉴权等操作。当配置变更,服务器会通过配置变更模块来通知本地缓存变更。
4.总结
配置中心是在当前常见的系统。除了上述介绍的抽象结构,业界也有很多实现。Disconf、携程 Appollo、淘宝Diamond等。