配置中心分析

简介

配置中心可以兼顾配置实时性、配置的流程管理、以及分布式场景的应用。

配置实时性:传统的静态配置方式想要修改某个配置,则需要修改后重启,如果想要实现动态修改,可以使用数据库,采用轮询的方式,访问数据库获得配置数据。轮询频率低的话对配置数据变更的感知就慢,频率高的话,就会消耗过多的性能。

配置管理流程:权限管理、灰度管理、版本管理、格式检验和安全配置

分布式场景:随着采用分布式开发模式,项目之间的相互引用不断增多,相互之间的调用复杂度也指数上升,需要配置中心治理。

功能

灰度发布:当配置修改影响较大时,需要先在部分实例中生效,验证配置变更符合预期之后再推送到所有实例。

权限管理:对配置变更的权限管控,以及对审计权限的管控

版本管理&回滚:当配置变更不符合预期时,需要根据配置发布版本回滚

配置格式校验:配置数据一般会以一种配置格式存储,配置中心会对配置数据的格式进行校验,防止格式错误导致的各种问题

监听查询:当排查问题或者进行统计的时候,需要指导一个配置被哪些实例使用到,以及一个实例使用了哪些配置

多环境:生产环境中,配置中心常常需要涉及到多环境或者多集群,业务在开发环境和生产环境隔离开,或者根据不同的生产线存在多个生产环境,各环境隔离之后相互影响就小。

多集群:当对稳定性要求比较高,不允许各个环境相互影响的时候,需要将多环境通过多集群的方式进行物理隔离

常用配置中心

Apollo

spring cloud config

overall-architecture

nacos

nacos_arch.jpg

对比

spring cloud config Apollo nacos
配置界面 不支持 支持 支持
配置实时推送 支持(spring cloud bus) 支持(http长轮询) 支持(http长轮询)
版本管理 支持(git) 支持 支持
配置回滚 支持(git) 支持 支持
灰度发布 支持 支持 支持
权限管理 支持 支持 支持
多集群 支持 支持 支持
多环境 支持 支持 支持
监听查询 支持 支持 支持
多语言 java 多语言 多语言
配置格式校验 不支持 支持 支持
分布式部署 复杂 复杂 简单
数据一致性 git保证数据一致性,config service从git读取数据 数据量模拟消息队列,Apollo定时读取消息队列 http异步通知
通信协议 http、amqp http http