共识算法Raft系列(1)——什么是Raft?

Raft 算法是一种分布式一致性算法,由 Diego Ongaro 和 John Ousterhout 在 2014 年提出,旨在解决 Paxos 算法复杂且难以理解的问题。Raft 设计目标是易于理解和实现,同时提供强一致性(CAP 中的 CP 系统),广泛应用于分布式系统中,如 etcd、Consul 和 TiDB。以下是对 Raft 算法的详细解释,包括其原理、流程、角色、优缺点及应用场景。

1. Raft 算法概述

  • 目标:在分布式系统中达成共识,确保多个节点在不可靠网络环境中对某个值(如日志条目、状态更新)达成一致。
  • 核心思想:通过 Leader 驱动的日志复制机制实现共识,将问题分解为易于理解的子任务:Leader 选举、日志复制和安全保证。
  • 前提假设
    • 节点可能崩溃(非拜占庭故障),但不会恶意行为。
    • 网络可能出现延迟、分区或消息丢失,但最终可达。
    • 至少多数节点(>50%)正常运行以达成共识。

2. Raft 的角色

Raft 中每个节点在任意时刻处于以下三种角色之一:

  1. Leader(领导者)
    • 负责处理客户端请求、协调日志复制、向 Follower 发送心跳。
    • 系统中最多只有一个活跃 Leader。
  2. Follower(跟随者)
    • 被动接收 Leader 的心跳和日志复制请求。
    • 可响应投票请求,参与 Leader 选举。
  3. Candidate(候选者)
    • 临时角色,节点在选举新 Leader 时进入此状态。
    • 发起投票请求,尝试成为 Leader。

与 Paxos 的对比

特性 Raft Paxos
易理解性 高,分解为选举和复制子问题 低,流程复杂,难以实现
角色 Leader、Follower、Candidate Proposer、Acceptor、Learner
一致性 强一致性(CP 系统) 强一致性(CP 系统)
性能 Leader 驱动,单点瓶颈 Multi-Paxos 优化后性能相近
应用 etcd、Consul、TiDB Google Spanner、Chubby、ZooKeeper
相关推荐
Mahir086 小时前
Spring 循环依赖深度解密:从问题本质到三级缓存源码级解析
java·后端·spring·缓存·面试·循环依赖·三级缓存
杜子不疼.7 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
石山代码8 小时前
C++ 内存分区 堆区
java·开发语言·c++
心中有国也有家8 小时前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
绝知此事8 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
碧海银沙音频科技研究院8 小时前
通话AEC与语音识别AEC的软硬回采链路
深度学习·算法·语音识别
csdn_aspnet9 小时前
Python 算法快闪 LeetCode 编号 70 - 爬楼梯
python·算法·leetcode·职场和发展
Richown9 小时前
全链路追踪:OpenTelemetry与Jaeger实战
区块链·react
张小姐的猫10 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++