Fork me on GitHub

Apollo 配置中心讲解(二)

1. Apollo 介绍

1.1 什么是 Apollo

Apollo(阿波罗) 是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

1.2 四个核心概念

概念英文说明
应用 application 配置对应的应用程序
环境 environment 配置对应的运行环境
集群 cluster 应用实例的分组
命名空间 namespace 配置的分组管理

1.3 Apollo 的主要特性

特性说明
统一管理 统一管理不同环境、不同集群的配置
操作简单 权限管理、发布审核、操作审计
灰度发布 版本发布管理,支持灰度发布
开放 API 提供开放平台 API
配置监控 客户端配置信息监控
热发布 配置修改实时生效(热发布)

2. 核心概念

2.1 配置的四个特点

① 配置是独立于程序的只读变量

配置应该与程序代码分离,作为独立的只读变量存在。

② 配置伴随应用的整个生命周期

从应用启动到运行结束,配置始终伴随应用的整个生命周期。

③ 配置可以有多种加载方式

配置支持多种加载方式,适应不同的应用场景。

④ 配置需要治理

配置需要进行规范的权限、流程治理。

2.2 四大核心概念详解

2.2.1 Application(应用)

配置对应的应用程序。每个使用 Apollo 配置管理的应用都需要在 Apollo 中注册为一个应用。

2.2.2 Environment(环境)

配置对应的环境,Apollo 客户端在运行时需要知道当前应用处于哪个环境,从而可以去获取应用的配置。

关键理解: - 我们认为环境和代码无关 - 同一份代码部署在不同的环境就应该能够获取到不同环境的配置

环境指定方式: - 默认方式:通过读取机器上的配置(server.properties 中的 env 属性)指定 - 开发方便:支持运行时通过 System Property 等指定

常见环境: - DEV(开发环境) - FAT(功能测试环境) - UAT(用户验收测试环境) - PRO(生产环境)

2.2.3 Cluster(集群)

一个应用下不同实例的分组。

典型场景: - 按照数据中心分:把上海机房的应用实例分为一个集群,把北京机房的应用实例分为另一个集群

集群的作用: - 对不同的 cluster,同一个配置可以有不一样的值,如 zookeeper 地址

集群指定方式: - 默认方式:通过读取机器上的配置(server.properties 中的 idc 属性)指定 - 支持方式:运行时通过 System Property 指定

2.2.4 Namespace(命名空间)

一个应用下不同配置的分组。

理解方式: - 可以简单地把 namespace 类比为文件 - 不同类型的配置存放在不同的文件中

典型用途: - 数据库配置文件 - RPC 配置文件 - 应用自身的配置文件等

使用方式: - 应用可以直接读取到公共组件的配置 namespace,如 DAL、RPC 等 - 应用也可以通过继承公共组件的配置 namespace 来对公共组件的配置做调整,如 DAL 的初始数据库连接数

2.3 本地缓存机制

Apollo 客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。

本地缓存路径

默认位置

系统缓存路径
Mac/Linux /opt/data/{appId}/config-cache
Windows C:\opt\data\{appId}\config-cache

注意事项: - 请确保 /opt/dataC:\opt\data\ 目录存在 - 确保应用有读写权限

本地配置文件命名格式

{appId}+{cluster}+{namespace}.properties

3. 设计原理

3.1 Apollo 架构组件

Apollo 系统由以下核心组件构成:

组件角色服务对象
Config Service 提供配置获取接口、提供配置推送接口 Apollo 客户端
Admin Service 提供配置管理接口、提供配置修改发布接口 管理界面 Portal
Portal 配置管理界面 用户
Client 为应用获取配置,支持实时更新 应用程序
Meta Server 封装 Eureka 的服务发现接口 Portal、Client
Eureka 用于服务发现和注册 Config/Admin Service
Nginx/LB 负载均衡 用户访问 Portal

3.2 各组件详细说明

A. Config Service

功能: - 提供配置获取接口 - 提供配置推送接口

服务对象:Apollo 客户端

部署方式: - 多实例、无状态部署 - 需要将自己注册到 Eureka 中并保持心跳

B. Admin Service

功能: - 提供配置管理接口 - 提供配置修改发布接口

