← 返回首页
🔍

配置中心

📂 architecture ⏱ 1 min 188 words

配置中心

配置中心价值

配置中心解决微服务环境下配置分散、变更困难的问题,实现配置的集中存储、动态推送和版本管理。

┌─────────────────────────────────────────┐
│              配置中心                     │
├─────────────┬─────────────┬─────────────┤
│ 配置存储    │  动态推送   │  版本管理    │
├─────────────┼─────────────┼─────────────┤
│ 集中管理    │  实时生效   │  灰度发布    │
└─────────────┴─────────────┴─────────────┘
        ▲                    │
        │ 监听配置变更        │ 推送配置
        │                    ▼
┌─────────────────────────────────────────┐
│            微服务应用                     │
└─────────────────────────────────────────┘

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存储
服务发现 内置 内置
灰度发布 支持 不支持
权限控制 基础 完善 基础