Nacos 注册中心执行流程的详细说明

一、定义

以下是 Nacos 注册中心执行流程的详细说明,涵盖 服务注册、服务发现、健康检查、集群数据同步 等核心环节的完整生命周期:


二、提供者注册流程


1、提供者发起注册请求

  • 触发时机:因为提供者集成了Nacos Client(Nacos的客户端),所以在提供者启动时,其实是通过 Nacos Client(Nacos的客户端)自动触发注册的

  • 注册请求发送

    • 将请求参数构造成 Instance 对象(包含ip、port、weight、metadata等)

    • 通过HTTP/RPC发送注册请求到Nacos Server(Nacos的服务端)

  • 请求处理:

    • 请求URL: /nacos/v1/ns/instance

    • 方法: POST

    • 参数: serviceName, ip, port, clusterName等


2、Nacos服务端接收和处理提供者发起的注册请求


i、Nacos服务端请求处理入口:

  • InstanceController接收注册请求

  • 参数校验(服务名、IP、端口等)


ii、Nacos服务端处理注册请求的核心:


iii、提供者的存储:

  • 若该提供者不存在,创建新的 Service 对象并初始化(使用命名空间进行隔离)

  • 更新提供者的实例列表,并将新实例加入对应集群(Cluster)中


VI、数据持久化:

  • 临时实例(ephemeral=true) :仅写入本地内存(ConcurrentHashMap),通过 Distro 协议异步同步到其他节点

  • 持久实例(ephemeral=false) :通过 Raft 协议持久化到磁盘(需多数节点确认)


Vii、事件通知

  • 发布InstanceChangeEvent事件

  • 通知订阅该服务提供者实例的消费者(因为消费者端也集成了Nacos Client【Nacos的客户端】)


三、服务发现流程


1、消费者订阅服务提供者

因为消费者端其实也集成了 Nacos Client【Nacos的客户端】,也是通过 Nacos的客户端发送HTTPS请求来获取Nacos服务端中的提供者服务列表

  • 初始化订阅:


2、首次获取服务列表:

  • 立即调用GET请求获取全量服务列表

  • URL: /nacos/v1/ns/instance/list

  • 参数: serviceName、clusters、healthyOnly等


3、消费者后续通过 HTTP 长轮询(Long Polling)监听变更:

  • 消费者启动长轮询检查服务变更

  • 默认超时时间30秒

  • 请求URL: /nacos/v1/ns/instance/list

  • 处理逻辑:

    • 若服务无变化,请求挂起最多 30 秒

    • 若期间发生变更,立即返回新数据

    • 超时后客户端重新发起请求


4、Nacos服务端处理消费者发起的发现请求:


i、检查本地缓存:

  • 检查服务是否有变更(通过lastModified时间戳)

  • 无变更时挂起请求(通过Servlet 3.0异步机制)


ii、变更推送机制:

  • 使用DelayQueue实现延迟通知

  • 当服务变更时,立即响应挂起的请求

  • 返回变更后的服务列表


iii、数据过滤:

  • 根据healthyOnly参数过滤不健康实例

  • 根据clusters参数过滤指定集群

  • 根据metadata过滤匹配的实例


5、消费者端负载均衡:

  • 本地缓存:消费者缓存服务提供者实例列表到本地缓存,避免频繁请求服务端

  • 负载策略:支持随机、轮询、权重等算法(可自定义扩展)


四、健康检查流程


1、提供者/消费者端心跳(临时实例)

  • 心跳机制:提供者/消费者端每 5 秒发送心跳包到 Nacos服务端(POST /nacos/v1/ns/instance/beat)

  • 超时处理:

    • Nacos服务端若 15 秒未收到心跳,将标记提供者实例为不健康(health=false)

    • 30 秒未收到心跳,直接删除实例,会向消费者以UDP协议方式推送检测心跳的结果


2、服务端主动探测(持久实例)

  • 探测方式:Nacos Server 主动发起 TCP/HTTP 请求到实例的健康检查端点(需配置)

  • 失败处理:连续失败阈值触发后,标记实例不健康


3、健康状态同步

  • 服务端更新实例状态后:

    • 通过 Distro/Raft 协议同步到集群其他节点

    • 触发服务变更事件,通知订阅消费者端


五、集群数据同步


1、临时实例同步(Distro 协议)

  • AP 模式:保证最终一致性,适用于高可用场景

  • 同步流程:

    • 1、提供者端请求的节点作为责任节点,负责写入数据

    • 2、责任节点异步批量同步数据到其他节点

    • 3、节点间通过 CRC 校验数据一致性,失败时触发全量同步


2、持久实例同步(Raft 协议)

  • CP 模式:保证强一致性,适用于配置类数据

  • 选举机制:Raft Leader 处理写请求,日志复制到多数节点后提交


六、执行流程图解

posted @ 2025-04-16 21:25  jock_javaEE  阅读(102)  评论(0)    收藏  举报