简介
Apollo (阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用的不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
总体架构
Eureka:注册中心 ,在部署时和Config Service和Meta Service在一个JVM进程中
Meta Server:在Eureka上封装的一层服务发现接口
Client:向Meta Service获取Config Service服务
Config Service:只提供配置的读取,面向Client提供服务
Portal:向Meta Service获取Admin Service服务
Admin Service:提供配置修改、发布等接口,面向Portal(管理端)提供服务
架构图如下:
核心概念
Apollo支持4个维度管理Key-Value格式的配置:
- application(应用)
- environment(环境)
- DEV(开发环境)
- FAT(功能测试)
- UAT(用户测试)
- PRO(生产环境)
- cluster(集群)
- namespace(命名空间)
主界面如下
应用详情界面如下
概念对应如下图
实现原理
- 客户端和服务端保持一个长连接,保持60s,如果Apollo的配置有客户端关心的配置更新,就会告知变化的namespace,客户端会根据此拉取对应namespace最新配置,保存在内存中,并在本地缓存一份,防止服务不可用的情况
- 如果60s内没有客户端关心的配置信息变化,会返回HTTP状态码304(Not Modified)给客户端
客户端收到服务端响应后会重新发起请求连接 - 因为会有数万的客户端向服务器发起长链接,所以在服务端使用了ASync Servlet来服务长连接请求
为了防止推送机制失效导致配置不更新,客户端还会定时(默认5min)从Apollo配置中心中拉取应用最新配置,可以通过指定apollo.refreshinterval覆盖默认配置,单位为分钟。
原理图如下
本地缓存
本地缓存路径默认位于以下路径,所以请确保/opt/data或C:\opt\data\目录存在,且应用有读写权限。
- Mac/Linux:/opt/data/{appId}/config-cache/{appId}+{cluster}+{namespace}.properties
- Windows:C:\opt\data{appId}\config-cache**{appId}+{cluster}+{namespace}.properties**