简介

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高可用架构 apollo框架_本地缓存

核心概念

Apollo支持4个维度管理Key-Value格式的配置:

  • application(应用)
  • environment(环境)
  • DEV(开发环境)
  • FAT(功能测试)
  • UAT(用户测试)
  • PRO(生产环境)
  • cluster(集群)
  • namespace(命名空间)

主界面如下

apollo高可用架构 apollo框架_本地缓存_02


应用详情界面如下

apollo高可用架构 apollo框架_客户端_03


概念对应如下图

apollo高可用架构 apollo框架_本地缓存_04

实现原理

  • 客户端和服务端保持一个长连接,保持60s,如果Apollo的配置有客户端关心的配置更新,就会告知变化的namespace,客户端会根据此拉取对应namespace最新配置,保存在内存中,并在本地缓存一份,防止服务不可用的情况
  • 如果60s内没有客户端关心的配置信息变化,会返回HTTP状态码304(Not Modified)给客户端
    客户端收到服务端响应后会重新发起请求连接
  • 因为会有数万的客户端向服务器发起长链接,所以在服务端使用了ASync Servlet来服务长连接请求
    为了防止推送机制失效导致配置不更新,客户端还会定时(默认5min)从Apollo配置中心中拉取应用最新配置,可以通过指定apollo.refreshinterval覆盖默认配置,单位为分钟。

原理图如下

apollo高可用架构 apollo框架_开发语言_05

本地缓存

本地缓存路径默认位于以下路径,所以请确保/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**