一句话总结
注册中心是微服务架构的通讯录,负责服务注册、发现、健康检查。核心流程:服务提供者启动 → 向注册中心注册(IP+端口+元数据)→ 服务消费者从注册中心获取服务列表 → 通过负载均衡调用。Nacos vs Eureka:Nacos 功能更全(配置中心+注册中心合一)、支持 AP/CP 切换、2.x 使用 gRPC 长连接;Eureka 只做注册中心、纯 AP、2.x 已停止维护。生产推荐 Nacos。
初级理解
注册中心工作流程
# 服务注册与发现流程
# 1. 服务提供者启动 → 向注册中心注册
# POST /nacos/v1/ns/instance
# {serviceName: "user-service", ip: "192.168.1.1", port: 8080}
# 2. 服务消费者启动 → 从注册中心订阅服务
# GET /nacos/v1/ns/instance/list?serviceName=user-service
# → [{ip: "192.168.1.1", port: 8080}, {ip: "192.168.1.2", port: 8080}]
# 3. 服务提供者定期发送心跳(续约)
# PUT /nacos/v1/ns/instance/beat
# 默认 5 秒一次
# 4. 注册中心检测心跳超时 → 剔除不健康实例
# 默认 15 秒无心跳 → 标记不健康
# 默认 30 秒无心跳 → 剔除
# 5. 注册中心推送变更给消费者
# 服务列表变化 → 通知消费者更新本地缓存
中级深入
Nacos vs Eureka
| 对比维度 | Nacos | Eureka |
|---|---|---|
| CAP | AP/CP 可切换 | AP |
| 功能 | 注册中心 + 配置中心 | 仅注册中心 |
| 健康检查 | TCP/HTTP/MySQL 多种 | 心跳机制 |
| 通信协议 | HTTP(1.x)/ gRPC(2.x) | HTTP |
| 保护机制 | 保护阈值(0-1) | 自我保护模式 |
| 维护状态 | 活跃维护 | 2.x 停止维护 |
Nacos 2.x gRPC 长连接
# Nacos 1.x:HTTP 心跳(短连接)
# 每个实例每 5 秒发一次 HTTP 请求
# 问题:连接频繁创建销毁,资源消耗大
# Nacos 2.x:gRPC 长连接
# 客户端与服务端建立 gRPC 双向流
# 通过流发送心跳和接收配置变更
# 优点:
# 1. 长连接复用,减少连接开销
# 2. 服务端可主动推送变更(实时性高)
# 3. 支持大规模实例(单机 10 万+)
高级拓展
Eureka 自我保护模式
# 自我保护模式触发条件
# 15 分钟内,心跳失败比例 < 85%
# 触发后行为
# 不再剔除任何实例(即使心跳超时)
# 保护已有的服务列表不丢失
# 为什么需要?
# 网络分区时,Eureka 和客户端之间网络不通
# 但客户端之间网络正常
# 如果剔除所有实例,服务就不可用了
# 自我保护保留实例,客户端之间仍可通信
# 配置
eureka:
server:
enable-self-preservation: true # 默认开启
renewal-percent-threshold: 0.85 # 阈值
Nacos AP vs CP 切换
# Nacos 支持 AP 和 CP 模式切换
# AP 模式(默认):临时实例
# - 实例注册时 ephemeral=true
# - 使用 Distro 协议(AP)
# - 适合一般微服务场景
# CP 模式:持久化实例
# - 实例注册时 ephemeral=false
# - 使用 Raft 协议(CP)
# - 适合对一致性要求高的场景(如 DNS 服务发现)
# 切换方式
# 1. 注册实例时指定 ephemeral 参数
# 2. Nacos 服务端配置
# nacos.core.auth.enabled=true 时默认 CP
实战场景
场景:Nacos 集群部署
# Nacos 集群部署(3 节点)
# 1. 每个节点独立部署
# 2. 使用 MySQL 存储配置数据(集群共享)
# 3. 使用 cluster.conf 配置集群节点列表
# cluster.conf
192.168.1.1:8848
192.168.1.2:8848
192.168.1.3:8848
# application.properties
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://mysql:3306/nacos_config
# 客户端连接
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.1.1:8848,192.168.1.2:8848,192.168.1.3:8848
面试模拟
面试官:Nacos 和 Eureka 有什么区别?
你:Nacos 功能更全(注册+配置二合一),支持 AP/CP 切换,2.x 使用 gRPC 长连接性能更好。Eureka 只做注册中心,纯 AP,2.x 已停止维护。生产环境推荐 Nacos。
面试官:Eureka 的自我保护模式是什么?
你:当 15 分钟内心跳失败比例低于 85% 时触发,不再剔除任何实例。目的是防止网络分区时误删健康实例。这是一种宁可保留错误数据也要保证可用性的 AP 思想体现。