Nacos速览

注意
本文最后更新于 2024-08-08,文中内容可能已过时。

一、Nacos 基础概述

1、什么是 Nacos

Nacos 是阿里开源的动态服务发现、配置管理、服务治理平台。 核心两大核心能力:

  1. 注册中心:微服务服务注册、发现、健康检测、服务上下线
  2. 配置中心:集中化配置管理、动态配置刷新、多环境配置

2、Nacos 核心作用

  • 替代 Eureka、Config 组合
  • 一站式解决服务注册+配置中心
  • 支持动态扩容、服务自动剔除、配置实时生效
  • 轻量、高可用、易部署,SpringCloud 微服务标配

3、Nacos 核心架构角色

  • Naming Server:服务注册发现核心
  • Config Server:配置管理核心
  • 控制台:可视化管理服务、配置、集群
  • 客户端:微服务项目引入依赖,对接 Nacos 服务端

二、Nacos 作为注册中心 核心原理

1、服务注册流程

  1. 微服务项目启动,引入 Nacos 客户端
  2. 客户端携带服务名、IP、端口、集群名向 Nacos 服务端发起注册
  3. Nacos 服务端接收请求,存入服务注册表(内存+持久化)
  4. 服务注册完成,控制台可在线查看在线服务实例

2、服务发现流程

  1. 消费者服务启动,从 Nacos 拉取服务实例列表
  2. 本地缓存实例列表,定时增量拉取更新
  3. 结合 Ribbon/LoadBalancer 做客户端负载均衡
  4. 按照负载均衡策略,调用目标服务节点

3、心跳机制(面试必考)

  1. 客户端主动心跳
    • 服务注册后,客户端每5秒向 Nacos 服务端发送心跳包
    • 告知服务实例健康在线
  2. 服务端健康检测
    • Nacos 服务端默认15秒检测一次实例状态
    • 超过30秒未收到心跳 → 标记为不健康
    • 超过60秒无心跳 → 自动剔除下线

4、服务剔除模式

  • 临时实例:默认,持久化关闭,靠心跳维持,宕机自动剔除
  • 持久化实例:永久在线,不会因心跳超时剔除,适合固定部署核心服务

5、AP 模型 🔴

  1. Nacos 注册中心:AP 架构
    • 遵循 CAP 理论:保证可用性、分区容错,舍弃强一致性
    • 微服务注册发现更看重高可用,短暂数据不一致可接受
  2. Nacos 配置中心:CP 架构
    • 配置数据必须强一致,宁可不可用也不能配置错乱
    • 采用 Raft 协议保证集群数据强一致

Nacos 注册中心是AP,优先保证服务注册发现高可用;配置中心是CP,通过Raft保证配置数据强一致性。

6、集群环境与命名空间、分组

(1)命名空间 Namespace

作用:环境隔离

  • 默认 public
  • 可划分 dev、test、prod 环境,隔离服务和配置

(2)分组 Group

作用:项目/业务隔离

  • 同一命名空间下,不同业务服务分组隔离
  • 默认分组:DEFAULT_GROUP

(3)集群 Cluster

作用:同城就近调用

  • 同一机房、同一集群服务优先调用,减少跨机房延迟
  • 实现异地容灾、机房故障隔离

三、Nacos 作为配置中心核心原理

1、核心优势

  • 集中管理所有微服务配置
  • 多环境、多项目配置隔离
  • 动态刷新配置,无需重启服务
  • 配置版本回溯、灰度发布、配置监听

2、配置核心概念

  • DataId:配置文件名,全局唯一
  • Group:配置分组,默认 DEFAULT_GROUP
  • Namespace:环境隔离
  • 配置快照:本地缓存配置,防止服务端宕机无配置可用

3、配置加载优先级

本地配置 → Nacos 远程配置,远程配置覆盖本地配置,实现统一管控。

4、@RefreshScope 动态刷新

  1. 引入 Nacos 配置依赖后,配置修改自动推送客户端
  2. 在配置类/Bean 上添加 @RefreshScope
  3. 无需重启项目,自动刷新配置属性
  4. 原理:动态生成代理 Bean,重新从环境中拉取配置赋值

5、配置动态推送流程

  1. 控制台修改配置并发布
  2. Nacos 服务端感知配置变更
  3. 主动推送变更事件到监听的客户端
  4. 客户端拉取最新配置,刷新本地环境变量
  5. 加 @RefreshScope 的 Bean 自动重新初始化生效

四、Nacos 集群原理

  1. Nacos 集群至少 3 个节点
  2. 配置中心采用 Raft 协议 选主,保证 CP 强一致
  3. 注册中心采用 Distro 协议,AP 最终一致性,节点间异步同步服务数据
  4. 集群任一节点宕机,不影响整体服务注册与配置使用,高可用

Distro 协议特点

  • 去中心化、无主从强依赖
  • 节点间异步同步服务实例数据
  • 保证高可用、容错性强,适合注册中心场景

Raft 协议特点

  • 选举 Leader,Leader 负责写入
  • 数据同步到半数以上节点才生效
  • 保证配置数据强一致性

五、Nacos 高频注解与开发用法

  1. @EnableDiscoveryClient 开启微服务注册发现,注册到 Nacos

  2. @RefreshScope 配置中心动态刷新配置核心注解

  3. 配置绑定 @ConfigurationProperties 批量绑定 Nacos 远程 yml 配置,和本地配置用法一致

六、Nacos 高频面试易错点汇总

  1. Nacos 注册中心 AP、配置中心 CP,分别对应 Distro、Raft 协议
  2. 心跳间隔5s、不健康15s、剔除60s
  3. 临时实例靠心跳自动剔除,持久化实例不会自动剔除
  4. namespace 分环境、group 分业务、cluster 分机房
  5. @RefreshScope 实现配置热刷新,不用重启服务
  6. 服务发现是客户端负载均衡,Nacos 只负责注册列表,不负责转发
  7. Nacos 集群3节点起步,保证高可用
  8. 配置中心支持版本回溯、灰度发布、配置监听

七、Nacos 整体知识框架背诵总结

  1. 两大能力:注册中心 + 配置中心
  2. 注册核心:服务注册发现 + 心跳机制 + 服务剔除 + AP(Distro)
  3. 配置核心:集中配置管理 + 动态推送 + @RefreshScope 热刷新 + CP(Raft)
  4. 三层隔离:命名空间(环境) → 分组(业务) → 集群(机房)
  5. 集群协议:注册用Distro、配置用Raft
  6. 开发核心:开启注册发现、远程配置绑定、动态刷新配置