外观主题
阅读语言

Raft 共识 —— 选主、日志复制、多数派提交

软件 本站软件 2小时前
https://yxp.hk/p/s4pw45

📦 开源仓库:learn_raft_consensus · 纯 Python 标准库 · 学习演示项目

一群节点如何对「谁是主、日志顺序是什么」达成一致?Raft 是目前最易读的共识算法:节点选出一个 leader,leader 把日志复制给 follower,多数派确认才算提交;leader 挂了就重新选,已提交的日志不会丢。

核心思路

        选举超时
  follower ───────────► candidate ── 票数 ≥ 多数 ──► leader
                                                         │
                                                         ▼
                                              向 follower 复制日志
                                              多数派 ack → 提交
  • 任期(term):每次选举递增,一个任期最多一个 leader
  • leader:处理所有写入,通过心跳把日志推给 follower
  • 多数派提交:多数节点确认的条目才算已提交
  • 容错:leader 挂掉,follower 以新任期发起重新选举

为什么值得学

  • 强一致但没有单点:任何节点都能当 leader,集群说了算
  • 杜绝脑裂:多数派投票意味着两个 competing leader 不可能同时合法
  • 日志安全:已提交条目在重选中幸存,恢复节点会被对账

演示场景

  1. 选举:A 发起选举拿下多数票成为 leader
  2. 复制与提交:leader 提案 set x=1、set y=2,多数派 ack 后提交
  3. leader 宕机:A 挂,B 以任期 2 当选
  4. 新 leader 继续:B 提案 set z=3,日志保持一致
  5. 恢复对账:A 回来后采纳 leader 的权威日志

注:这是简化的同步教学模型。真实 Raft 还有预投票、日志匹配、快照、定时 RPC 等。

运行

python run_all.py

纯 Python 标准库,零第三方依赖,一键跑完所有演示场景后自动退出。
仓库:github.com/yxpil/learn_raft_consensus,欢迎 Star 与提 Issue。