Apollo高级特性
2026/1/15大约 5 分钟ApolloApollo高级特性分布式配置中心配置管理灰度发布动态配置
1. 配置访问密钥
1.1 为什么需要访问密钥
默认情况下,Apollo 客户端只需要知道 AppId 就可以获取配置,这在某些场景下可能存在安全风险。访问密钥(Access Key)可以增加一层安全保护。
1.2 开启访问密钥
- 在 Portal 中进入应用管理页面
- 点击「管理密钥」
- 点击「创建密钥」
- 复制生成的密钥
1.3 客户端配置密钥
apollo:
access-key:
secret: your-access-key-secret或者通过 JVM 参数:
java -Dapollo.access-key.secret=your-access-key-secret -jar your-app.jar注意
访问密钥一旦开启,所有客户端都必须配置正确的密钥才能获取配置。
2. 配置文件格式
2.1 支持的格式
| 格式 | Namespace 命名 | 说明 |
|---|---|---|
| Properties | xxx 或 xxx.properties | 默认格式 |
| YAML | xxx.yaml 或 xxx.yml | 支持层级结构 |
| JSON | xxx.json | JSON 格式 |
| XML | xxx.xml | XML 格式 |
| TXT | xxx.txt | 纯文本 |
2.2 YAML 格式配置
创建 datasource.yml Namespace:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo
username: root
password: 123456
hikari:
minimum-idle: 5
maximum-pool-size: 20
idle-timeout: 30000
connection-timeout: 30000客户端使用:
apollo:
bootstrap:
namespaces: application,datasource.yml2.3 JSON 格式配置
创建 feature-config.json Namespace:
{
"features": {
"newUI": {
"enabled": true,
"percentage": 50
},
"darkMode": {
"enabled": false
}
}
}读取 JSON 配置:
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
import com.fasterxml.jackson.databind.ObjectMapper;
@Service
public class FeatureConfigService {
private final ObjectMapper objectMapper = new ObjectMapper();
public FeatureConfig getFeatureConfig() {
Config config = ConfigService.getConfig("feature-config.json");
String content = config.getProperty("content", "{}");
return objectMapper.readValue(content, FeatureConfig.class);
}
}3. 公共配置继承
3.1 公共配置设计
公共配置适合存放多个应用共享的配置:
3.2 关联公共配置
应用关联公共 Namespace 后,可以:
- 直接使用公共配置
- 在应用中覆盖公共配置
# 应用配置(会覆盖公共配置中的同名配置)
spring.datasource.url=jdbc:mysql://app-specific-db:3306/demo3.3 配置优先级
4. 配置发布审核
4.1 开启发布审核
Apollo 支持配置发布前的审核流程:
- 进入「系统参数」页面
- 找到
config-service.cache.enabled配置 - 开启审核功能
4.2 审核流程
4.3 配置审核权限
在权限管理中配置:
- 编辑权限:可以修改配置,提交审核
- 审核权限:可以审核配置变更
- 发布权限:可以发布已审核的配置
5. Open API
5.1 API 概述
Apollo 提供了 Open API,支持通过 HTTP 接口管理配置:
| API | 说明 |
|---|---|
| 获取配置 | 获取指定 Namespace 的配置 |
| 修改配置 | 修改配置项 |
| 发布配置 | 发布配置变更 |
| 回滚配置 | 回滚到指定版本 |
5.2 创建 Token
- 进入「开放平台授权管理」
- 创建第三方应用
- 获取 Token
5.3 API 调用示例
获取配置
curl -H "Authorization: your-token" \
"http://portal-url/openapi/v1/envs/DEV/apps/demo-service/clusters/default/namespaces/application"修改配置
curl -X POST \
-H "Authorization: your-token" \
-H "Content-Type: application/json" \
-d '{
"key": "app.timeout",
"value": "5000",
"comment": "修改超时时间",
"dataChangeCreatedBy": "apollo"
}' \
"http://portal-url/openapi/v1/envs/DEV/apps/demo-service/clusters/default/namespaces/application/items"发布配置
curl -X POST \
-H "Authorization: your-token" \
-H "Content-Type: application/json" \
-d '{
"releaseTitle": "发布配置",
"releaseComment": "修改超时时间",
"releasedBy": "apollo"
}' \
"http://portal-url/openapi/v1/envs/DEV/apps/demo-service/clusters/default/namespaces/application/releases"6. 配置迁移
6.1 从 Spring Cloud Config 迁移
迁移步骤:
- 导出现有配置
# 从 Git 仓库导出配置
git clone your-config-repo创建 Apollo 应用和 Namespace
导入配置到 Apollo
- 使用 Portal 手动导入
- 使用 Open API 批量导入
修改应用依赖
<!-- 移除 Spring Cloud Config -->
<!-- <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency> -->
<!-- 添加 Apollo -->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>2.1.0</version>
</dependency>- 修改配置文件
# 移除 Spring Cloud Config 配置
# spring:
# cloud:
# config:
# uri: http://config-server:8888
# 添加 Apollo 配置
app:
id: your-app-id
apollo:
meta: http://apollo-config-service:8080
bootstrap:
enabled: true6.2 从 Nacos Config 迁移
迁移步骤类似,主要是配置格式的转换。
7. 多数据中心部署
7.1 架构设计
7.2 配置同步
多数据中心之间的配置同步方案:
- Portal 统一管理:通过 Portal 同时管理多个数据中心
- 数据库同步:使用数据库主从复制
- API 同步:使用 Open API 实现配置同步
8. 性能优化
8.1 客户端优化
配置本地缓存
apollo:
cache-dir: /opt/apollo-cache # 自定义缓存目录调整轮询间隔
apollo:
refresh-interval: 5 # 配置刷新间隔(分钟),默认5分钟8.2 服务端优化
Config Service 优化
# 增加线程池大小
server.tomcat.max-threads=400
# 调整长轮询超时时间
apollo.long-polling-timeout=60000数据库优化
-- 添加索引
CREATE INDEX idx_app_id ON App(AppId);
CREATE INDEX idx_namespace ON Namespace(AppId, ClusterName, NamespaceName);8.3 高可用配置
# Config Service 高可用
# 部署多个实例,通过负载均衡访问
# 客户端配置多个 Meta Server
apollo:
meta: http://meta1:8080,http://meta2:8080,http://meta3:80809. 监控与告警
9.1 健康检查
Config Service 健康检查接口:
curl http://config-service:8080/health9.2 Prometheus 监控
Apollo 支持 Prometheus 监控指标:
# 开启 Prometheus 端点
management:
endpoints:
web:
exposure:
include: prometheus,health9.3 关键监控指标
| 指标 | 说明 |
|---|---|
apollo_client_configs | 客户端配置数量 |
apollo_client_namespace_not_found | Namespace 未找到次数 |
apollo_config_service_qps | Config Service QPS |
apollo_long_polling_clients | 长轮询客户端数量 |
10. 总结
本节我们学习了 Apollo 的高级特性:
- 访问密钥:增强配置访问安全性
- 多种配置格式:支持 Properties、YAML、JSON 等
- 公共配置继承:实现配置复用
- 发布审核:配置变更的审核流程
- Open API:通过 API 管理配置
- 配置迁移:从其他配置中心迁移
- 多数据中心:支持多数据中心部署
- 性能优化:客户端和服务端优化
- 监控告警:配置监控和告警
下一节我们将深入学习 Apollo 的实现原理。
