Nacos 高频原理面试题及答案汇总:核心机制与底层实现解析

343 阅读4分钟

以下是一些Nacos高频原理面试题及答案:

  1. 什么是Nacos?它的核心功能是什么?
    • 答案:Nacos是阿里巴巴开源的动态服务发现、配置管理和服务管理平台,全称“Dynamic Naming and Configuration Service”。核心功能包括服务注册与发现(支持基于DNS和RPC的服务发现,兼容Dubbo、Spring Cloud等生态)、动态配置管理(集中式配置管理,支持配置动态推送、多环境配置隔离)、服务元数据管理(存储服务的扩展信息如版本、权重、健康状态等)以及流量管理(内置负载均衡、服务熔断等基础能力)。
  2. Nacos的服务注册与发现流程是怎样的?
    • 答案:服务注册流程为服务启动时,通过Nacos Client向Nacos Server发送注册请求,携带服务名、IP、端口等元数据;Nacos Server接收到请求后,将服务信息存储在内存注册表中,并持久化到磁盘(默认嵌入式数据库);集群模式下,通过Raft协议同步服务信息到其他节点。服务发现流程是客户端通过Nacos Client向Server发送服务查询请求;Server返回健康的服务实例列表;客户端缓存实例列表,并通过定时拉取(默认30s)+服务端推送(UDP)更新列表。
  3. Nacos如何实现服务健康检查?两种实例类型有何区别?
    • 答案:Nacos针对不同实例类型采用不同健康检查机制。临时实例默认采用客户端主动发送心跳(默认5s一次)的方式,15s未收到心跳标记为不健康,30s未收到心跳从服务列表中删除实例,适用于生命周期短、动态扩缩容的服务。永久实例由Nacos Server主动探测(默认20s一次,支持TCP/HTTP等),连续失败N次(默认3次)标记为不健康,不会从服务列表删除,仅标记状态,适用于需要长期运行的核心服务。
  4. Nacos如何保证集群数据一致性?
    • 答案:Nacos集群通过Raft协议保证数据一致性。角色划分有Leader(主节点)、Follower(从节点)、Candidate(候选节点)。写入流程为客户端请求发送到任意节点,非Leader节点会转发给Leader;Leader收到请求后,向所有Follower同步日志;当超过半数节点确认日志写入成功,Leader提交日志并返回成功给客户端。通过“过半机制”确保只有一个Leader,避免脑裂导致的数据不一致,适用于CP模式下的服务。
  5. Nacos的AP模式和CP模式有何区别?如何切换?
    • 答案:AP模式优先保证可用性和分区容错性,牺牲部分一致性,适用于服务发现场景,基于分布式哈希表实现。CP模式优先保证一致性和分区容错性,牺牲部分可用性,适用于配置管理、永久实例等场景,基于Raft协议实现。可通过服务注册时的ephemeral参数指定,spring.cloud.nacos.discovery.ephemeral=true为临时实例(AP模式),spring.cloud.nacos.discovery.ephemeral=false为永久实例(CP模式)。
  6. Nacos作为配置中心如何管理配置?
    • 答案:Nacos提供集中式配置管理,支持多环境、多命名空间和多数据源的配置管理。通过控制台或API可以方便地管理和发布配置。配置管理的基本流程是通过Nacos控制台或API上传配置;配置保存后,Nacos会自动推送变更;客户端通过长轮询或推送机制接收到配置变化,并自动刷新。
  7. Nacos如何支持动态配置更新?
    • 答案:Nacos支持配置的实时更新,当配置发生变化时,Nacos会通过推送机制通知相关的客户端,客户端接收到变化后会自动刷新本地配置。Nacos使用长轮询或者推送机制(如基于WebSocket)通知应用配置的变化。
  8. Nacos如何实现就近访问?
    • 答案:在Nacos中一个服务可以有多个实例,并且可以给实例设置cluster - name。如果某个服务A想要调用服务B,Nacos会查看调用服务A的实例属于哪个集群,然后调用同样集群下的服务B实例,从而实现就近访问。
  9. Nacos底层负载均衡的原理是什么?
    • 答案:Nacos的服务发现功能支持负载均衡。当客户端请求服务时,Nacos会返回多个可用实例,客户端可以根据不同的负载均衡策略(如轮询、随机等)选择实例,以此实现负载均衡。
  10. Nacos的服务注册表结构是怎样的?
    • 答案:Nacos采用数据的分级存储模型,最外层是namespace,用来隔离环境;然后是group,用来实现服务分组;接下来是服务(service),一个服务可以有多个实例;服务下面还有集群(cluster),集群下是多个实例(instance)。