配置中心伴随着这几年分布式系统演变和微服务架构的兴起,已经成为必不可少的需求之一。试下一下若是哪天公司的全部应用服务,从公司服务器迁移到云服务,成千上万的配置,修改起来是多么耗时费劲的事(咱们公司就是……)。html
配置中心主要有如下特色:java
修改配置不须要从新发布配置文件,并且能够复用,同一个的配置只须要修改一次,省时省力。经过后台统一管理,修改、查看,部分产品还支持配置版本管理。mysql
首先是支持国产,同时在遇到问题也能够良好的和国人交流沟通。其次功能很全,知足公司的全部须要,不须要二次开发。git
阿波罗的功能很是强大,几乎知足通常的分布式系统的使用要求,重点主要以下:github
强大的功能,必然伴随少量缺点:web
官方文档说明部署简单,我认为否则,依赖jdk1.8,(我试了1.9部署Quick Start版本失败了),mysql,脚本须要本身导入,在windows平台还须要gitbash。sql
总的来讲利大于弊,仍是值得去使用的。数据库
注意jdk的环境变量配置
在刚下载apollo-build-scripts里sql目录下的两个脚本导入到mysql里
apolloconfigdb.sql
apolloportaldb
编辑demo.sh,在apollo-build-scripts文件夹找到下面的配置项,修改成对应的数据库信息
# apollo config db info apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8 apollo_config_db_username=root apollo_config_db_password=123456789 # apollo portal db info apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8 apollo_portal_db_username=root apollo_portal_db_password=123456789
启动
切换到刚下载的apollo-build-scripts目录下。 注意是git方式的执行,跟cmd不同的
/c/apollo-build-scripts-master/demo.sh start

==== starting service ==== Service logging file is ./service/apollo-service.log Started [10768] Waiting for config service startup....... Config service started. You may visit http://localhost:8080 for service status now! Waiting for admin service startup.... Admin service started ==== starting portal ==== Portal logging file is ./portal/apollo-portal.log Started [10846] Waiting for portal startup...... Portal started. You can visit http://localhost:8070 now!
若是控制台输出以上为启动成功
输入浏览器输入http://localhost:8070
帐号:apollo
密码:admin
能够见到默认的有一个Sample App项目,点进去,就能够见到下图
Apollo客户端依赖于AppId
,Environment
等环境信息来工做,因此请确保阅读下面的说明而且作正确的配置:
AppId是应用的身份信息,是从服务端获取配置的一个重要信息。
请确保在app.config或web.config有AppID的配置,其中内容形如:
<?xml version="1.0"?> <configuration> <appSettings> <!-- Change to the actual app id --> <add key="AppID" value="SampleApp"/>
</appSettings> </configuration>
注:app.id是用来标识应用身份的惟一id,格式为string。
Apollo支持应用在不一样的环境有不一样的配置,因此Environment是另外一个从服务器获取配置的重要信息。
Environment经过配置文件来指定,文件位置为C:\opt\settings\server.properties
,文件内容形如:
env=DEV
目前,env
支持如下几个值(大小写不敏感):
Apollo客户端针对不一样的环境会从不一样的服务器获取配置,因此请确保在app.config或web.config正确配置了服务器地址(Apollo.{ENV}.Meta),其中内容形如:
<?xml version="1.0"?> <configuration> <appSettings> <!-- Change to the actual app id --> <add key="AppID" value="SampleApp"/> <!-- Should change the apollo config service url for each environment --> <add key="Apollo.DEV.Meta" value="http://localhost:8080"/> <add key="Apollo.FAT.Meta" value="http://localhost:8080"/> <add key="Apollo.UAT.Meta" value="http://localhost:8080"/> <add key="Apollo.PRO.Meta" value="http://localhost:8080"/> </appSettings> </configuration>
Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。
本地缓存路径位于C:\opt\data\{appId}\config-cache
,因此请确保C:\opt\data\
目录存在,且应用有读写权限。
Cluster(集群)
Apollo支持配置按照集群划分,也就是说对于一个appId和一个环境,对不一样的集群能够有不一样的配置。
若是须要使用这个功能,你能够经过如下方式来指定运行时的集群:
经过App Config
经过配置文件
C:\opt\settings\server.properties
在目标机器上存在
idc=xxx
Cluster Precedence(集群顺序)
若是Apollo.Cluster
和idc
同时指定:
Apollo.Cluster
指定的集群加载配置idc
指定的集群加载配置default
)加载若是只指定了Apollo.Cluster
:
Apollo.Cluster
指定的集群加载配置default
)加载若是只指定了idc
:
idc
指定的集群加载配置default
)加载若是Apollo.Cluster
和idc
都没有指定:
default
)加载配置启动控制台程序
此时返回控制台程序查看
这个时候咱们经过监听程序监听到配置在后台被修改了,同时能获取到最新配置值
从上图看到,阿波罗配置更新具有推和拉两种方式,在后台修改并发布后,会及时将配置推给客户端,假如没推成功,客户端会经过后台线程定时更新。
若是客户端与服务端发生了网络分区,此时能够经过客户端获取本地文件缓存的配置数据,让系统正常运做。
缓存数据默认存储在C:\opt\data
从以上来看,阿波罗在可用性设计上仍是很不错的。
客户端 demo下载
只展现了.net环境使用 其余语言 扩展 https://github.com/ctripcorp/apollo