莫那·鲁道

惯于闲看花飞花落, 心念天际云卷云舒.

Coder, 欢迎留言 😆.


GitHub

如何从零设计一个配置中心

0. 大概需要哪些组件?

  1. 无状态的配置服务 Service
  2. 软负载 Client,自动刷新配置
  3. 服务接入注册中心 Eureka
  4. 人性化的 WEB 控制台
  5. 持久化配置 DB
  6. MQ 消息组件,异步解耦客户端和 WEB 控制台。

下图是分布式配置中心架构图:

1. Client 功能:

  1. 软负载
  2. 服务发现(简洁部署时可不需要注册中心)
  3. 获取配置
  4. 长连接配置中心,支持服务端 push。
  5. 支持自动刷新配置,支持监听配置变化。
  6. 兼容 Spring
  7. 支持插件,支持用户做配置加解密操作。
  8. Client 最好无配置,全部存放配置中心。
  9. 本地文件缓存。

2. Service 功能:

  1. 服务注册,使客户端发现,简洁部署时可不需要注册中心。
  2. 支持海量客户端长连接。
  3. 无状态集群,高可用。
  4. MQ 消费者,消费 WEB 控制台的消息并通知客户端。
  5. 支持客户端主动获取配置和被动获取配置。
  6. 支持和 WEB 控制合并部署。

3. WEB 控制台功能:

  1. 支持多环境,多应用,每个环境和应用对应不同权限。
  2. 支持灰度发布。
  3. 支持发布回滚。
  4. 配置权限管理,消息发布审计,消息获取审计。
  5. 支持第三方服务 restful 调用。
  6. 支持和 Service 合并部署。

4. 支持简洁部署:

分布式配置中心部署较为复杂,组件较多。

简洁部署适用于那些测试配置中心的用户,或者对可用性不是特别高的用户(Client 本地有文件缓存,Service 挂了也不影响)。

WEB 控制台,Service 可只使用一个 JVM,MQ 使用阻塞队列代替。Client 提供 Maven Jar 包。

参考

apollo 配置中心介绍