nacos笔记
Nacos 是什么?
一句话:Nacos 就是注册中心[替代Eureka]+配置中心[替代Config] , (Nacos:Dynamic Naming and Configuration Service)
Nacos:架构理论基础:CAP理论 (支持AP和CP, 可以切换)

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 下载&运行
解压,运行bin/sdtartup.cmd
打开浏览器输入http://localhost:8848/nacos/#/login如果能看到以下画面代表启动成功
注册服务到Nacos
修改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>在appication加入:
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置nacos server的地址
application:
name: cbhliving_commodity在主启动类加上注解
@EnableDiscoveryClient
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
public class CbhCommodityApplication {
public static void main(String[] args) {
SpringApplication.run(CbhCommodityApplication.class , args);
}
}启动该服务查看nacos注册中心的服务列表(观察是否存在服务名为cbhliving_commodity的服务)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 HuGo!