Raft 协议:分布式一致性算法的核心思想


引言

在分布式系统中,数据一致性是核心挑战。Raft 协议作为一种易于理解的一致性算法,被广泛应用于 etcd、Consul 等系统中。


一、Raft 核心概念

1.1 角色与任期(Term)

• 领导者(Leader):处理所有客户端请求,管理日志复制。

• 跟随者(Follower):被动响应领导者的心跳和日志条目。

• 候选人(Candidate):在领导者失效时发起选举。

• 任期(Term):逻辑时钟,用于检测过期的请求。

超时未收到心跳
赢得选举
心跳超时
其他候选人胜出
Follower
Candidate
Leader

1.2 日志结构

• 日志条目(Log Entry):包含命令、任期号和索引。

• 日志匹配原则:若两个日志条目索引相同且任期相同,则后续条目也一致。


二、领导者选举流程

2.1 选举触发条件

• 心跳超时:跟随者未在 election timeout(通常 150-300ms)内收到领导者心跳,则转为候选人。

• 自增任期号:候选人发起选举时递增当前任期号。

2.2 选举过程时序

Follower1 Follower2 Candidate All 请求投票(Term=3) 请求投票(Term=3) 投票成功 广播心跳(Term=3) 心跳响应 Follower1 Follower2 Candidate All

2.3 选举超时随机化

• 避免分割投票:每个节点的超时时间随机化(150-300ms),减少多个候选人同时竞选。


三、日志复制机制

3.1 日志追加流程

Client Leader Follower 提交命令(SET x=1) 写入本地日志(未提交) 发送日志条目(Term=3, Index=5) 确认写入 确认多数派写入 返回成功 Client Leader Follower

3.2 日志一致性规则

  1. 匹配原则:若索引 i 的日志条目在多数节点存在且任期一致,则视为已提交。
  2. 提交规则:领导者只能提交当前任期的日志,旧任期日志需通过新日志间接提交。

四、安全性保障

4.1 领导者完整性

• 日志匹配检查:候选人在选举时需携带最新日志索引和任期,跟随者拒绝日志落后的请求。

4.2 选举限制

• 任期号校验:节点拒绝来自旧任期的请求(如 Term=2 请求在 Term=3 时被丢弃)。

4.3 网络分区容错

心跳超时
赢得选举
脑裂
Leader in Partition A
Candidate in Partition A
New Leader in Partition A
Leader in Partition B
Follower in Partition B

五、Raft 与 Paxos 对比

特性RaftPaxos
设计目标易于理解和实现理论完备性
角色划分明确的三角色模型多角色(Proposer/Acceptor/Learner)
日志复制单领导者线性化复制多领导者并行复制
学习曲线低(状态机清晰)高(多阶段提案机制)

六、实战应用场景

6.1 etcd 中的 Raft 实现

• 元数据管理:通过 Raft 同步集群节点状态。

• 键值存储:客户端请求经 Raft 提交后持久化。

6.2 容错与恢复

• 节点宕机:领导者持续发送心跳,超时后触发新一轮选举。

• 日志恢复:新加入节点通过快照(Snapshot)和日志同步补全数据。


七、总结与延伸

核心结论

  1. 易用性:Raft 通过明确角色和任期机制,大幅降低分布式一致性实现难度。
  2. 强一致性:通过多数派提交和日志匹配原则,确保系统状态严格一致。
  3. 适用场景:适合需要强一致性的系统(如配置中心、分布式锁服务)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于DWT的音频水印算法

基于离散小波变换(DWT)的音频水印算法是一种结合信号处理与信息隐藏的技术,旨在将版权信息或标识隐蔽地嵌入音频信号中,同时保证不可感知性和鲁棒性。以下是该算法的核心步骤及关键技术点: ​1. 算法基本原理​ ​DWT…

低空经济发展现状与前景

低空经济发展现状与前景 一、低空经济的定义与范畴 低空经济是以民用有人驾驶和无人驾驶航空器为主体,以载人、载货及其他作业等多场景低空飞行活动为牵引,辐射带动商业活动或公共服务领域融合发展的一种综合性新经济形态。其涵盖的低空空域通常为距离…

售前工作.工作流程和工具

第一部分 售前解决方案及技术建议书的制作 售前解决方案编写的标准操作步骤SOP: 售前解决方案写作方法_哔哩哔哩_bilibili 第二部分 投标过程关键活动--商务标技术方案 1. 按项目管理--售前销售项目立项 销售活动和销售线索的跟踪流程和工具 1)拿到标书&#xff…

DeerFlow试用

github拉取代码 配置.env和conf.yaml 注意设置大模型的url和模型名称、api_key 先启动根目录下的server,端口如果有冲突直接在default变量赋值时修改; 再启动前端,先build再run dev; 根据前端完成时的地址访问界面&#xff1…

python + streamlink 下载 vimeo 短视频

1. 起因, 目的: 看到一个视频,很喜欢,想下载。https://player.vimeo.com/video/937787642 2. 先看效果 能下载。 3. 过程: 因为我自己没头绪。先看一下别人的例子, 问一下 ai 或是 google问了几个来回,原来是流式…

JavaScript【6】事件

