Apollo(阿波罗)【Github】【Gitee】是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
名词解释
appId-》env-》cluster-》namespace
appId
环境
开发、测试和生产等环境,是一个标签概念,不同环境可以有不同的配置项
(1) JVM system property ‘env’,
1 |
|
(2) OS env variable ‘ENV’ nor
1 |
|
(3) property ‘env’ from the properties InputStream.
集群
集群,可以简单的理解为不同的数据中心。环境下可以有不同的集群,默认值default。
namespace
配置项的集合。类似spring boot的application.properties,可以把application理解为namespace。Apollo默认为每个应用创建一个叫application的namespace,application也是默认的namespace,一般一个namespace够用了。
namespace分private和public,private代表项目专用,public代表所有项目都可以公用。
还有关联公共namespace
,用于覆盖公共namespace。
格式,properties、xml、json、yml、yaml等
灰度
可以按照ip发布(private)或AppId和ip(public)发布
总体设计
上图简要描述了Apollo的总体设计,我们可以从下往上看:
- Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端
- Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
- Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳【apolloconfig数据库配置eureka地址列表】
- 在Eureka之上我们架了一层Meta Server用于封装Eureka的服务发现接口
- Client通过域名访问Meta Server获取Config Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Client侧会做load balance、错误重试
- Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试
- 为了简化部署,我们实际上会把Config Service、Eureka和Meta Server三个逻辑角色部署在同一个JVM进程中
admin service默认端口8090
config service默认端口8080,一方面是提供meta server服务(利用负载均衡),一方面是Eureka服务
portal默认端口8070
安装
SQL脚本:scripts\db\migration\configdb\V1.0.0__initialization.sql
和scripts\db\migration\portaldb\V1.0.0__initialization.sql
- 1、新建数据库和表
- 2、修改admin、config和portal应用连接数据库的参数
- 3、修改config数据库eureka地址
- 4、修改portal应用env配置和portal数据库env配置
客户端设计
客户端接入(Spring Boot)
添加apollo-client依赖
1 |
|
配置Apollo信息
app.id联系管理员申请,备注:如下配置是使用local环境配置,可以根据需要修改apollo.meta对应的地址。
application.yml
1 |
|
或者application.properties
1 |
|
环境变量
针对其他非local环境,dev、fat和uat可以使用操作系统环境变量定义,pro可以使用shell脚本里面定义。
dev
1 |
|
fat
1 |
|
pro
1 |
|
手动接收配置变化通知
监听配置变化事件只在应用真的关心配置变化,需要在配置变化时得到通知时使用,比如:数据库连接串变化后需要重建连接等。
1 |
|
ConfigChangeListener
1 |
|
备注:如果只是希望每次都取到最新的配置的话,调用config.getProperty即可。
1 |
|
Q&A
不指定env
如果不指定env,则由连接的meta.server决定env,env和meta.server是一一对应的
1 |
|