配置中心的作用及地位
配置中心:分布式系统中集中化管理线上应用程序配置项的管理中心
为什么要用配置中心
本地配置缺点:
- 重启生效
- 不易维护
- 生效慢
什么时候可以选择本地配置?
- 模块单一
- 配置项集中
- 运维简单
配置中心支持功能
- 集中管控
- 版本管理
- 配置项管理
- 操作审计
- 权限控制
- 多环境支持
- 灰度发布:配置的灰度发布是配置中心比较重要的功能,当配置的变更影响比较大的时候,需要先在部分应用实例中验证配置的变更是否符合预期,然后再推送到所有应用实例
- 热发布:可以在不重新编译代码的情况下,改变程序运行逻辑、调整边界值、被调用模块路由信息等等,用来方便维护,提高工作效率一种手段
配置中心选择CP OR AP
这篇文章服务注册与发现 — 选择 CP 还是 AP? 写的比较全面,也可以适用于配置中心
开源配置中心产品:Apollo
Apollo整体架构
- Config Servicel :提供配置的读取、推送等功能
- Admin Service:提供配置的修改、发布等功能
- Portal:管理界面
调用流程
- ConfigService是一个独立的微服务,服务于Client进行配置获取。
- Client和ConfigService保持长连接,通过一种拖拉结合(push & pull)的模式,实现配置实时更新的同时,保证配置更新不丢失。
- AdminService是一个独立的微服务,服务于Portal进行配置管理。Portal通过调用AdminService进行配置管理和发布。
- ConfigService和AdminService共享ConfigDB,ConfigDB中存放项目在某个环境的配置信息。* ConfigService/AdminService/ConfigDB三者在每个环境(DEV/FAT/UAT/PRO)中都要部署一份。
Protal有一个独立的PortalDB,存放用户权限、项目和配置的元数据信息。Protal只需部署一份,它可以管理多套环境。
配置发布
- ConfigService会定时扫描 DB 中的数据,客户端也会做长轮询+定时拉取Config Service 接口配置
客户端与服务端使用长轮询方式保持一条连接,服务端此连接实现向客户端的通知推送 - 服务端挂起请求的方式达到长连接的效果,实现消息实时推送
- 客户端会发起一个Http请求到Config Service
- Config Service 不会立即返回结果,而是把请求挂起。
- 如果在60秒内没有该客户端关心的配置发布,向客户端返回304。
- 如果有该客户端关心的配置发布,组装变更通知放入http返回数据中。