转载于https://github.com/ctripcorp/apollo,by Ctrip, Inc.git
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,可以集中化管理应用不一样环境、不一样集群的配置,配置修改后可以实时推送到应用端,而且具有规范的权限、流程治理等特性,适用于微服务配置管理场景。github
服务端基于Spring Boot和Spring Cloud开发,打包后能够直接运行,不须要额外安装Tomcat等应用容器。数据库
Java客户端不依赖任何框架,可以运行于全部Java运行时环境,同时对Spring/Spring Boot环境也有额外支持。json
.Net客户端不依赖任何框架,可以运行于全部.Net运行时环境。服务器
统一管理不一样环境、不一样集群的配置markdown
配置修改实时生效(热发布)并发
版本发布管理app
灰度发布框架
权限管理、发布审核、操做审计分布式
客户端配置信息监控
提供Java和.Net原生客户端
提供开放平台API
部署简单
Apollo还提供了打包脚本,一键就能够生成全部须要的安装包,而且支持自定义运行时参数
要使用Apollo,第一步须要建立项目。
点击提交
建立成功后,会自动跳转到项目首页
项目管理员拥有如下权限:
建立项目时填写的应用负责人默认会成为项目的管理员之一,若是还须要其余人也成为项目管理员,能够按照下面步骤操做:
点击页面左侧的“管理项目”
搜索须要添加的成员并点击添加
配置权限分为编辑和发布:
项目建立完,默认没有分配配置的编辑和发布权限,须要项目管理员进行受权。
点击application这个namespace的受权按钮
分配修改权限
分配发布权限
编辑配置须要拥有这个Namespace的编辑权限,若是发现没有新增配置按钮,能够找项目管理员受权。
点击新增配置
输入配置项
点击提交
Apollo除了支持表格模式,逐个添加、修改配置外,还提供文本模式批量添加、修改。 这个对于从已有的properties文件迁移尤为有用。
切换到文本编辑模式
点击右侧的修改配置按钮
输入配置项,并点击提交修改
配置只有在发布后才会真的被应用使用到,因此在编辑完配置后,须要发布配置。
发布配置须要拥有这个Namespace的发布权限,若是发现没有发布按钮,能够找项目管理员受权。
点击“发布按钮”
填写发布相关信息,点击发布
配置发布成功后,应用就能够经过Apollo客户端读取到配置了。
Apollo目前提供Java客户端,具体信息请点击Java客户端使用文档:
若是应用使用了其它语言,也能够经过直接访问Http接口获取配置,具体能够参考其它语言客户端接入指南
若是发现已发布的配置有问题,能够经过点击『回滚』按钮来将客户端读取到的配置回滚到上一个发布版本。
这里的回滚机制相似于发布系统,发布系统中的回滚操做是将部署到机器上的安装包回滚到上一个部署的版本,但代码仓库中的代码是不会回滚的,从而开发能够在修复代码后从新发布。
Apollo中的回滚也是相似的机制,点击回滚后是将发布到客户端的配置回滚到上一个已发布版本,也就是说客户端读取到的配置会恢复到上一个版本,但页面上编辑状态的配置是不会回滚的,从而开发能够在修复配置后从新发布。
公共组件是指那些发布给其它应用使用的客户端代码,好比CAT客户端、Hermes Producer客户端等。
虽然这类组件是由其余团队开发、维护,可是运行时是在业务实际应用内的,因此本质上能够认为是应用的一部分。
一般状况下,这类组件所用到的配置由原始开发团队维护,不过因为实际应用的运行时、环境各不同,因此咱们也容许应用在实际使用时可以覆盖公共组件的部分配置。
公共组件的接入步骤,和普通应用几乎一致,惟一的区别是公共组件须要建立本身惟一的Namespace。
因此,首先执行普通应用接入文档中的如下几个步骤,而后再按照本章节后面的步骤操做。
建立Namespace须要项目管理员权限,若是发现没有添加Namespace按钮,能够找项目管理员受权。
点击页面左侧的添加Namespace
点击“建立新的Namespace”
输入公共组件的Namespace名称,须要注意的是Namespace名称全局惟一
点击提交后,页面会自动跳转到关联Namespace页面
关联成功后,页面会自动跳转到Namespace权限管理页面
点击“返回”回到项目页面
编辑配置须要拥有这个Namespace的编辑权限,若是发现没有新增配置按钮,能够找项目管理员受权。
点击新增配置
输入配置项
点击提交
这部分和普通应用一致,具体步骤请参见1.3.2 经过文本模式编辑。
配置只有在发布后才会真的被应用使用到,因此在编辑完配置后,须要发布配置。
发布配置须要拥有这个Namespace的发布权限,若是发现没有发布按钮,能够找项目管理员受权。
点击“发布按钮”
填写发布相关信息,点击发布
配置发布成功后,应用就能够经过Apollo客户端读取到配置了。
Apollo目前提供Java客户端,具体信息请点击Java客户端使用文档:
若是应用使用了其它语言,也能够经过直接访问Http接口获取配置,具体能够参考其它语言客户端接入指南
对于公共组件的配置读取,能够参考上述文档中的“获取公共Namespace的配置”部分。
前面提到,一般状况下,公共组件所用到的配置由原始开发团队维护,不过因为实际应用的运行时、环境各不同,因此咱们也容许应用在实际使用时可以覆盖公共组件的部分配置。
这里就讲一下应用如何覆盖公用组件的配置,简单起见,假设apollo-portal应用使用了hermes producer客户端,而且但愿调整hermes的批量发送大小。
进入使用公共组件的应用项目首页,点击左侧的添加Namespace按钮
找到hermes producer的namespace,并选择须要关联到哪些环境和集群
关联成功后,页面会自动跳转到Namespace权限管理页面
点击“返回”回到项目页面
点击新增配置
输入要覆盖的配置项
点击提交
配置只有在发布后才会真的被应用使用到,因此在编辑完配置后,须要发布配置。
发布配置须要拥有这个Namespace的发布权限,若是发现没有发布按钮,能够找项目管理员受权。
点击“发布按钮”
填写发布相关信息,点击发布
配置发布成功后,hermes producer客户端在apollo-portal应用里面运行时读取到的sender.batchSize的值就是1000。
在有些特殊状况下,应用有需求对不一样的集群作不一样的配置,好比部署在A机房的应用链接的es服务器地址和部署在B机房的应用链接的es服务器地址不同。
在这种状况下,能够经过在Apollo建立不一样的集群来解决。
建立集群须要项目管理员权限,若是发现没有添加集群按钮,能够找项目管理员受权。
点击页面左侧的“添加集群”按钮
输入集群名称,选择环境并提交
切换到对应的集群,修改配置并发布便可
经过上述配置,部署在SHAJQ机房的应用就会读到SHAJQ集群下的配置
若是应用还在其它机房部署了应用,那么在上述的配置下,会读到default集群下的配置。
在一些状况下,尽管应用自己不是公共组件,但仍是须要在多个AppId之间共用同一份配置,好比同一个产品的不一样项目:XX-Web, XX-Service, XX-Job等。
这种状况下若是但愿实现多个AppId使用同一份配置的话,基本概念和公共组件的配置是一致的。
具体来讲,就是在其中一个AppId下建立一个namespace,写入公共的配置信息,而后在各个项目中读取该namespace的配置便可。
若是某个AppId须要覆盖公共的配置信息,那么在该AppId下关联公共的namespace并写入须要覆盖的配置便可。
具体步骤能够参考公共组件接入指南。
经过灰度发布功能,能够实现:
下面将结合一个实际例子来描述如何使用灰度发布功能。
100004458(apollo-demo)项目有两个客户端:
灰度目标:
首先点击application namespace右上角的建立灰度
按钮。
点击肯定后,灰度版本就建立成功了,页面会自动切换到灰度版本
Tab。
点击主版本的配置
中,timeout配置最右侧的对此配置灰度
按钮
在弹出框中填入要灰度的值:3000,点击提交。
切换到灰度规则
Tab,点击新增规则
按钮
在弹出框中灰度的IP
下拉框会默认展现当前使用配置的机器列表,选择咱们要灰度的IP,点击完成。
若是下拉框中没找到须要的IP,说明机器还没从Apollo取过配置,能够点击手动输入IP来输入,输入完后点击添加按钮
注:对于公共Namespace的灰度规则,须要先指定要灰度的appId,而后再选择IP。
配置规则已经生效,不过灰度配置尚未发布。切换到配置
Tab。
再次检查灰度的配置部分,若是没有问题,点击灰度发布
。
在弹出框中能够看到主版本的值是2000,灰度版本即将发布的值是3000。填入其它信息后,点击发布。
发布后,切换到灰度实例列表
Tab,就能看到10.32.21.22已经使用了灰度发布的值。
切换到主版本
的实例列表
,会看到主版本配置只有10.32.21.19在使用了。
后面能够继续配置的修改或规则的更改。配置的修改须要点击灰度发布后才会生效,规则的修改在规则点击完成后就会实时生效。
若是灰度的配置测试下来比较理想,符合预期,那么就能够操做全量发布
。
全量发布的效果是:
我选择了不保留灰度版本,因此发布完的效果就是主版本的配置更新、灰度版本删除。点击主版本的实例列表,能够看到10.32.21.22和10.32.21.19都使用了主版本最新的配置。
若是灰度版本不理想或者不须要了,能够点击放弃灰度
。
点击主版本的发布历史
按钮,能够看到当前namespace的主版本以及灰度版本的发布历史。