
一、Nacos 工作流程二、Nacos vs Eureka 核心区别2.1 共同点都是注册中心共同点说明1. 服务注册都支持服务提供者注册到注册中心2. 服务拉取都支持消费者从注册中心拉取服务列表3. 心跳检测都支持心跳方式做健康检测2.2 核心区别5 大差异维度NacosEureka1. 健康检测服务端主动检测非临时实例客户端心跳30 秒2. 临时实例✅支持默认心跳不正常会被剔除❌ 不支持3. 非临时实例✅支持nacos 主动询问心跳不正常不会被剔除❌ 不支持4. 消息推送✅支持消息推送服务列表变更实时推送❌只支持拉取30 秒拉一次5. 集群一致性AP CP 双模式有非临时实例时 CP只支持 AP6. 配置中心✅支持Nacos 也是配置中心❌只有注册中心三、5 大区别深度详解3.1 区别 1健康检测方式不同Eureka老架构服务提供者 → 30 秒发一次心跳 → Eureka Server ↓ Eureka Server 90 秒没收到心跳 → 剔除实例Nacos新架构非临时实例 Nacos Server → 主动询问 → 服务提供者 ↓ Nacos Server 没收到响应 → 标记不健康**但不剔除** 临时实例默认 服务提供者 → 5 秒发一次心跳 → Nacos Server ↓ Nacos Server 15 秒没收到心跳 → 剔除实例关键配置spring: cloud: nacos: discovery: server-addr: 192.168.200.130:8848 ephemeral: false # ⚠️ false 非临时实例Nacos 主动询问 # ephemeral: true默认 临时实例服务主动心跳3.2 区别 2服务列表推送 vs 拉取Eureka只拉不推服务消费者 → 30 秒拉一次 → Eureka Server⚠️服务列表变更后消费者最多延迟 30 秒才能感知Nacos推 拉服务列表变更 → Nacos Server 主动推送 → 服务消费者实时 ↓ 本地缓存 ↓ 每 10 秒拉一次兜底✅服务列表变更实时推送3.3 区别 3AP / CP 模式Eureka只支持 AP可用性优先 ↓ 服务注册信息可能不一致但保证可用NacosAP CP 双模式默认 AP临时实例 ↓ 有非临时实例时 → CP强一致Nacos 集群模式配置# Nacos 集群部署3 节点 192.168.200.130:8848 # 节点 1 192.168.200.131:8848 # 节点 2 192.168.200.132:8848 # 节点 33.4 区别 4配置中心Eureka❌ 只有注册中心 配置中心用 Spring Cloud Config 或 NacosNacos✅ 注册中心 配置中心一体化 配置变更支持动态刷新RefreshScopeNacos 配置中心实战// 1. 引入依赖 dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-config/artifactId /dependency // 2. 配置 bootstrap.yml spring: cloud: nacos: config: server-addr: 192.168.200.130:8848 file-extension: yaml namespace: mova-prod // 3. Nacos 控制台添加配置 // Data ID: mova-report-service.yaml // Group: DEFAULT_GROUP // 配置内容: server: port: 8081 spring: datasource: url: jdbc:mysql://192.168.200.100:3306/mova username: mova password: mova_pwd // 4. 动态刷新RefreshScope RestController RefreshScope // ⚠️ 配置变更自动刷新 public class ReportController { Value(${mova.report.timeout:5000}) private Integer timeout; GetMapping(/config) public String getConfig() { return timeout timeout; } }3.5 区别 5服务剔除策略Eureka默认剔除30 秒没心跳 → 标记不健康 90 秒没心跳 → ⚠️ 直接剔除强制下线Nacos分情况临时实例 15 秒没心跳 → ⚠️ 剔除 非临时实例 Nacos 主动询问 → 没响应 → ⚠️ 标记不健康不剔除 等待服务恢复更安全关键服务不能随便被剔除——可能只是网络抖动四、Nacos 完整工作流程4.1 服务注册流程服务提供者mova-report-service启动 ↓ 1. 向 Nacos Server 发送注册请求 POST /nacos/v1/ns/instance { ip: 192.168.200.101, port: 8081, serviceName: mova-report-service, ephemeral: false } ↓ 2. Nacos Server 验证服务信息 ↓ 3. 存储到内存 持久化到文件 ↓ 4. 返回注册成功4.2 服务发现流程服务消费者user-service启动 ↓ 1. 从 Nacos Server 拉取服务列表 GET /nacos/v1/ns/instance/list?serviceNamemova-report-service ↓ 2. Nacos Server 返回服务列表 [ {ip: 192.168.200.101, port: 8081}, {ip: 192.168.200.102, port: 8081} ] ↓ 3. 消费者本地缓存服务列表user-service 内存 ↓ 4. Ribbon 从列表中选一个实例负载均衡 ↓ 5. Feign 发起远程调用4.3 健康检查流程临时实例ephemeral: true服务提供者 → 每 5 秒发心跳 → Nacos Server ↓ Nacos Server 15 秒没收到 → ⚠️ 剔除服务非临时实例ephemeral: falseNacos Server → 每 5 秒主动询问 → 服务提供者 ↓ 服务提供者没响应 → 标记不健康**不剔除** ↓ 服务提供者恢复 → Nacos 标记健康4.4 消息推送流程服务提供者变更新增/下线/健康状态变化 ↓ Nacos Server 检测到变化 ↓ Nacos Server 主动 UDP 推送 → 所有订阅了该服务的消费者 ↓ 消费者更新本地服务列表缓存 ↓ Ribbon 重新选择实例五、Nacos vs Eureka 完整对比维度NacosEureka健康检查服务端主动询问客户端心跳临时实例✅ 支持默认❌ 不支持非临时实例✅ 支持❌ 不支持消息推送✅主动推送实时❌只拉取30 秒延迟集群模式AP CP 双模式只支持 AP配置中心✅注册中心 配置中心❌ 只有注册中心动态刷新✅RefreshScope❌ 需要 Config社区活跃度⚠️⚠️⚠️ 阿里维护活跃⚠️ 停止维护六、Nacos 完整配置6.1 Nacos Server 部署# 1. 下载 Nacos wget https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz tar -xvf nacos-server-2.2.0.tar.gz cd nacos/bin # 2. 单机模式启动 sh startup.sh -m standalone # 3. 集群模式启动3 节点 sh startup.sh -m cluster # 4. 访问控制台 # http://192.168.200.130:8848/nacos # 默认账号密码nacos / nacos6.2 业务服务配置# application.ymlMOVA 报表服务 spring: application: name: mova-report-service cloud: nacos: # 1. 注册中心 discovery: server-addr: 192.168.200.130:8848 namespace: mova-prod group: DEFAULT_GROUP ephemeral: false # ⚠️ 非临时实例mpvs 关键时点用 # 2. 配置中心 config: server-addr: 192.168.200.130:8848 namespace: mova-prod group: DEFAULT_GROUP file-extension: yaml6.3 Nacos 控制台配置Data ID: mova-report-service.yaml Group: DEFAULT_GROUP Namespace: mova-prod 配置内容 server: port: 8081 spring: datasource: url: jdbc:mysql://192.168.200.100:3306/mova6.4 Nacos 集群配置# nacos/conf/cluster.conf 192.168.200.130:8848 192.168.200.131:8848 192.168.200.132:8848七、Nacos 4 大使用场景场景 1服务注册与发现// 服务提供者 SpringBootApplication EnableDiscoveryClient // 启用 Nacos 发现 public class MOVAReportApplication { public static void main(String[] args) { SpringApplication.run(MOVAReportApplication.class, args); } }场景 2动态配置刷新RestController RefreshScope // 配置变更自动刷新 public class MOVAConfig { Value(${mova.timeout:5000}) private Integer timeout; }场景 3服务分组管理spring: cloud: nacos: discovery: group: MOVA_GROUP spring: cloud: nacos: discovery: group: MPVS_GROUP场景 4命名空间隔离# 开发环境 spring: cloud: nacos: discovery: namespace: dev # 生产环境 spring: cloud: nacos: discovery: namespace: prod八、Nacos 实战对照Nacos 配置用途业务价值ephemeral: true高可用报表服务快速注册ephemeral: false强一致27 家分行不能被误剔除ephemeral: true简单采集服务注册❌ Eureka 老架构维护不用升级九、面试官 8 大追问追问 1Nacos vs Eureka 区别5 大区别1.健康检查Nacos 服务端主动询问 vs Eureka 客户端心跳2.临时实例Nacos 支持 vs Eureka 不支持3.消息推送Nacos 实时推送 vs Eureka 30 秒拉取4.AP/CPNacos 双模式 vs Eureka 只 AP5.配置中心Nacos 一体化 vs Eureka 单独追问 2Nacos 临时实例和非临时实例临时实例默认服务主动心跳15 秒没心跳剔除。高可用场景。非临时实例Nacos 主动询问没响应标记不健康但不剔除。强一致场景。追问 3Nacos AP 还是 CP默认 AP临时实例。有非临时实例时 CP。老哥项目MOVA 用 AP高可用mpvs 用 CP强一致。追问 4Nacos 消息推送怎么实现的UDP 推送。Nacos 检测到服务列表变更主动推送到所有订阅该服务的消费者。Eureka 是 HTTP 拉取——30 秒延迟。关键功能必须用 Nacos——服务列表变更需要实时感知。追问 5Nacos 配置中心怎么用3 步1.引入spring-cloud-starter-alibaba-nacos-config2.配置spring.cloud.nacos.config.server-addr3.RefreshScope动态刷新配置变更不重启。追问 6Nacos 集群怎么部署3 节点192.168.200.130:8848192.168.200.131:8848192.168.200.132:8848Nacos 自动选 LeaderRaft 算法。追问 7Nacos 命名空间怎么用4 个标准命名空间dev开发test测试staging预发prod生产追问 8为什么 Nacos 越来越火3 大原因1.注册中心 配置中心一体化少一个组件2.AP/CP 双模式更灵活3.阿里生态Spring Cloud Alibaba 主推