Nacos

- Nacos Spring Cloud

一、Nacos 核心概念

  1. 是什么?

Nacos(Dynamic Naming and Configuration Server)是阿里开源的服务发现+配置管理+服务治理平台,核心功能:

  1. 关键特性
    • 双模式:支持 CP(强一致性、如配置管理)和 AP(高可用,如服务发现)
    • 配置实时推送:基于长轮询(减少无效请求)
    • 生态兼容:无缝集成 Spring Cloud、Dubbo、Kubernetes

二、核心架构与原理

  1. 服务注册与发现流程
    • 注册:服务启动时向 Nacos Server 发送注册请求(HTTP/gRPc)
    • 心跳:客户端定期发送心跳(默认5秒),超时(15秒)标记为不健康,30秒后剔除
    • 发现:消费者通过订阅机制获取服务列表,本地缓存+增量更新
  2. 配置管理机制
    • 发布配置:通过控制台/API发布配置,存储与 Derby 或 MySQL
    • 监听配置:客户端长轮询(默认30秒),服务端 Hold 住请求,配置变更立即返回
    • 历史版本:支持配置回滚和版本对比
  3. 一致性协议
    • CP 模式:使用 Raft 协议(配置管理场景)
    • AP 模式:自研 Distro 协议(服务发现场景,最终一致性)

三、重要知识点

  1. Nacos vs Eureka vs Zookeeper?
    • Eureka:AP 设计,适合服务发现,但功能单一
    • Zookeeper:CP 设计,强一致性,但写性能低
    • Nacos:AP/CP 可切换,集成服务发现+配置管理,生态更全面
  2. 长轮询如何实现配置实时推送?
    • 客户端发起查询请求,若配置无变化,服务端 Hold 请求至超时(默认30秒)或期间配置变更立即返回
    • 对比传统轮询:减少无效请求,提升实时性
  3. Nacos 集群如何保证数据一致性?
    • Distro 模式(AP 模式):每个节点负责部分数据,通过异步复制保证最终一致性
    • Raft 协议(CP 模式):选举 Leader,多数节点写成功才返回
  4. Nacos 2.0 升级了哪些内容?
    • 通信层优化:gRPC 替代 HTTP,减少连接数
    • 长连接增强:支持服务端主动推送,降低延迟
    • 性能提升:支撑百万级服务实例
  5. 如何实现配置灰度发布?
    • 通过 **Data ID 或 Group **分组,结合 Spring Cloud 的 @RefreshScope 或监听ConfigChangeEvent 实现部分实例更新

四、实战场景与排查思路

  1. 服务注册失败常见原因
    • 网络不通:检查 Nacos Server 地址和端口
    • 版本冲突:Spring Cloud Alibaba 与 Nacos 版本兼容性
    • 命名空间 /Group 配置错误:确保客户端与服务端一致
  2. 配置不生效排查步骤
    • 检查控制台配置是否发布成功
    • 客户端是否添加 @RefreshScope 注解
    • 查看日志:com.alibaba.nacos.client.config 包日志是否有监听异常

五、高级话题

  1. Nacos-Sync 应用
    • 跨注册中心同步(如 Kubernetes Service 到 Nacos)
  2. 安全控制
    • 开启鉴权:nacos.core.auth.enabled=true ,配置自定义用户角色
  3. 双活部署
    • 多数据中心通过 Nacos-Sync 同步数据,结合 DNS 实现流量切换