spring cloud config - downgoon/hello-world GitHub Wiki

配置中心:spring-cloud-config

spring-cloud-config 组成

  • spring-cloud-config 是什么? 答:一个配置中心,用来集中管理各个业务线的配置文件。当修改配置时,不用挨个业务服务器修改一遍,只需要通过UI界面在配置管理中心修改,然后它会分发到相关业务线。

  • 为什么要spring-cloud-config? 不用 ZK呢? 答:早前大家的确很多基于 Apache ZooKeeper来实现配置中心,它的好处是借助ZooKeeper的watcher机制,可以实现server push,动态更新配置有优势。但是ZK的麻烦在于:

  • 可视化编辑:需要实现一个基于ZK的编辑器。而 spring-cloud-config 直接支持 git 和 svn,借助它们的在线编辑和版本管理(比如开源的gitlab)。

  • 版本管理:ZK默认不支持版本管理,如需支持版本管理,通常大家会把历史数据存放到mysql里面,等版本回滚时,再把mysql里的历史数据写会ZK。而spring-cloud-config借助git的版本管理。

  • 应用客户端:应用程序中使用到配置文件,需要从ZK中读取。为了减少大家工作量,通常的做法是开发一个SDK,比如Java Spring中会开发一个基于ZK的 PropertyPlaceHolder。而 spring-cloud-config 的客户端 spring 内置了,使用起来跟本地配置是一样的(业务代码层)。可能大家担心跨平台问题,spring毕竟是JAVA的,那C应用怎么办?的确SDK部分需要C自己实现,但是配置中心是可以共用的,因为配置中心的数据接口是基于RESTful API的。

  • 动态更新:配置的动态更新并不是那么简单。普通的数值型,动态容易;但是类似JDBC连接的,动态更新会牵涉到数据库连接池的重建。这些都需要实现。而 spring-cloud-config 的客户端是跟spring ioc 容器一体的。具体需深入使用 TODO

  • spring-cloud-config 架构

spring-cloud-config arc.png

如上图所示,spring-cloud-config 由三大部件组成:

  • 配置仓库( config-repo):配置文件的实际存储地。比如git,svn或者本地磁盘文件。

  • 配置服务器(config-server):它的作用是把文件形式的转换成RESTful API 形式的。它会读取配置仓库,然后以HTTP RESTful API 形式对外提供数据访问服务。

  • 配置客户端(config-client): 它嵌入到业务线的应用程序进程内,由它负责读取配置服务器(config-server)的配置。在spring里,用户可直接通过 Enviroment 来透明使用(业务代码层跟本地配置文件一模一样)。


演示代码

配置仓库:config-repo

配置服务器:config-server

配置客户端:config-client

参考资料