Jorgen's blog Jorgen's blog
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

jorgen

Love it, make mistakes, learn, keep grinding.
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • CAP & BASE理论
  • Raft算法:理解分布式共识
  • 分布式一致性协议:Paxos与Raft
  • 分布式一致性协议:Paxos与Raft算法详解
  • 分布式一致性协议:Raft算法详解
  • 分布式一致性协议:从理论到实践
  • 分布式一致性算法:Paxos与Raft详解
  • 分布式一致性算法:Raft详解
  • 分布式一致性算法:从Paxos到Raft
  • 分布式一致性算法:从理论到实践
  • 分布式共识算法:Raft详解
  • 分布式系统的一致性协议:Paxos与Raft
  • 深入理解Raft一致性算法
    • 前言
    • Raft核心概念
      • 节点角色
      • 任期(Term)
      • 日志复制流程
    • 关键机制详解
      • 领导者选举
      • 日志一致性保证
      • 成员变更
    • 实际应用场景
    • 结语
  • 分布式一致性协议-ZAB详解
  • 分布式事务:从理论到实践
  • 分布式系统的容错机制与故障恢复
  • 拜占庭将军问题与PBFT算法详解
  • 分布式锁:原理、实现与实战
  • 分布式Gossip协议:原理、应用与实现
  • 分布式系统中的时钟问题:从物理时钟到逻辑时钟
  • 分布式系统的负载均衡:原理、算法与实践
  • 分布式系统中的服务发现:原理、实现与实践
  • 分布式数据分区与分片策略:构建可扩展系统的基石
  • 分布式追踪-原理、技术与实践
  • 分布式消息队列-原理、实现与应用
  • 分布式缓存-原理-策略与实践
  • 分布式系统中的安全机制-构建可信的分布式环境
  • 分布式协调服务-ZooKeeper与etcd详解
  • 分布式系统的容错与故障检测机制
  • 分布式系统的状态管理-策略-模型与实践
  • distributed_system
Jorgen
2023-11-15
目录

深入理解Raft一致性算法

# 前言

在分布式系统领域,CAP理论告诉我们网络分区时必须在一致性和可用性之间做权衡。而BASE理论则为我们提供了最终一致性的解决方案。但当我们真正需要实现强一致性时,就需要具体的一致性协议来支撑。Paxos算法虽然经典,但理解门槛太高了,今天我们来聊聊更友好的Raft算法!

提示

Raft算法由Diego Ongaro和John Ousterhout在2013年提出,其核心目标是"可理解性"。它通过将分布式共识问题分解为领导者选举、日志复制和安全三个部分,大大降低了学习门槛。

# Raft核心概念

# 节点角色

Raft集群中的节点有三种状态:

  • 领导者(Leader):处理所有客户端请求,负责日志复制
  • 跟随者(Follower):被动响应,不主动发起请求
  • 候选人(Candidate):在选举过程中临时存在的状态

# 任期(Term)

Raft将时间划分为连续的任期,每个任期开始时会发起新的选举:

graph LR
    A[任期开始] --> B[选举超时]
    B --> C{是否收到投票请求?}
    C -->|否| D[转为候选人]
    C -->|是| E[跟随者]
    D --> F[发起投票]
    F --> G{获得多数票?}
    G -->|是| H[成为新Leader]
    G -->|否| I[等待新任期]
1
2
3
4
5
6
7
8
9

# 日志复制流程

当客户端请求到达领导者时,Raft会:

  1. 将操作追加到本地日志
  2. 通过AppendEntries RPC复制到所有跟随者
  3. 当大多数节点确认后,提交日志并应用状态机

Raft安全性保证

在任何任期内,最多只能选举出一个有效的领导者

# 关键机制详解

# 领导者选举

当节点检测到选举超时(通常150-300ms随机间隔)时:

  1. 增加当前任期号
  2. 转换为候选人状态
  3. 为自己投票
  4. 向其他节点发送RequestVote RPC

关键点:候选人需要获得集群中大多数节点的投票才能成为领导者。这确保了即使部分节点分区,也不会出现多个领导者。

# 日志一致性保证

Raft通过以下机制确保日志一致性:

  1. 日志匹配原则:如果两个日志在相同索引位置的日志项和任期号相同,则它们之前的所有日志都相同
  2. 领导者唯一性:领导者永远不会覆盖或删除自己的日志
  3. 提交规则:只有当前任期的日志项被复制到大多数节点后,才会被提交

# 成员变更

Raft使用两阶段提交实现安全的成员变更:

  1. 配置变更日志先以单节点多数派提交
  2. 新配置生效后,以新配置多数派提交后续变更

# 实际应用场景

Raft算法因其可理解性和可靠性,被广泛应用于:

  • etcd:Kubernetes的底层键值存储
  • Consul:HashiCorp的服务发现工具
  • TiKV:分布式事务型键值数据库
  • CockroachDB:分布式SQL数据库

# 结语

Raft算法通过将复杂的分布式共识问题分解为清晰可理解的部分,大大降低了分布式系统的开发门槛。它不仅提供了强一致性保证,还通过领导者选举、日志复制等机制实现了容错性。

"Raft的设计目标是可理解性,而不是性能"
—— Raft论文作者

在分布式系统设计中,理解一致性协议是构建可靠系统的基石。相比CAP理论这种宏观指导,Raft这样的具体实现方案更能帮助我们解决实际问题。希望今天的分享对你有所帮助!

记住:在分布式系统中,没有银弹,只有最适合场景的选择。Raft不是万能的,但它绝对是你的工具箱里最趁手的武器之一!

#一致性算法#Raft#分布式共识
上次更新: 2026/01/28, 14:21:05
分布式系统的一致性协议:Paxos与Raft
分布式一致性协议-ZAB详解

← 分布式系统的一致性协议:Paxos与Raft 分布式一致性协议-ZAB详解→

最近更新
01
LLM
01-30
02
intro
01-30
03
intro
01-30
更多文章>
Theme by Vdoing | Copyright © 2019-2026 Jorgen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式