前言
在分布式系统中,要改个配置涉及到很多个系统,一个一个改效率低下,吃力不讨好。用配置中心可以解决这个问题。当然配置中心有不少,以下对比的表格是照搬Apollo Wiki的。
功能点 | Apollo | Spring Cloud Config | 备注 |
---|---|---|---|
配置界面 | 一个界面管理不同环境、不同集群配置 | 无,需要通过git操作 | |
配置生效时间 | 实时 | 重启生效,或手动refresh生效 | Spring Cloud Config需要通过Git webhook,加上额外的消息队列才能支持实时生效 |
版本管理 | 界面上直接提供发布历史和回滚按钮 | 无,需要通过git操作 | |
灰度发布 | 支持 | 不支持 | |
授权、审核、审计 | 界面上直接支持,而且支持修改、发布权限分离 | 需要通过git仓库设置,且不支持修改、发布权限分离 | |
实例配置监控 | 可以方便的看到当前哪些客户端在使用哪些配置 | 不支持 | |
配置获取性能 | 快,通过数据库访问,还有缓存支持 | 较慢,需要从git clone repository,然后从文件系统读取 | |
客户端支持 | 原生支持所有Java和.Net应用,提供API支持其它语言应用,同时也支持Spring annotation获取配置 | 支持Spring应用,提供annotation获取配置 | Apollo的适用范围更广一些 |
本文采用了Apollo,然而Apollo的没有爽一点的docker镜像,所以自己写了一个docker hub、github
使用方法
- 镜像中包含configservice、adminservice、portal,默认configservice。如要更改成adminservice,则在运行参数中添加对应xxx.jar,如下
docker run chenchuxin/apollo adminservice.jar
- 要修改配置直接用环境变量,例如
docker run \
-e spring_datasource_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8 \
-e spring_datasource_username=ccx \
chenchuxin/apollo
- 一个比较完整的例子
docker run \
-e spring_datasource_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8 \
-e spring_datasource_username=root \
-e spring_datasource_password=xxx \
-e server.port=8080 \
-e logging.file=/opt/logs/configservice.log \
-v /opt/logs:/var/log/apollo \
--network host \
--restart always \
--name apollo_configservice \
chenchuxin/apollo \
configservice.jar
- 项目提供了简单的docker-compose.yml,修改成一下配置即可用
docker-compose up -d
注意
portal设置meta_server的时候,不要用环境变量设置,在运行参数用-D
设置,如
docker run chenchuxin/apollo -Ddev_meta=http://localhost:8080 portal.jar