配置中心
配置中心
配置中心价值
配置中心解决微服务环境下配置分散、变更困难的问题,实现配置的集中存储、动态推送和版本管理。
┌─────────────────────────────────────────┐
│ 配置中心 │
├─────────────┬─────────────┬─────────────┤
│ 配置存储 │ 动态推送 │ 版本管理 │
├─────────────┼─────────────┼─────────────┤
│ 集中管理 │ 实时生效 │ 灰度发布 │
└─────────────┴─────────────┴─────────────┘
▲ │
│ 监听配置变更 │ 推送配置
│ ▼
┌─────────────────────────────────────────┐
│ 微服务应用 │
└─────────────────────────────────────────┘
Nacos配置中心
Nacos提供配置管理和服务发现一体化方案,支持多环境配置隔离。
# Nacos配置示例
server:
port: 8080
spring:
cloud:
nacos:
config:
server-addr: nacos:8848
file-extension: yaml
group: DEFAULT_GROUP
namespace: dev
shared-configs:
- data-id: common.yaml
group: DEFAULT_GROUP
refresh: true
// 动态配置监听
@NacosValue(value = "${app.feature.enabled:false}", autoRefreshed = true)
private boolean featureEnabled;
@NacosConfigListener(dataId = "app.yaml", groupId = "DEFAULT_GROUP")
public void onConfigChanged(String config) {
log.info("配置变更: {}", config);
refreshFeatureFlags(config);
}
Apollo配置中心
Apollo专注于配置管理,提供完善的权限控制和灰度发布能力。
// Apollo配置读取
@ApolloConfig
public class ApolloConfigListener {
@ApolloConfigChangeListener("application.yml")
public void onChange(ConfigChangeEvent event) {
for (String key : event.changedKeys()) {
ConfigChange change = event.getChange(key);
log.info("配置变更: {} {} -> {}",
key, change.getOldValue(), change.getNewValue());
}
}
}
// 配置使用
@Value("${database.pool.size:10}")
private int poolSize;
@Value("${cache.ttl:300}")
private int cacheTtl;
配置灰度发布
灰度发布允许配置在部分节点生效,验证无误后全量推送。
# 灰度发布规则
grayRules:
- name: "灰度实例"
matchExpression: "instance.id in ['i-001', 'i-002']"
configItems:
- key: "feature.new-ui"
value: "true"
- name: "金丝雀"
matchExpression: "env == 'canary'"
configItems:
- key: "db.url"
value: "jdbc:mysql://canary-db:3306/app"
配置中心对比
| 特性 | Nacos | Apollo | Consul KV |
|---|---|---|---|
| 配置管理 | 内置 | 专业 | KV存储 |
| 服务发现 | 内置 | 无 | 内置 |
| 灰度发布 | 支持 | 强 | 不支持 |
| 权限控制 | 基础 | 完善 | 基础 |