Nacos 是什么?

一句话:Nacos 就是注册中心[替代Eureka]+配置中心[替代Config] , (Nacos:Dynamic Naming and Configuration Service)

Nacos:架构理论基础:CAP理论 (支持AP和CP, 可以切换)

https://cbhliving.oss-cn-guangzhou.aliyuncs.com/blog/capimg.jpeg

Nacos对比Zookeeper和Eureka

一、一致性协议与架构设计

1.Nacos

  • Cap模式:支持 AP(高可用性)和 CP(数据一致性)模式的动态切换。默认采用 AP 模式,适合服务发现场景;当需要强一致性时(如配置管理),可通过 Raft 协议切换至 CP 模式
  • 连接方式:基于 Netty 长连接,支持服务列表变更的实时推送,减少客户端轮询开销

2.Zookeeper

  • CAP 模式:严格遵循 CP 模式,通过 ZAB 协议保证数据强一致性,但在网络分区或 Leader 选举期间(30-120 秒)服务不可用,牺牲了可用性
  • 数据模型:基于树形节点(ZNode)存储服务信息,依赖临时节点实现服务上下线自动感知

3.Eureka

  • CAP 模式:纯 AP 模式,通过去中心化架构(Peer-to-Peer)保证高可用性,但数据一致性较弱,可能出现短暂的服务列表不一致
  • 自我保护机制:在心跳异常时暂停剔除服务实例,避免因网络抖动导致服务误判下线

二、功能特性对比

特性 Nacos Zookeeper Eureka
服务健康检查 支持 TCP/HTTP/MySQL 等多种方式,区分临时实例(心跳检测)和永久实例(服务端主动探测) 基于临时节点的会话心跳检测 仅依赖客户端心跳上报
动态配置管理 集成配置中心,支持配置实时推送 需自行实现(如监听节点变化) 不支持
负载均衡 内置权重、元数据筛选策略 无原生支持,需结合其他工具 依赖 Ribbon 客户端负载均衡
多数据中心支持 支持跨注册中心同步服务信息 不支持 不支持
生态集成 兼容 Spring Cloud、Dubbo、K8s 主要用于 Dubbo、Hadoop 生态 与 Spring Cloud 深度绑定

三、适用场景

1.Nacos

  • 推荐场景:需要同时管理服务注册与动态配置的微服务架构;对高可用性和一致性有灵活需求的云原生系统
  • 典型案例:电商平台的多服务协调、Kubernetes 环境下的服务治理。

2.Zookeeper

  • 推荐场景:强一致性要求的分布式协调场景(如分布式锁、配置管理),或传统 Dubbo 框架的注册中心
  • 局限:注册中心功能需自行封装,不适合纯服务发现的轻量级需求

3.Eureka

  • 推荐场景:Spring Cloud 生态下的纯服务发现场景,追求快速集成和简单运维
  • 局限:功能单一,无配置管理,且 Netflix 已停止维护,社区活跃度下降

四、性能与部署

  • 性能:

​ Nacos 支持百万级服务实例注册,吞吐量优于 Zookeeper(受限于 ZAB 协议)和 Eureka(实例规模超 5000 时可能不稳定)

  • 部署复杂度

​ Nacos 和 Eureka 支持单机/集群快速部署;Zookeeper 需手动配置集群和 Leader 选举,运维成本较高

总结

  • Nacos 是功能最全面的现代注册中心,适合复杂微服务架构;
  • Zookeeper 更适合强一致性要求的分布式协调场景;
  • Eureka 在 Spring Cloud 生态中简单易用,但功能单一且逐步被替代。

根据业务需求选择:优先 Nacos(综合需求)、Zookeeper(强一致性协调)、Eureka(遗留 Spring Cloud 系统)。

Nacos 下载&运行

  1. 下载: https://github.com/alibaba/nacos/releases/tag/1.2.1

  2. 解压,运行bin/sdtartup.cmd

  3. 打开浏览器输入http://localhost:8848/nacos/#/login如果能看到以下画面代表启动成功

注册服务到Nacos

  1. 修改pom文件(父项目和本项目)

     <!--在父项目统一加入spring-cloud-alibaba 依赖-->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.1.0.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
    <!-- 在微服务模块引入nacos-discovery starter-->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
  2. 在appication加入:

    spring:
    cloud:
    nacos:
    discovery:
    server-addr: localhost:8848 #配置nacos server的地址
    application:
    name: cbhliving_commodity
  3. 在主启动类加上注解@EnableDiscoveryClient

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    @EnableDiscoveryClient
    @SpringBootApplication
    public class CbhCommodityApplication {
    public static void main(String[] args) {
    SpringApplication.run(CbhCommodityApplication.class , args);
    }
    }
  4. 启动该服务查看nacos注册中心的服务列表(观察是否存在服务名为cbhliving_commodity的服务)