MST

星途 面试题库

面试题:分布式系统中Raft算法的核心概念

请阐述Raft算法中的领导者(Leader)、跟随者(Follower)和候选人(Candidate)的角色及其状态转换过程。
27.6万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

角色

  1. 领导者(Leader)
    • 职责:负责处理客户端请求,将日志条目复制到其他节点,并维护与跟随者的心跳(Heartbeat)。领导者是整个Raft集群中唯一能接收客户端请求的角色,它会将请求转换为日志条目,然后通过心跳机制同步到其他节点。
    • 特点:在一个任期(Term)内,集群中只有一个领导者。领导者持续向跟随者发送心跳信息,以维持自己的领导地位并告知跟随者当前任期号。
  2. 跟随者(Follower)
    • 职责:被动接收来自领导者的心跳和日志条目。如果在一定时间内没有收到领导者的心跳,跟随者会转变为候选人状态。跟随者不会主动发起选举,只是响应候选人的投票请求。
    • 特点:跟随者处于被动状态,主要用于备份日志和协助领导者达成共识。它会根据领导者的指令更新自己的日志。
  3. 候选人(Candidate)
    • 职责:发起选举过程,向其他节点请求投票。候选人会增加当前任期号,并向集群中的其他节点发送投票请求消息。如果获得大多数节点的投票,候选人就会转变为领导者。
    • 特点:候选人在选举过程中处于竞争领导地位的状态,它的主要任务就是获取足够的选票以成为领导者。

状态转换过程

  1. 跟随者 -> 候选人
    • 触发条件:跟随者在选举超时(Election Timeout)内没有收到领导者的心跳时,会转变为候选人。选举超时时间是一个随机值,一般在150 - 300毫秒之间。
    • 转换动作:候选人会增加当前任期号,向集群中的其他节点发送投票请求(RequestVote RPC),并开始等待其他节点的响应。
  2. 候选人 -> 领导者
    • 触发条件:候选人在一个任期内获得集群中大多数节点的投票(超过半数节点投票给自己)。
    • 转换动作:候选人转变为领导者,开始向其他节点(跟随者)发送心跳消息,以维持领导地位并开始处理客户端请求。
  3. 候选人 -> 跟随者
    • 触发条件
      • 候选人在等待投票过程中,收到了来自其他节点(领导者或其他候选人)更高任期号的消息(如心跳或投票请求),意识到自己的任期号过时,会主动转变为跟随者。
      • 如果候选人在发起选举后,没有在一定时间内获得大多数节点的投票,也会重新回到跟随者状态,等待下一次选举超时重新发起选举。
    • 转换动作:将自己的状态设置为跟随者,更新自己的任期号为接收到的更高任期号,停止发送投票请求,开始接收并处理来自领导者的心跳和日志条目。
  4. 领导者 -> 跟随者
    • 触发条件:领导者收到来自其他节点更高任期号的消息(如投票请求或心跳),意识到自己的任期号过时,会转变为跟随者。
    • 转换动作:领导者将自己的状态设置为跟随者,更新自己的任期号为接收到的更高任期号,停止处理客户端请求和发送心跳,开始接收并处理来自新领导者的心跳和日志条目。