Nacos底层原理一次给你讲个够-CSDN博客
[源码阅读] Nacos服务注册发现原理解析_nacos 服务发现原理-CSDN博客

Nacos 作为动态服务发现和配置管理平台,其核心功能原理如下:


1. 服务注册(Service Registration)

  • 基本原理
    微服务启动时,向 Nacos Server 发送注册请求(HTTP/OpenAPI 或 SDK),包含服务名、IP、端口、元数据等信息。
    • 存储机制:Nacos 将服务实例信息存储在内存(ConcurrentHashMap)中,同时支持持久化到数据库(如 MySQL)。
    • 健康状态:注册时标记实例为临时(默认)或持久化模式,临时实例通过心跳维持活性,持久化实例由服务端主动探测。

2. 服务发现(Service Discovery)

  • 基本原理
    客户端通过服务名向 Nacos Server 查询可用实例列表(支持基于权重的负载均衡策略)。
    • 数据一致性
      • AP 模式(默认):采用 Distro 协议(自研的最终一致性协议),优先保证可用性,适用于高并发场景。
      • CP 模式:采用 Raft 协议,保证强一致性,适用于配置管理等强一致性需求场景。
    • 本地缓存:客户端缓存服务列表,减少对服务端的频繁查询。

3. 服务订阅(Service Subscription)

  • 基本原理
    客户端订阅某服务后,Nacos 通过 长轮询(Long Polling)UDP 推送 实时通知实例变更。
    • 长轮询机制
      客户端发起请求后,服务端若没有变更,会挂起请求(默认 30s),期间若有变更立即返回;超时后客户端重新发起请求。
    • 推送防抖:服务端合并短时间内的多次变更,避免频繁推送。

4. 心跳检测(Health Check)

  • 基本原理
    客户端定期(默认 5s)向 Nacos Server 发送心跳包(HTTP beat 请求),服务端更新实例的 lastBeatTime
    • 健康检查机制
      • 临时实例:若 15s 内无心跳,标记为不健康;30s 未恢复则删除实例。
      • 持久化实例:服务端主动探测(如 TCP/HTTP 健康检查),不依赖客户端心跳。
    • 自我保护机制:当服务端与集群失联时,保留本地实例信息,避免大规模下线。

核心优势总结

功能 特点
高可用 支持集群部署,AP/CP 模式灵活切换,适应不同场景。
实时性 长轮询 + UDP 推送,实现秒级服务变更感知。
轻量级 基于 HTTP 协议,集成简单,对业务侵入性低。
扩展性 支持自定义健康检查策略、负载均衡规则及插件扩展。

典型应用场景

  • 服务注册与发现:微服务实例动态上下线,客户端自动感知。
  • 配置中心:结合配置管理功能,实现配置动态推送。
  • 流量治理:基于权重调整实例流量,支持金丝雀发布。

如需更深入细节(如 Distro/Raft 协议实现),可进一步探讨!

总结

  1. Nacos 客户端SDK在服务发现时,如果打开了 failover-mode ,则优先从本地的 failover 目录中获取服务列表,这个特性可以用来做故障转移也可以用本地的配置来覆盖 Nacos 集群中的配置;
  2. Naocs 客户端SDK在服务发现时,如果需要监听服务的变化,Nacos 使用客户端 pull & 服务端 push 2种方式来获取最新的数据;
  3. Nacos 客户端SDK主动上报心跳,当心跳时间超过15秒,设置服务实例为不健康状态,心跳时间超过30秒,将服务实例摘除;
  4. Nacos 同时支持 AP 和 CP ,如果实例的 ephemeral 为 true,则表示实例为临时实例,集群间的数据复制使用基于 Distro 的 AP 协议,否则使用基于 Raft 的 CP 协议;