什么是配置中心
配置中心用来集中管理应用不同环境(Dev、Gray、Online...)、不同集群的配置,配置修改后能够实时推送到应用端。
配置中心产生的背景以及要解决的问题
- 细微的修改点带来的全局发布问题
- 核心加密数据对开发人员的不可见性
- 动态运维、参数配置
...
配置中心的要素
1.配置是可分离的,可从微服务中抽离出来,任何的配置修改不需要动一行代码。
2.配置应该是中央的 通过统一的中央配置平台去配置管理不同的微服务
3.配置中心必须必须可靠切稳定地提供配置服务。
4.配置是可追溯的,任何的配置历史都是可追溯,被管理且可用。
市场上常用的几类配置中心
Spring cloud config
Git + Spring cloud Bus做到数据动态变化拉取
pub-sub模式
Spring cloud Config工作原理
执行流程:
- 用户在Git中update和commit配置,Git hooks脚本回调;
- Spring Cloud Config Server通过回掉,获取更新配置;
- 用户在其中任一一台机器上执行配置刷新操作 (图中为 "post /bus/refresh")
- 目标机 (App A)在Config Server中拉取最新配置,并发送消息到消息总线中,通知其他机器配置被变更;
- 所有其他机器通过消息总线获知配置刷新后,在Config Server中拉取最新配置。
缺点:
- 依赖系统中消息中间件(RabbitMQ或kafka)、spring 消息总线调度器spring bus。
- 配置中心无降级处理、可用性不高。
- 无友好界面操作、基于git管理的第三方工具
- 整个链路较长、时效性无法保证。
- 推送记录追踪较为复杂
ZooKeeper
zookeeper工作原理Alibaba ACM
Acm工作台配置后同步到Diamond-server集群、acm-client到diamond-server拉取最新配置信息。
Acm工作原理.jpg
执行流程:
- 用户在ACM工作台更新相关配置;
- Diamond-server持久化存储配置、集群设置缓存;
- 所有Diamond-client同步轮询Diamond-server最新更改信息、判断是否有变化、有变化则拉取最新变化配置。
- 将最新配置文件写入到本地文件缓存。
缺点:
- 依赖阿里云Diamond服务、无法自行维护
实现原理
怎么同步配置的、缓存策略?
Alibaba ACM
阿里云acm服务架构和Apollo类似。
- 启动开启轮询线程
com.taobao.diamond.client.impl.ServerListManager#start
com.taobao.diamond.client.impl.ClientWorker#ClientWorker - 检测集群变化和配置变化
集群变化
com.taobao.diamond.client.impl.ServerListManager#updateIfChanged
配置变化
com.taobao.diamond.client.impl.ClientWorker#checkUpdateDataIds - 获取本地文件缓存
com.taobao.diamond.client.impl.LocalConfigInfoProcessor#getFailover - HTTP远程请求content,缓存到本地file
com.taobao.diamond.client.impl.ClientWorker#getServerConfig(com.taobao.diamond.client.impl.DiamondEnv, java.lang.String, java.lang.String, java.lang.String, long)
Spring cloud config
ZooKeeper
高性能和高可用
- 集群环境配置中心
- 配置获取缓存
- 历史版本快速回滚
- 配置中心宕机处理(本地文件缓存)
- 扩展性(多语言支持、操作安全严谨性、集群管理)
怎样用好配置中心
- 业务分组
- 使用场景分组
应用的场景
- 运维配置灰度场景、sentinel动态流控
- 分库分表策略
- 数据库容灾切换
- 线程池的动态配置
Pull和Push在各业务场景中的应用
网友评论