前言
在分布式系統中,要改個配置涉及到很多個系統,一個一個改效率低下,吃力不討好。用配置中心可以解決這個問題。當然配置中心有不少,以下對比的表格是照搬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
