最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
nacos服务注册流程是怎样的?从启动到同步的完整过程
时间:2026-08-12 20:23:50 编辑:袖梨 来源:一聚教程网
nacos服务注册流程是怎样的?从启动到同步的完整过程需要先看清适用场景和关键步骤,避免只记结论却忽略实际限制。
服务注册
首先说服务注册,所谓服务注册,就是把服务给注册到nacos的注册中心上面去,让nacos知道自己是提供某个服务的。

服务注册时发生在服务实例(如订单服务)启动时,通过Nacos客户端向Nacos Server发送注册请求,包含服务名、IP、端口、集群名、元数据等信息。
Nacos Server将实例信息存入持久化存储(如内嵌数据库Derby或外置MVSQL),并同步至集群其他节点(基于Raft协议保证一致性)。
AP模式:在 Nacos 中,服务注册默认使用 Distro 协议(基于 AP 模型,优先保证可用性),其特点是 异步同步、最终一致性
- 服务实例启动时,仅需向集群中的任意一个 Nacos Server 节点发起注册请求(无需写入所有节点)。
- 若当前节点是 负责节点(Responsible Node),则处理注册请求并异步将数据同步到其他节点(通过 Distro 协议)。
- 若当前节点不是负责节点,则会将请求转发给负责节点(Leader 节点或通过哈希算法确定的负责节点)。
特点:
- 异步同步:数据先写入本地,后续通过定时任务或事件驱动同步到其他节点。
- 最终一致性:可能存在短暂不一致(如同步延迟),但最终所有节点数据一致。
CP模式:Nacos 使用 Raft 协议(基于 CP 模型,强一致性),适用于配置信息等对一致性要求高的场景
- 客户端写请求发送到 Leader 节点。
- Leader 将操作日志复制到所有 Follower 节点,多数派(N/2+1)确认后提交数据
注册后,实例定期(默认5秒)向Nacos发送心跳包,维持健康状态。若15秒内无心跳,实例被标记为不健康;30秒未收到则删除实例。
AP模式,临时实例(ephemeral=true)默认通过客户端定期(5 秒)向 Nacos Server 发送心跳包。
- 15 秒无心跳:实例被标记为 不健康。
- 30 秒无心跳:实例从注册表中 删除。
CP模式,持久化实例(ephemeral=false) 不会主动发送心跳,而是由 Nacos Server 定期每20s主动探测其实例的健康状态
服务发现
继续说服务发现,服务发现指的是通过nacos来发现对应的服务都有哪些提供者。服务发现有两种方式,一种是主动查询,首次调用前,消费者客户端向 Nacos Server 发起一次查询,获取目标服务的全量实例列表。结果缓存到本地,并订阅该服务的变更事件。后续调用时,直接读取本地缓存,根据负载均衡策略 (如随机、轮询、权重)选择一个实例发起调用。
为了保证本地缓存的实时性,客户端默认每隔 10 秒(可通过 nacos,client,naming.pull.interval=10000 配置) 主动向 Nacos Server 拉取最新服务列表,覆盖旧缓存。
另外,当 Nacos Server 检测到服务实例变化(如注册、下线、健康状态变更),会通过HTTP 长轮询(Long Polling)或 gRPC 主动推送变更事件到订阅的客户端。客户端收到推送后立即更新本地缓存,无需等待定时拉取,实现秒级更新。
HTTP 长轮询(Long Polling)
- 客户端发送 HTTP 请求,Nacos Server 保持连接打开,直到检测到变更后返回响应。
gRPC 长连接(Nacos 2.x)
- 客户端与 Nacos Server 建立 gRPC 流式连接,Server 立即推送变更事件