Bootstrap

由浅到深解析Nacos的工作机制与原理

由浅到深解析Nacos的工作机制与原理

Nacos架构

Nacos采用无中心节点的Peer-to-Peer架构。每个节点都是一个Peer,节点间通过Raft协议选举Leader,实现数据的强一致性和高可用。
这种去中心化设计简单易用,容易横向扩展,并且保证了高可用。一旦Leader节点失效,系统可以快速选举出新Leader继续服务。

数据模型

Nacos有三种数据模型:

  • 服务实例:用于服务发现与路由,记录服务地址、端口、健康检查等
  • 配置管理:支持配置文件存储、更新、版本控制等,用于集中管理各环境配置
  • 命名空间:提供服务与配置隔离,不同命名空间内的服务实例和配置相互隔离
    这三种数据模型使Nacos既可以作为服务注册中心使用,也可以作为配置中心使用,管理微服务系统的动态服务和静态配置。

CP-AP切换

Nacos默认工作在CP模式,使用Raft协议选举Leader,数据强一致。Nacos也支持手动切换到AP模式,去中心化,数据最终一致,可用性更高。

  • CP模式:启动Raft协议,选举Leader,读写操作需要Leader,强一致
  • AP模式:无Leader,读写操作在任意节点,最终一致
    CP模式适用于生产环境,AP模式适用于开发测试环境。Nacos可以灵活切换,满足不同场景的需求。

命名空间

Nacos支持基于命名空间的服务与配置隔离。有三种命名空间:

  • public:公共命名空间,所有人可见
  • default:默认命名空间,创建私有命名空间前的默认命名空间
  • SYSTEM:Nacos系统使用
    我们可以在Nacos控制台随时创建和删除私有命名空间。命名空间机制为Nacos带来了租户隔离和多环境管理的能力。

Raft协议

Raft是Nacos实现数据强一致性的核心。它是一个用于管理日志复制和Leader选举的算法。
其工作机制:

  • 节点有Follower、Candidate、Leader三种状态
  • Follower接收请求并转发给Leader,接收Leader日志同步并回复
  • 超时未收到Leader同步,Follower变Candidate发起Leader选举
  • 获得半数以上投票的Candidate成为Leader
  • Leader同步日志到Follower,保证大多数节点日志可用,实现强一致
  • Leader失效触发新一轮Leader选举
    Raft使Nacos集群写请求强一致,读请求最终一致。这也是Nacos与Eureka的关键区别。

Raft协议是Nacos实现数据强一致性的核心。通过选举Leader和日志复制,保证了集群中大多数节点的数据一致,即使在网络分区的情况下也能工作正常。这与Eureka different,Eureka无法保证强一致性。

Nacos之所以选择Raft,是因为其实现简单,理论成熟,并且性能较好。Raft协议的工作机制体现了Nacos设计理念上对数据一致性和高可用的追求,这也是Nacos能够胜任生产环境下使用的重要原因。
Raft协议是Nacos的核心工作原理,理解Raft即理解Nacos的数据管理机制。

Raft协议是一种用于管理集群和选举Leader的分布式一致性算法。它能够保证集群中多个节点在不可靠网络环境下达成共识。
Raft协议将集群中的节点划分为三种角色:

  1. Leader:负责接收客户端请求并同步日志给Follower,是当前任期内的管理者。
  2. Follower:接收Leader的日志同步请求并回复,如果一段时间没有收到Leader的同步则可以转换为Candidate发起选举。
  3. Candidate:发起选举,如果获得半数以上节点选票则成为Leader。
    其工作机制如下:
    1)启动时所有节点都为Follower。如果Follower超时未收到Leader日志同步则会转换为Candidate发起选举。
    2)Candidate在一定时间内会发出选举投票请求,如果获得大多数节点投票则成为Leader,否则返回Follower继续等待同步。
    3)Leader首先将自己的最新日志同步给Follower,然后开始接收客户端请求。每接收一条日志会同步给Follower。
    4)如果Leader宕机,其余节点会超时没收到Leader同步并发起新一轮选举,很快就会选出新的Leader。
    5)任期内只能有一个Leader,Leader每接收一条日志都会给Follower同步,所以Follower日志比Leader相差不超过1条,实现了强一致性(Strongly Consistent)。
    Raft协议保证了集群中 Leader 和大多数节点的数据强一致,能够实现高可用的动态选举与数据同步。这使其成为实现分布式系统中数据复制与管理的重要手段。
;