服务对象:Apollo Portal(管理界面)

部署方式: - 多实例、无状态部署 - 需要将自己注册到 Eureka 中并保持心跳

C. Portal

功能:配置管理界面

访问方式: - 通过域名访问 Meta Server 获取 Admin Service 服务列表(IP+Port) - 直接通过 IP+Port 访问服务 - 在 Portal 侧会做 load balance、错误重试

D. Client

功能: - 为应用获取配置 - 支持实时更新

访问方式: - 通过域名访问 Meta Server 获取 Config Service 的服务列表 - 使用客户端软负载 SLB 方式调用 Config Service

E. Meta Server

角色:相当于一个 Eureka Proxy

功能: - 封装 Eureka 的服务发现接口 - Portal 通过域名访问 Meta Server 获取 Admin Service 的地址列表 - Client 通过域名访问 Meta Server 获取 Config Service 的地址列表

部署方式:逻辑角色,和 Config Service 住在一起部署

F. Eureka

功能:用于服务发现和注册

工作机制: - Config/Admin Service 注册实例并定期报心跳 - 和 Config Service 住在一起部署

G. Nginx/LB

功能: - 和域名系统配合,协助 Portal 访问 Meta Server 获取 Admin Service 地址列表 - 和域名系统配合,协助 Client 访问 Meta Server 获取 Config Service 地址列表 - 和域名系统配合,协助用户访问 Portal 进行配置管理

3.3 架构设计要点

3.3.1 服务发现机制

Config Service 和 Admin Service
        ↓
    注册到 Eureka(保持心跳)
        ↓
    Meta Server 封装服务发现接口
        ↓
Portal/Client 通过域名访问 Meta Server
        ↓
    获取服务列表(IP+Port)
        ↓
    直接通过 IP+Port 访问服务(客户端软负载)

3.3.2 高可用设计

  1. 多实例部署:Config Service 和 Admin Service 都是多实例、无状态部署
  2. 服务注册:将自己注册到 Eureka 中并保持心跳
  3. 客户端软负载:使用 SLB 方式调用服务
  4. 错误重试:Portal 侧会做 load balance、错误重试
  5. 本地缓存:客户端本地缓存配置,服务不可用时从本地恢复

4. 实践操作

本章节主要介绍 Apollo 配置中心的实际使用方法和操作步骤。

注:原 PPT 中此章节为过渡页,具体操作可参考 Apollo 官方文档。

4.1 基本使用流程

  1. 注册应用:在 Portal 中创建应用
  2. 配置环境:设置不同环境的配置
  3. 创建集群:按数据中心或业务需求创建集群
  4. 管理命名空间:创建和管理不同类型的配置
  5. 发布配置:审核并发布配置
  6. 客户端接入:应用集成 Apollo 客户端

4.2 配置管理最佳实践

  • 合理划分命名空间,按功能模块分离配置
  • 使用灰度发布功能,降低配置变更风险
  • 充分利用权限管理和操作审计功能
  • 定期备份重要配置

5. 其他

5.1 常见问题

Q1: 配置修改后多久生效?

:Apollo 支持配置实时推送,配置发布后通常在秒级内推送到客户端。

Q2: 如何保证配置的安全性?

: - 使用权限管理控制访问 - 发布审核确保配置变更可控 - 操作审计追踪所有变更

Q3: Apollo 适合什么场景?

:适用于微服务配置管理场景,特别是需要: - 集中化管理配置 - 多环境、多集群配置 - 配置实时生效 - 规范的权限和流程治理

5.2 与同类产品对比

特性ApolloSpring Cloud ConfigZooKeeper
配置实时推送 ✅ 支持 ⚠️ 需配合 Bus ⚠️ 需监听
管理界面 ✅ 完善 ⚠️ 简单 ❌ 无
权限管理 ✅ 完善 ⚠️ 基础 ⚠️ 基础
灰度发布 ✅ 支持 ❌ 不支持 ❌ 不支持
配置历史版本 ✅ 支持 ⚠️ 依赖 Git ❌ 不支持

 

参考资源

posted @ 2026-03-27 22:37  JackpotHan  阅读(6)  评论(0)    收藏  举报