Nacos 服务发现与配置

某团队在微服务架构升级时,将服务注册中心从 Eureka 切换到 Nacos。

切换的原因:

  1. Eureka 2.0 已停止维护,官方推荐迁移到 Nacos
  2. Nacos 同时支持服务发现和配置管理,减少了组件依赖
  3. Nacos 支持 CP/AP 双模式,可以根据场景灵活切换

切换后,团队发现 Nacos 的服务发现性能比 Eureka 高 3 倍,配置变更推送比 ZooKeeper 快 50%。

【架构权衡】 Nacos 是阿里巴巴开源的服务发现和配置管理平台,它的核心优势是"一站式"和"高性能"。但它也带来了运维复杂度——需要维护 Nacos 集群的稳定性。


一、核心问题 🔴

1.1 Nacos 双模式

Nacos 的 CP/AP 双模式:

CP 模式(ZooKeeper / etcd):
├─ Leader-based 一致性协议
├─ 写入需要多数派确认
├─ 适合:配置管理、服务注册(一致性优先)
└─ 使用 Raft 协议

AP 模式(Eureka):
├─ 去中心化最终一致
├─ 写入无需同步确认
├─ 适合:服务发现(可用性优先)
└─ 使用 Distro 协议

1.2 Distro 协议

Distro 协议(Nacos 的 AP 模式):

原理:
1. 每个节点负责一部分数据
2. 数据异步同步到其他节点
3. 读取可以在任意节点进行

数据分片:
├─ 节点A:负责 /service/a, /service/b
├─ 节点B:负责 /service/c, /service/d
└─ 节点C:负责 /service/e, /service/f

注册流程:
1. Client 注册到任意节点
2. 该节点负责写入
3. 异步同步到其他节点

二、方案实现

2.1 服务注册与发现

# application.yml
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.1.100:8848,192.168.1.101:8848,192.168.1.102:8848
        namespace: ${NACOS_NAMESPACE}
        group: ${NACOS_GROUP}
        cluster-name: DEFAULT
// 服务实例元数据
@Configuration
public class NacosServiceMeta {
    @Bean
    public NacosServiceMetadata serviceMetadata() {
        NacosServiceMetadata metadata = new NacosServiceMetadata();
        metadata.setWeight(100);
        metadata.putMetadata("version", "v1");
        metadata.putMetadata("region", "us-east-1");
        return metadata;
    }
}

2.2 配置管理

// Nacos 配置中心
@Service
public class NacosConfigService {

    @NacosConfigurationProperties(dataId = "order-service.yaml", autoRefreshed = true)
    public class OrderConfig {
        private int maxRetries = 3;
        private int timeoutMs = 5000;
        // getters and setters
    }

    @Autowired
    private ConfigService configService;

    @NacosConfigListener(dataId = "order-service.yaml")
    public void onConfigChange(String config) {
        log.info("配置变更: {}", config);
        // 重新加载配置
    }
}

【架构权衡】 Nacos 的核心优势是"同时支持服务发现和配置管理",减少了微服务架构的组件数量。但这也意味着 Nacos 集群必须高可用,否则服务发现和配置管理都会受影响。

三、工程代价评估

维度评估
组件复杂度低(一站式替代多个组件)
运维复杂度中(需要维护 Nacos 集群)
性能
一致性CP/AP 可选
适用场景服务发现 + 配置管理

四、落地 Checklist

  • 集群部署:Nacos 集群至少 3 节点
  • 数据持久化:配置 MySQL 持久化
  • 权限控制:配置 Nacos 权限认证
  • 监控部署:监控 Nacos 集群健康状态