MST

星途 面试题库

面试题:分布式系统中领导选举在云计算故障恢复场景下如何保障一致性

假设在云计算环境中,部分节点出现故障,领导选举过程需要重新进行。在此场景下,如何通过领导选举机制确保数据和系统状态的一致性,详细说明涉及的技术要点和流程。
41.1万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

技术要点

  1. 故障检测
    • 采用心跳检测机制,节点定期向其他节点发送心跳消息。若在一定时间内未收到某节点心跳,判定该节点故障。
    • 例如使用 TCP 心跳包,节点间每隔固定时间(如 1 秒)发送一个简单的 TCP 探测包,若连续多次(如 3 次)未收到响应,则认为该节点故障。
  2. 选举算法
    • Raft 算法
      • 节点有三种状态:领导者(Leader)、候选者(Candidate)、跟随者(Follower)。
      • 选举触发:当 Follower 在选举超时时间内未收到 Leader 心跳,转为 Candidate 并发起选举。
      • 投票过程:Candidate 向其他节点发送 RequestVote 消息,其他节点根据先来先服务原则(或其他规则)投票。获得多数(超过一半)选票的 Candidate 成为 Leader。
    • Paxos 算法
      • 包含提议者(Proposer)、接受者(Acceptor)、学习者(Learner)角色。
      • 提议过程:Proposer 提出提议,Acceptor 决定是否接受。通过多轮交互,最终达成一致提议。
      • 一致性保证:通过 Phase1(Prepare 阶段)和 Phase2(Accept 阶段)确保提议的一致性。
  3. 日志复制
    • 领导者接收客户端请求并将其追加到自己的日志中。
    • 领导者通过 AppendEntries 消息将日志条目复制到跟随者节点。
    • 跟随者接收到日志条目后,先持久化日志,再回复 ACK 给领导者。
    • 只有当多数节点确认日志已复制,领导者才会将该日志条目应用到状态机,并向客户端返回响应。
  4. 数据同步
    • 新选举出的领导者需要确保所有节点的数据状态一致。
    • 可以采用增量同步方式,领导者根据节点日志的差异,发送缺失的日志条目。
    • 例如,领导者记录每个跟随者的日志最新索引,通过对比索引找出需要同步的日志范围并发送。

流程

  1. 故障检测与感知
    • 节点按固定周期发送心跳消息,若某个节点一段时间内未收到其他节点心跳,标记该节点故障。
    • 故障信息在集群内广播,使其他节点知晓故障情况。
  2. 选举启动
    • 当节点感知到 Leader 故障(如未收到 Leader 心跳),从 Follower 转变为 Candidate 状态。
    • Candidate 增加自己的任期号,向集群内其他节点发送 RequestVote 消息。
  3. 投票与选举
    • 其他节点(Follower 或 Candidate)收到 RequestVote 消息后,检查 Candidate 的任期号和日志情况。
    • 如果 Candidate 的任期号大于自身且日志至少和自身一样新,节点会投票给该 Candidate,并在一段时间内不再接受其他 RequestVote 消息。
    • Candidate 收到多数节点的选票后,成为新的 Leader。
  4. 数据与状态同步
    • 新 Leader 确定后,向所有节点发送心跳消息,表明自己的领导地位。
    • 新 Leader 根据各节点日志情况,通过 AppendEntries 消息向跟随者节点同步数据,确保所有节点数据一致。
    • 跟随者节点接收并应用日志条目,使自身状态与领导者一致。
  5. 恢复服务
    • 当所有节点数据和状态同步完成,集群恢复正常服务,新 Leader 开始处理客户端请求。