手把手教你:Raft:分布式系统的“班长选举术”(大白话版)

从零学会 Raft:分布式系统的“班长选举术”

一、Raft 是什么?

想象你和几个朋友在群里商量今晚吃什么:

  • 有人提议吃火锅,有人提议吃烧烤。但网络不好,有人掉线、消息乱序,甚至有人中途改主意。你们必须达成一致:今晚到底吃什么?
  • Raft 就是为了解决这个问题的算法!它让多个节点(服务器)即使在网络延迟、节点宕机的情况下,也能就某个值(比如“吃火锅”)达成一致。

二、Raft 的核心机制

1. Leader Election(班长选举)

  • 问题:谁来当班长?
  • 规则
    • 所有节点初始状态是 Follower(学生)。
    • 如果某个 Follower 等待太久了没收到 Leader 的消息,它会变成 Candidate(竞选者),发起选举。
    • Candidate 向其他节点发送投票请求,获得多数票后成为 Leader(班长)。
类比
  • 举手投票:Candidate 像班长候选人,向同学(Follower)举手求票。
  • 票数过半:谁获得多数票,谁就当班长(Leader)。

2. Log Replication(日志复制)

  • 问题:班长(Leader)决定后,怎么让所有人同步?
  • 规则
    • Leader 接收客户端请求(比如“明天春游”),将指令写入自己的日志。
    • Leader 把日志同步给其他 Follower,确保所有节点数据一致。
    • 当多数节点确认收到日志后,Leader 提交日志并返回结果给客户端。
类比
  • 班长通知全班:Leader 像班长,把任务写在黑板上,确保每个人都知道。
  • 少数服从多数:只要半数以上同学抄下黑板内容,任务就生效。

3. Safety(安全性)

  • 问题:如果出现多个 Leader,怎么办?
  • 规则
    • 每个 Leader 有唯一的 Term(任期),确保同一时间只有一个 Leader。
    • 如果 Follower 收到旧 Term 的请求,会拒绝(防止“假班长”干扰)。
    • 日志必须连续,不能跳过(比如不能直接从第 1 条跳到第 3 条)。
类比
  • 任期编号:班长任期有编号(Term 1, Term 2…),新班长必须任期更大。
  • 防作弊:旧班长的签名无效,只有现任班长的指令才被认可。

4. Membership Change(成员变更)

  • 问题:班级有人转学,怎么更新成员名单?
  • 规则
    • 使用 Joint Consensus(联合共识):逐步替换成员,确保过渡期间数据一致性。
    • 先让新旧成员同时参与决策,再逐步退出旧成员。
类比
  • 班级扩编:先让新同学加入班级群,再正式加入班级名单,避免混乱。

三、Java 实现 Raft 的核心代码

// Candidate:竞选者
class Candidate {
   
   
    public void startElection()
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值