1.概述: 在 JavaScript 中,事件(Event)是浏览器或 DOM(文档对象模型)与 JavaScript 代码之间交互的一种机制。它代表了在浏览器环境中发生的特定行为或者动作,比如用户点击鼠标、敲击键盘、页面…

【Java ee初阶】HTTP(2)

一、HTTP的方法 方法 说明 支持的HTTP协议版本 GET 获取资源 1.0、1.1 POST 传输实体主体 1.0、1.1 PUT 传输文件 1.0、1.1 HEAD 获得报文首部 1.0、1.1 DELETE 删除文件 1.0、1.1 OPTIONS 询问支持的方法 1.1 TRACE 追踪路径 1.1 CONNECT 要求用隧道…

文件名是 ‪E:\20250512_191204.mp4, EV软件录屏,未保存直接关机损坏, 如何修复?

去github上下载untrunc 工具就能修复 https://github.com/anthwlock/untrunc/releases 如果访问不了 本机的 hosts文件设置 140.82.112.3 github.com 199.232.69.194 github.global.ssl.fastly.net 就能访问了 实在不行,从这里下载,传上去了 https://do…

腾讯 CodeBuddy 杀入 AI 编程赛道,能否撼动海外工具霸主地位?

在 AI 编程助手领域,海外的 Cursor 等工具风头正劲,如今腾讯带着 CodeBuddy 隆重登场,国产 AI 编程助手能否借其之力崛起?让我们一探究竟。 官网: 腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 实战安装教程 …

PySide6 GUI 学习笔记——常用类及控件使用方法(常用类颜色常量QColorConstants)

文章目录 一、概述二、颜色常量表标准 Qt 颜色SVG 颜色(部分) 三、Python 代码示例四、代码说明五、版本兼容性六、延伸阅读 一、概述 QColorConstants 是 Qt for Python 提供的一个预定义颜色常量集合,包含标准Qt颜色和SVG规范颜色。这些常…

MATLAB 自然语言处理入门教程

文章目录 前言环境配置一、MATLAB NLP 工具箱概述二、核心功能与 API1. 文本数据准备2. 特征提取3. 文本分类(传统机器学习)4. 深度学习文本分类(LSTM) 三、实战案例:情感分析四、高级应用1. 命名实体识别(…

C++ deque双端队列、deque对象创建、deque赋值操作

在deque中,front()是头部元素,back()指的是尾部元素。begin()是指向头部的迭代器,end()是指向尾部的下一个元素的迭代器。 push_front 头部进行插入 pop_front 尾部进行删除 push_back 尾部进行插入 pop_back 尾部进行删除 deque如果同时…

java每日精进 5.15【分页实现】

1. 什么是对象转换和数据翻译? 对象转换 对象转换是指将一种类型的对象(如数据库实体 UserDO)转换为另一种类型的对象(如前端响应对象 UserVO 或服务层 DTO)。例如,一个 UserDO 包含用户 ID、姓名和部门 …

什么是API接口?API接口的核心价值

随着互联网技术的蓬勃发展,API 接口作为不同应用程序之间的关键纽带,其重要性愈发凸显。本文将从专业视角,深入剖析 API 接口的分类、原理、请求方式以及安全机制等核心要素,助力读者全面理解这一数字化基础设施。 一、API 接口及…

Linux_ELF文件

目录 前言: 一、ELF文件的类型 二、ELF文件的组成格式 1. ELF头部(ELF Header) 2. 节头表(Section Header Table) 3. 程序头表(Program Header Table) 4. 节(Sections)与段(Segments) 三、ELF文件从形成到加载轮廓 1、ELF可执行文件形成过程 2、 可执行文…

Go语言语法---输入控制

文章目录 1. fmt包读取输入1.1. 读取单个值1.2. 读取多个值 2. 格式化输入控制 在Go语言中,控制输入主要涉及从标准输入(键盘)或文件等来源读取数据。以下是几种常见的输入控制方法: 1. fmt包读取输入 fmt包中的Scan和Scanln函数都可以读取输入&#xf…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-C. 常用SQL脚本模板

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 附录C. 常用SQL脚本模板速查表一、数据清洗与预处理模板二、数据聚合与分析模板三、窗口函数应用模板四、性能优化与监控模板五、数据备份与恢复模板六、权限管理与安全模板七、事务与错误处理模板八、时…

51单片机课设基于GM65模块的二维码加条形码识别

系统组成 主控单元:51单片机(如STC89C52)作为核心控制器,协调各模块工作。 扫描模块:GM65条码扫描头,支持二维码/条形码识别,通过串口(UART)与单片机通信。 显示模块&a…

【OpenGL学习】(二)OpenGL渲染简单图形

文章目录 【OpenGL学习】(二)OpenGL渲染简单图形OpenGL渲染图形流程顶点,图元和片元VAO,VBO ,EBO着色器示例:使用OpenGL渲染三角形 【OpenGL学习】(二)OpenGL渲染简单图形 OpenGL渲…

基于STM32的INA226电压电流检测仪

系统总体框图 功率检测装置原理图功能及模块连接说明 一、系统功能概述 该装置以STM32F103C8T6微控制器为核心,集成功率检测、数据交互、状态显示和用户提示功能,通过模块化设计实现稳定运行。 二、各模块功能及连接方式 按键模块 功能&#xff1a…