要理解 Nacos,需先明确其定位,再对比 Eureka 差异,最后拆解核心原理,具体分析如下:
一、Nacos 是什么?
Nacos 是阿里开源的动态服务发现、配置管理和服务治理平台,核心目标是“一站式解决微服务中的服务注册发现、配置中心、动态 DNS 三大问题”,支持 Spring Cloud、Dubbo 等主流微服务生态,是微服务架构中“注册中心 + 配置中心”的一体化解决方案。
二、Nacos 与 Eureka 的核心区别
Eureka 是 Netflix 开源的纯服务注册发现组件(已停止更新),二者在功能、设计、特性上差异显著:
| 对比维度 | Nacos | Eureka |
|---|---|---|
| 核心功能 | 一体化:服务注册发现 + 配置中心 + 动态 DNS | 单一:仅服务注册发现 |
| 服务健康检查 | 支持多种检查方式:- 客户端主动上报(心跳)- 服务端主动探测(TCP/HTTP) | 仅客户端主动上报(30秒心跳 + 90秒未上报剔除) |
| 数据一致性 | 支持 CP/AP 切换:- 服务发现默认 AP(保证可用性,适合临时故障)- 配置中心默认 CP(保证一致性,适合配置修改) | 仅支持 AP(基于 CAP 理论,优先保证可用性,牺牲强一致性) |
| 服务治理能力 | 原生支持:负载均衡、服务熔断、流量控制(需配合 Sentinel)、服务元数据管理 | 无原生支持,需依赖 Spring Cloud 其他组件(如 Ribbon 做负载均衡) |
| 部署与维护 | 支持单机/集群部署,提供可视化控制台,操作简单;支持动态扩容 | 集群部署需手动配置 peer 节点,控制台功能简陋;停止更新(2.x 后闭源) |
| 生态适配 | 适配多生态:Spring Cloud、Dubbo、K8s | 仅适配 Spring Cloud 生态 |
三、Nacos 核心原理(分“服务注册发现”和“配置中心”两部分)
1. 服务注册发现原理(默认 AP 模式)
核心是“客户端心跳上报 + 服务端集群同步”,保证服务发现的高可用:
1.服务注册:服务启动时,通过 Nacos 客户端将服务信息(IP、端口、服务名)上报到 Nacos 服务端,服务端将信息存储到内存(AP 模式)或数据库(CP 模式);
2.健康检查:
-
客户端:每隔 5 秒向服务端发送心跳包,证明服务存活;
-
服务端:若 15 秒未收到心跳,标记服务为“不健康”;30 秒未收到,从服务列表中剔除;
3.服务发现:
-
客户端:通过“拉取 + 推送”获取服务列表——启动时拉取全量列表,之后服务端有变更时(如服务上下线),主动推送给客户端;
-
集群同步:Nacos 集群节点间通过 Raft 协议(CP 模式)或 Distro 协议(AP 模式)同步服务信息,保证集群数据一致。
2. 配置中心原理(默认 CP 模式)
核心是“配置存储 + 动态推送”,实现配置的集中管理和实时更新:
1.配置存储:用户在 Nacos 控制台/API 提交配置(如数据库连接池、开关参数),Nacos 服务端将配置存储到 MySQL 数据库(保证持久化和一致性),同时缓存到内存(提升读取效率);
2.配置拉取:服务启动时,客户端通过“服务名 + 配置分组”从服务端拉取对应配置,初始化本地配置;
3.动态更新:
-
客户端:通过长连接监听配置变更(避免轮询开销);
-
服务端:当配置修改后,立即推送变更通知到所有监听该配置的客户端,客户端收到通知后拉取新配置并更新本地,实现“配置热更新”(无需重启服务)。
四、总结
Nacos 定位:微服务“注册中心 + 配置中心”一体化工具,功能全面、生态适配广;
与 Eureka 差异:Nacos 功能更全(含配置中心)、支持 CP/AP 切换、服务治理能力强,而 Eureka 功能单一、仅 AP、已停止维护;
核心原理:服务发现靠“心跳+推拉结合”保证高可用,配置中心靠“DB 存储+长连接监听”实现动态更新。