Apollo简介与核心概念
2026/1/15大约 6 分钟ApolloApollo配置中心分布式配置管理灰度发布动态配置
1. 什么是配置中心
1.1 传统配置管理的痛点
在传统的单体应用中,配置通常以配置文件的形式存在于项目中,如 application.properties、application.yml 等。这种方式存在以下问题:
- 配置散落各处:每个服务都有自己的配置文件,难以统一管理
- 修改需要重启:配置修改后需要重新打包部署,影响服务可用性
- 缺乏版本管理:配置变更没有历史记录,出问题难以回滚
- 环境区分困难:开发、测试、生产环境配置容易混淆
- 安全性差:敏感配置(如数据库密码)直接暴露在代码仓库中
1.2 配置中心的作用
配置中心是一种集中化管理应用配置的服务,它能够:
- 集中管理:所有服务的配置统一存储和管理
- 动态更新:配置修改后实时推送,无需重启服务
- 版本控制:记录配置变更历史,支持快速回滚
- 环境隔离:不同环境的配置完全隔离
- 权限管理:细粒度的配置访问权限控制
2. Apollo 简介
2.1 什么是 Apollo
Apollo(阿波罗) 是携程开源的一款分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
Apollo 官方地址:
2.2 Apollo 的特性
| 特性 | 说明 |
|---|---|
| 统一管理 | 提供统一界面集中式管理不同环境、不同集群、不同命名空间的配置 |
| 配置修改实时生效 | 用户在 Apollo 修改完配置并发布后,客户端能实时接收到最新的配置 |
| 版本发布管理 | 所有的配置发布都有版本概念,可以方便地支持配置的回滚 |
| 灰度发布 | 支持配置的灰度发布,可以先在部分实例上生效,确认无误后再全量发布 |
| 权限管理 | 应用和配置的管理都有完善的权限管理机制,对配置的管理还分为编辑和发布两个环节 |
| 客户端配置信息监控 | 可以在界面上方便地看到配置在被哪些实例使用 |
| 多语言支持 | 提供了 Java 和 .Net 原生客户端,同时提供了 HTTP 接口供其他语言调用 |
2.3 Apollo 与其他配置中心对比
| 功能点 | Apollo | Nacos | Spring Cloud Config |
|---|---|---|---|
| 配置实时推送 | ✅ 支持(HTTP长轮询) | ✅ 支持(HTTP长轮询) | ❌ 需要配合Bus |
| 版本管理 | ✅ 支持 | ✅ 支持 | ✅ 支持(Git) |
| 配置回滚 | ✅ 支持 | ✅ 支持 | ✅ 支持(Git) |
| 灰度发布 | ✅ 支持 | ✅ 支持 | ❌ 不支持 |
| 权限管理 | ✅ 完善 | ✅ 支持 | ❌ 依赖Git |
| 多环境 | ✅ 支持 | ✅ 支持 | ✅ 支持 |
| 多集群 | ✅ 支持 | ✅ 支持 | ❌ 不支持 |
| 监听查询 | ✅ 支持 | ✅ 支持 | ❌ 不支持 |
| 多语言 | ✅ Java/.Net/HTTP | ✅ 多语言 | ✅ 多语言 |
| 运维成本 | 中等 | 低 | 低 |
3. Apollo 核心概念
3.1 整体架构
Apollo 的整体架构如下:
3.2 核心模块说明
Config Service(配置服务)
- 提供配置的读取、推送等功能
- 服务对象是 Apollo 客户端
- 每个环境都需要独立部署一套 Config Service
Admin Service(管理服务)
- 提供配置的修改、发布等功能
- 服务对象是 Apollo Portal(管理界面)
- 每个环境都需要独立部署一套 Admin Service
Portal(管理界面)
- 提供 Web 界面供用户管理配置
- 通过 Meta Server 获取 Admin Service 地址
- 只需要部署一套,可以管理多个环境
Client(客户端)
- 集成在应用中
- 通过 Meta Server 获取 Config Service 地址
- 支持配置的实时更新
3.3 核心概念
Application(应用)
- 每个使用 Apollo 的应用都需要有唯一的身份标识 —— AppId
- AppId 用于关联应用的配置
- 一般在
application.properties中配置:app.id=YOUR-APP-ID
Environment(环境)
Apollo 支持多环境配置管理,常见的环境有:
| 环境 | 说明 |
|---|---|
| DEV | 开发环境 |
| FAT | 功能验收测试环境 |
| UAT | 用户验收测试环境 |
| PRO | 生产环境 |
提示
环境是在运行时指定的,不是在代码中硬编码的。可以通过 JVM 参数、环境变量等方式指定。
Cluster(集群)
- 一个应用在同一个环境下可以有多个集群
- 不同集群可以有不同的配置
- 默认集群名为
default - 典型场景:不同机房使用不同的配置
Namespace(命名空间)
- 一个应用可以有多个 Namespace
- 每个 Namespace 是一组配置项的集合
- 默认的 Namespace 是
application - Namespace 分为两种类型:
- 私有类型:只能被所属应用使用
- 公共类型:可以被其他应用关联使用(配置共享)
3.4 配置发布流程
注
Apollo 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。客户端还会定时从 Apollo 配置中心服务端拉取应用的最新配置(默认每5分钟),作为兜底机制。
4. 适用场景
4.1 推荐使用 Apollo 的场景
- 微服务架构:服务数量多,配置管理复杂
- 多环境部署:需要管理开发、测试、生产等多套环境
- 配置频繁变更:需要动态调整配置而不重启服务
- 团队协作:需要配置的权限管理和审计
- 灰度发布:需要配置的灰度发布能力
4.2 不推荐使用的场景
- 单体应用:配置简单,使用配置文件即可
- 配置极少变更:配置基本不变,引入配置中心增加复杂度
- 对延迟敏感:配置推送有一定延迟(通常1秒内)
5. 总结
Apollo 是一款功能完善的分布式配置中心,具有以下核心优势:
- 配置实时生效:修改配置后秒级推送到客户端
- 版本管理与回滚:所有配置变更都有记录,可快速回滚
- 灰度发布:支持配置的灰度发布,降低风险
- 权限管理:完善的权限控制,保障配置安全
- 多环境多集群:支持复杂的部署架构
下一节我们将学习如何搭建 Apollo 服务端环境。
