Spring Cloud Config 是把应用原本放在本地文件的配置放到github,从而提供更好的管理、发布能力。
Spring Boot Config提供了基于应用、环境、版本(其他的配置中心缺少)的配置管理。
Spring Cloud Config 优势
- 基于应用、环境、版本三个纬度管理
- 每次提交代码,都有版本号,可以跳转到指定版本
- 配置存储支持Git
- 后端基于Git存储,有很好的版本支持
- 支持其他的存储例如本地文件、SVN等
- 与Spring 无缝集成
- 支持Spring 里面Environment和PropertySource接口
- 迁移成本低
Spring Cloud Config 缺点
- 动态配置能力弱
- 调整配置需要重新部署,添加代码比较多
- 治理能力弱
- 安全审计能力弱
- 不算严格企业级
- 适用于小型项目
深入理解Spring Cloud Config
组件介绍
组件 | 理解 |
---|---|
Config Client | 提供了基于Spring 的客户端 |
Config Server | 负责将git上的配置返回给客户端 |
Remote Git Repository | 将配置放在一个远程仓库,通过现成的git客户端来管理配置 |
Local Git Repository | Config Server 本地Git仓库;将远程仓库的配置clone到本地的临时目录 |
Config Server实现细节
![](https://img.haomeiwen.com/i13998153/3bbce205f957f0db.png)
执行流程:
1.根据客户端传递过来的应用、环境、版本信息来找到对应的Git Repository
2.在拉取到远程仓库的数据之后,切换到指定的节点
3.指定ApplicationContext名字为客户端传过来的应用名字,指定胚子文件路径为本地git目录
4.创建本地git目录,结合profile来加载指定的配置文件信息
5.从配置文件中获取配置,返回给客户端。
Config Client实现细节
必备知识
Enviroment:1) Spring 的ApplicationContext会包含一个Environment;2)Environment自身包含了很多Propertsource。
PropertySource:1)属性源;2)KV的配置;propertysource有顺序,前面的propertysource优先。
实现细节
在应用启动时,从Config Server获取配置,组成PropertySource并插入到第一个。
配置更新
配置更新分为3个阶段:
- Git 提交变更配置文件
- Config Client感知到配置更改
- 设置webhook
- Config Server接收到变化的通知,发送消息到Config Client
- Config Client接收到配置更新的消息,从而感知配置更新
- Config Client从Config Server获取到新的配置,更新注入的值
- 从Config Server获取到最新的配置
- 更新环境中的变量;调用RefreshScope.refreshAll方法并更新Bean中已经注入的值
Spring Cloud Config vs Apollo
功能点 | Apollo | Spring Cloud Config |
---|---|---|
配置界面 | 统一界面管理 | 无 |
配置生效时间 | 实时 | 重启生效/refresh/git webhook+MQ |
版本管理 | 界面操作 | 无 |
灰度发布 | 支持 | 无 |
授权/审计/审核 | 界面操作,支持修改和发布权限分离 | 需要git操作,权限无法分离 |
实例配置监控 | 看到客户端的配置 | 不支持 |
配置获取性能 | 快,DB+缓存支持 | 比较慢,git clone repo,本地文件读取 |
客户端支持 | Java,.Net,Spring Annotation | Spring应用+anotation支持 |
网友评论