Apollo日常使用规范

305 阅读5分钟

介绍

Apollo(阿波罗)是业界主流的分布式配置中心开源软件,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。




系统应用

  • Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端
  • Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
  • Eureka提供服务注册和发现,为了简单起见,目前Eureka在部署时和Config Service是在一个JVM进程中的
  • Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到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进程中



分步执行流程

  • Apollo启动后,Config/Admin Service会自动注册到Eureka服务注册中心,并定期发送保活心跳。
  • Apollo Client和Portal管理端通过配置的Meta Server的域名地址经由Software Load Balancer(软件负载均衡器)进行负载均衡后分配到某一个Meta Server
  • Meta Server从Eureka获取Config Service和Admin Service的服务信息,相当于是一个Eureka Client
  • Meta Server获取Config Service和Admin Service(IP+Port)失败后会进行重试
  • 获取到正确的Config Service和Admin Service的服务信息后,Apollo Client通过Config Service为应用提供配置获取、实时更新等功能;Apollo Portal管理端通过Admin Service提供配置新增、修改、发布等功能



Apollo 架构

业务架构

建议部署资源清单(单站为例)

角色配置数量
Portal4C8G100G2
Admin Service8C16G100G2
Config Service8C16G100G5



高可用

宕机场景影响原因
某台 Config Service 下线无影响Config Service 无状态,客户端重连其它 Config Service
所有 Config Service 下线客户端无法读取最新配置,Portal 无影响客户端重启时,可以读取本地缓存配置文件。如果是新扩容的机器,可以从其它机器上获取已缓存的配置文件
某台 Admin Service 下线无影响Admin Service 无状态,Portal 重连其它 Admin Service
所有 Admin Service 下线客户端无影响,Portal 无法更新配置 
某台 Portal 下线无影响Portal 域名通过 SLB 绑定多台服务器,重试后指向可用的服务器
全部 Portal 下线客户端无影响,Portal 无法更新配置 
某个数据中心下线无影响多数据中心部署,数据完全同步,Meta Server/Portal 域名通过 SLB 自动切换到其它存活的数据中心
数据库宕机客户端无影响,Portal 无法更新配置Config Service 开启配置缓存后,对配置的读取不受数据库宕机影响

Apollo 部署与启动

Portal 部署

修改config文件夹中的配置文件。根据实际部署配置修改数据库jdbc与meta配置项。

Admin Service 部署

修改config文件夹中的配置文件。根据实际部署配置修改数据库jdbc配置项

Config Service 部署

修改config文件夹中的配置文件。根据实际部署配置修改数据库jdbc配置项

Apollo DB配置

调整ApolloPortalDB配置,配置项统一存储在ApolloPortalDB.ServerConfig表中,也可以通过管理员工具 - 系统参数页面进行配置,无特殊说明则修改完一分钟实时生效。

无法复制加载中的内容

调整ApolloConfigDB配置,配置项统一存储在ApolloConfigDB.ServerConfig表中,需要注意每个环境的ApolloConfigDB.ServerConfig都需要单独配置,修改完一分钟实时生效。

Apollo 启动

当所有角色配置完毕,即可逐一在scripts目录,使用startup.sh进行角色启动。并且添加开机自启动。

注意:启动脚本注释了启动jvm参数,可以根据实际情况进行调整,例如Xms、Xmx等





Apollo在公司的建议使用规范

概念

appid 是什么?

appid是应用的id编号,贯穿全什么周期

应用是什么?

应用的定义是:同一套带、应用场景相同、应用对象相同,但和部署IDC与环境(prd、qa等)无关

cluster是什么?

在apollo中cluster往往用作与区分不同的idc的划分,同一个jar包启动时,引用响应的cluster参数(idc标签),即获得对应的配置参数。cluster的概念与cmdb中的group相同。

灰度是什么?

在apollo中当一组实例同时对接相同的namespace时,又希望部分服务器所获取的配置与主配置不同,用于配置全面使用前的小范围验证。此时可以开启灰度,并配置需要调整的key并且在规则中选择需要生效的服务器即可。

公共namespace是什么?

通常在日常开发中往往有些公共配置,需要在所有或部分jar中应用,此时就可使用公共namespace进行配置管理,方便配置一地更改,多应用生效的场景。最常见配置的key有:eureka、

应用

应用分为三类:

配置标准:

配置标准:

配置标准:

总结

apollo中需遵循单包单应用的一对一配置模式

业务侧配置维护在application中

运维侧配置维护在config中,例如中间件地址、db、启动端口等等

合理关联使用公共namespace

示例:

监控标准:

从1.5.0版本开始,Apollo服务端支持通过/prometheus暴露prometheus格式的metrics

亦或根据/health接口的code返回值"UP/DOWN"来确认apollo的各组件状态