MST

星途 面试题库

面试题:分布式系统中Raft算法如何保证分布式日志的一致性

在分布式系统场景下,阐述Raft算法在确保分布式日志一致性方面采取的核心机制,例如选举机制、日志复制机制等是如何协同工作的?
49.0万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

选举机制

  1. 角色与状态:Raft 中有三种角色,分别是领导者(Leader)、跟随者(Follower)和候选人(Candidate)。跟随者在一段时间内(选举超时时间)未收到领导者的心跳,就会转变为候选人发起选举。
  2. 投票规则:候选人向其他节点发送 RequestVote 消息请求投票。每个节点(包括候选人自己)在一个选举周期内只能投一票,按照先来先得的原则。如果收到大多数节点(超过半数)的投票,候选人就成为领导者。
  3. 心跳机制:领导者通过定期向跟随者发送心跳(AppendEntries 消息,内容为空的日志条目)来维持其领导地位。跟随者收到心跳后,重置选举超时时间,继续保持跟随者状态。

日志复制机制

  1. 日志结构:Raft 中的日志由一系列的日志条目组成,每个条目包含指令和任期号。任期号用于标识领导者的任期,新的领导者任期号会递增。
  2. 日志同步:客户端向领导者发送写请求,领导者将请求封装成日志条目添加到自己的日志中,然后向跟随者发送 AppendEntries 消息,包含新的日志条目。跟随者收到消息后,首先检查任期号是否一致,如果不一致则拒绝;如果一致,将日志条目追加到自己的日志中,并向领导者发送确认消息。
  3. 一致性检查:领导者在收到大多数跟随者的确认消息后,将日志条目标记为已提交,并应用到状态机中。同时,领导者继续向尚未同步的跟随者发送 AppendEntries 消息,确保所有节点的日志最终一致。

两者协同工作

  1. 选举完成后日志同步:当新的领导者选举产生后,领导者会遍历自己的日志,向跟随者发送 AppendEntries 消息,使跟随者的日志与自己保持一致。如果跟随者的日志与领导者不一致,领导者会根据日志条目的索引和任期号,让跟随者删除不一致的部分并追加新的日志条目。
  2. 领导过程中日志维护:在领导者的任期内,通过心跳和日志复制消息持续保持与跟随者的通信。如果领导者发现某个跟随者的日志落后太多,会加大同步频率,以确保整个分布式系统的日志一致性。同时,领导者在收到客户端请求后,会优先将日志条目复制到大多数节点,再应用到状态机,从而保证即使领导者崩溃,新选举出的领导者也能基于已提交的日志继续提供服务。