本文内容总结分布式配置Apollo的应用场景以及基本概念
以下:
官方文档请看https://github.com/ctripcorp/apollo/wiki
简介
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。在程序开发中封装了很多操作,便于提高代码的开发效率。
Apollo支持4个维度管理Key-Value格式的配置:
- application (应用)
- environment (环境)
- cluster (集群)
- namespace (命名空间)
Application
可以理解为不同的项目,比如展示项目、管理平台项目、权限系统项目等
Environment
可以理解为DEV、FAT、BATE等,不同环境可以设置不同的配置
Cluster
通过添加集群,可以使同一份程序在不同的集群(如不同的数据中心)使用不同的配置
Tips
如果不同集群使用一样的配置,则没有必要创建集群
在这里创建的集群名字需要和机器上server.properties中的idc属性一致
Namespace
可以理解为类似于一个Springboot里配置文件的概念,在创建一个Application的时候会默认创建一个application的namespace,对应的就是Springboot项目中的application.yml配置文件,一个Application中可以定义多个配置文件也是日常开发中经常遇到的事情。
Namespace的获取权限分为两种:
- private (私有的)
- public (公共的)
这里的获取权限是相对于Apollo客户端来说的。private权限的Namespace,只能被所属的应用获取到。一个应用尝试获取其它应用private的Namespace,Apollo会报“404”异常。public权限的Namespace,能被任何应用获取。
各模块概要介绍
Config Service
- 提供配置获取接口
- 提供配置更新推送接口(基于Http long polling)
- 服务端使用Spring DeferredResult实现异步化,从而大大增加长连接数量
- 目前使用的tomcat embed默认配置是最多10000个连接(可以调整),使用了4C8G的虚拟机实测可以支撑10000个连接,所以满足需求(一个应用实例只会发起一个长连接)。
- 接口服务对象为Apollo客户端
Admin Service
- 提供配置管理接口
- 提供配置修改、发布等接口
- 接口服务对象为Portal
Meta Server
- Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port)
- Client通过域名访问Meta Server获取Config Service服务列表(IP+Port)
- Meta Server从Eureka获取Config Service和Admin Service的服务信息,相当于是一个Eureka Client
- 增设一个Meta Server的角色主要是为了封装服务发现的细节,对Portal和Client而言,永远通过一个Http接口获取Admin Service和Config Service的服务信息,而不需要关心背后实际的服务注册和发现组件
- Meta Server只是一个逻辑角色,在部署时和Config Service是在一个JVM进程中的,所以IP、端口和Config Service一致
Eureka
- 基于Eureka和Spring Cloud Netflix提供服务注册和发现
- Config Service和Admin Service会向Eureka注册服务,并保持心跳
- 为了简单起见,目前Eureka在部署时和Config Service是在一个JVM进程中的(通过Spring Cloud Netflix)
Portal
- 提供Web界面供用户管理配置
- 通过Meta Server获取Admin Service服务列表(IP+Port),通过IP+Port访问服务
- 在Portal侧做load balance、错误重试
Client
- Apollo提供的客户端程序,为应用提供配置获取、实时更新等功能
- 通过Meta Server获取Config Service服务列表(IP+Port),通过IP+Port访问服务
- 在Client侧做load balance、错误重试
可用性评估
场景 | 影响 | 原因 | |
---|---|---|---|
某台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开启配置缓存后,对配置的读取不受数据库宕机影响 |