一聚教程网:一个值得你收藏的教程网站

热门教程

nacos服务注册流程是怎样的?从启动到同步的完整过程

时间:2026-08-12 20:23:50 编辑:袖梨 来源:一聚教程网

nacos服务注册流程是怎样的?从启动到同步的完整过程需要先看清适用场景和关键步骤,避免只记结论却忽略实际限制。

服务注册

首先说服务注册,所谓服务注册,就是把服务给注册到nacos的注册中心上面去,让nacos知道自己是提供某个服务的。

nacos服务注册流程是怎样的?从启动到同步的完整过程

服务注册时发生在服务实例(如订单服务)启动时,通过Nacos客户端向Nacos Server发送注册请求,包含服务名、IP、端口、集群名、元数据等信息。

Nacos Server将实例信息存入持久化存储(如内嵌数据库Derby或外置MVSQL),并同步至集群其他节点(基于Raft协议保证一致性)。

AP模式:在 Nacos 中,服务注册默认使用 Distro 协议(基于 AP 模型,优先保证可用性),其特点是 异步同步、最终一致性

  1. 服务实例启动时,仅需向集群中的任意一个 Nacos Server 节点发起注册请求(无需写入所有节点)。
  2. 若当前节点是 负责节点(Responsible Node),则处理注册请求并异步将数据同步到其他节点(通过 Distro 协议)。
  3. 若当前节点不是负责节点,则会将请求转发给负责节点(Leader 节点或通过哈希算法确定的负责节点)。

特点:

  1. 异步同步:数据先写入本地,后续通过定时任务或事件驱动同步到其他节点。
  2. 最终一致性:可能存在短暂不一致(如同步延迟),但最终所有节点数据一致。

CP模式:Nacos 使用 Raft 协议(基于 CP 模型,强一致性),适用于配置信息等对一致性要求高的场景

  1. 客户端写请求发送到 Leader 节点。
  2. Leader 将操作日志复制到所有 Follower 节点,多数派(N/2+1)确认后提交数据

注册后,实例定期(默认5秒)向Nacos发送心跳包,维持健康状态。若15秒内无心跳,实例被标记为不健康;30秒未收到则删除实例。

AP模式,临时实例(ephemeral=true)默认通过客户端定期(5 秒)向 Nacos Server 发送心跳包。

  1. 15 秒无心跳:实例被标记为 不健康。
  2. 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)

  1. 客户端发送 HTTP 请求,Nacos Server 保持连接打开,直到检测到变更后返回响应。

gRPC 长连接(Nacos 2.x)

  1. 客户端与 Nacos Server 建立 gRPC 流式连接,Server 立即推送变更事件

总结

热门栏目