配置中心分析
简介
配置中心可以兼顾配置实时性、配置的流程管理、以及分布式场景的应用。
配置实时性:传统的静态配置方式想要修改某个配置,则需要修改后重启,如果想要实现动态修改,可以使用数据库,采用轮询的方式,访问数据库获得配置数据。轮询频率低的话对配置数据变更的感知就慢,频率高的话,就会消耗过多的性能。
配置管理流程:权限管理、灰度管理、版本管理、格式检验和安全配置
分布式场景:随着采用分布式开发模式,项目之间的相互引用不断增多,相互之间的调用复杂度也指数上升,需要配置中心治理。
功能
灰度发布:当配置修改影响较大时,需要先在部分实例中生效,验证配置变更符合预期之后再推送到所有实例。
权限管理:对配置变更的权限管控,以及对审计权限的管控
版本管理&回滚:当配置变更不符合预期时,需要根据配置发布版本回滚
配置格式校验:配置数据一般会以一种配置格式存储,配置中心会对配置数据的格式进行校验,防止格式错误导致的各种问题
监听查询:当排查问题或者进行统计的时候,需要指导一个配置被哪些实例使用到,以及一个实例使用了哪些配置
多环境:生产环境中,配置中心常常需要涉及到多环境或者多集群,业务在开发环境和生产环境隔离开,或者根据不同的生产线存在多个生产环境,各环境隔离之后相互影响就小。
多集群:当对稳定性要求比较高,不允许各个环境相互影响的时候,需要将多环境通过多集群的方式进行物理隔离
常用配置中心
Apollo
spring cloud config
nacos
对比
spring cloud config | Apollo | nacos | |
---|---|---|---|
配置界面 | 不支持 | 支持 | 支持 |
配置实时推送 | 支持(spring cloud bus) | 支持(http长轮询) | 支持(http长轮询) |
版本管理 | 支持(git) | 支持 | 支持 |
配置回滚 | 支持(git) | 支持 | 支持 |
灰度发布 | 支持 | 支持 | 支持 |
权限管理 | 支持 | 支持 | 支持 |
多集群 | 支持 | 支持 | 支持 |
多环境 | 支持 | 支持 | 支持 |
监听查询 | 支持 | 支持 | 支持 |
多语言 | java | 多语言 | 多语言 |
配置格式校验 | 不支持 | 支持 | 支持 |
分布式部署 | 复杂 | 复杂 | 简单 |
数据一致性 | git保证数据一致性,config service从git读取数据 | 数据量模拟消息队列,Apollo定时读取消息队列 | http异步通知 |
通信协议 | http、amqp | http | http |