如何从零设计一个配置中心
## 0. 大概需要哪些组件?
- 无状态的配置服务 Service
- 软负载 Client,自动刷新配置
- 服务接入注册中心 Eureka
- 人性化的 WEB 控制台
- 持久化配置 DB
- MQ 消息组件,异步解耦客户端和 WEB 控制台。
下图是分布式配置中心架构图:
1. Client 功能:
- 软负载
- 服务发现(简洁部署时可不需要注册中心)
- 获取配置
- 长连接配置中心,支持服务端 push。
- 支持自动刷新配置,支持监听配置变化。
- 兼容 Spring
- 支持插件,支持用户做配置加解密操作。
- Client 最好无配置,全部存放配置中心。
- 本地文件缓存。
2. Service 功能:
- 服务注册,使客户端发现,简洁部署时可不需要注册中心。
- 支持海量客户端长连接。
- 无状态集群,高可用。
- MQ 消费者,消费 WEB 控制台的消息并通知客户端。
- 支持客户端主动获取配置和被动获取配置。
- 支持和 WEB 控制合并部署。
3. WEB 控制台功能:
- 支持多环境,多应用,每个环境和应用对应不同权限。
- 支持灰度发布。
- 支持发布回滚。
- 配置权限管理,消息发布审计,消息获取审计。
- 支持第三方服务 restful 调用。
- 支持和 Service 合并部署。
4. 支持简洁部署:
分布式配置中心部署较为复杂,组件较多。
简洁部署适用于那些测试配置中心的用户,或者对可用性不是特别高的用户(Client 本地有文件缓存,Service 挂了也不影响)。
WEB 控制台,Service 可只使用一个 JVM,MQ 使用阻塞队列代替。Client 提供 Maven Jar 包。
参考
如何从零设计一个配置中心
http://thinkinjava.cn/2018/07/21/2018/2018-07-22-如何从零设计一个配置中心/