分布式强一致算法 —— Raft算法

2023-11-13

背景

  Paxos算法是最早的强一致性算法,1990年被Leslie Lamport提出,但是由于其难以理解和实现,导致没有被广泛使用。因此,2013年Raft算法被提出,功能与Paxos算法相同,更易于理解,实现简单,因此迅速被广泛推广使用,已经成为当前主流的强一致性算法。(从CAP角度,Raft算法选择了CP,舍弃了A,选主期间会出现短暂的不可用)

Raft基础

Term

  Term为逻辑时钟,用来比较数据的新旧、Leader的新老、请求是否过时等,每次选举产生新的Term,如下图所示:
在这里插入图片描述

日志

  • Entry:日志文件中的每条记录,由Term和命令组成;
  • Index:每条记录的索引或偏移量;

在这里插入图片描述

角色/状态

  • Leader:主节点,负责客户端请求处理,以及集群节点间数据同步;
  • Follower:从节点,数据备份;
  • Candidate:候选节点,选主时的临时状态;

Raft算法

  Raft算法可以分为Leader Election选主和Log Replication日志复制两部分。算法的整体流程是:首先,集群中的节点选举出一个主节点;然后,由主节点处理客户端的所有请求,并负责将请求复制到所有的从节点,保证节点间的数据一致性。

Leader Election

Raft算法通过心跳机制来进行选主,具体过程如下:

  1. 节点启动时,初始状态为Follower,并开始倒计时。如果Election Timeout时间内,收到Leader的心跳,则重新开始计时;如果超时,则发起选主;
  2. 开始选主后,节点的状态从Follower转变为Candidate,当前任期加1,向集群所有节点发送投票请求(包括节点本身);
# 投票信息
Term:候选节点的所在的任期;
CandidateId:候选节点ID;
LastLogIndex:候选节点最后一条日志的索引;
LastLogTerm:候选节点最后一条日志的任期;
  1. 集群中的其它节点接受到投票请求后,会根据投票信息进行判断:如果能同时满足1)投票中的任期大于等于当前节点的任期;2)对于投票中的任期,当前节点还未投票;3)投票中的数据索引大于等于当前节点数据索引,则同意投票请求;(投票规则)
  2. 如果某个节点的投票请求被过半节点同意,那么该节点成为新的Leader,向集群其它节点发送心跳阻止新的选主;如果投票期间,接收到合法Leader(任期大于等于当前节点任期)的心跳,则节点状态从Candidate转为Follower;如果超时或者没有超过半数,则任期加1,重新发起投票;
    在这里插入图片描述

Log Replication

Leader节点选出之后,会负责Client所有请求以及节点间的数据同步,具体过程如下:

  1. Client发送请求到Leader节点,如果其它节点接收到会转发到Leader节点;
  2. Leader节点接收到请求后,首先将请求命令写入本地日志(未提交状态),然后发日志复制命令送至集群其它节点;
  3. 其它节点接收到日志复制命令后,会根据命令信息进行判断:如果根据Index和Term能找到本地记录则写入,否则拒绝;
  4. 如果Leader节点接收到大部分节点的ACK,则认为日志复制成功,本地数据状态变为Commited,给客户端返回ACK,并发送Commit请求到集群其它节点;如果Leader节点接收到拒绝请求,会减小Index,继续重试直到找到匹配的记录,然后开始复制;

在这里插入图片描述
不一致处理规则: Raft算法中,Leader节点日志只会追加,没有修改和删除,并且数据流向永远都是从Leader到其它节点(单向的),如果发现不一致,处理规则就是强制其它节点复制Leader数据,覆盖不一致数据。

参考

  1. Github地址
  2. Raft为什么是更易理解的分布式一致性算法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分布式强一致算法 —— Raft算法 的相关文章

  • 史上最全!大数据开源框架技术扫盲

    一 目录 系统平台 Hadoop CDH HDP 监控管理 CM Hue Ambari Dr Elephant Ganglia Zabbix Eagle 文件系统 HDFS GPFS Ceph GlusterFS Swift BeeGFS
  • 图像构成与信号处理之二——信号滤波

    一 信号滤波与图像滤波 信号滤波和图像滤波都是信号处理的重要任务 它们在不同领域中有广泛的应用 一 信号滤波 信号滤波是对信号进行处理的过程 通过去除或抑制不需要的频率成分 以实现信号的平滑或去噪 信号滤波的目标是改变信号的频谱分布 以达到
  • WiFi-ESP8266入门开发(十三)-使用SPI

    注 对于ESP8266开源技术感兴趣的可以加群 我们一起探索交流学习 群号 579932824 群名 ESP8266开源技术交流群 介绍 串行外设接口 SPI 是摩托罗拉公司最初启动的总线接口连接协议 SPI接口使用四根线进行通信 因此也被
  • 【JS实用技巧篇】01-函数防抖

    JavaScript专栏 js实用技巧篇 该专栏博主会持续更新 目的是给大家分享一些非常实用的技巧 同时巩固自己的基础 共同进步 欢迎大家在评论区留言交流技术以及学习方法 心得方面的问题 你的一键三连是对我的最大支持 祝大家国庆快乐 文章目
  • 利用python进行数据分析之数据清洗与准备--小白笔记

    数据清洗和准备 处理缺失数据 import pandas as pd import numpy as np string data pd Series aardvark artichoke np nan avocado string dat
  • OpenStack部署之前需要安装哪些必备组件

    二 安全 下面的表格给出了需要密码的服务列表以及它们在指南中关联关系 密码 密码名称 描述 数据库密码 不能使用变量 数据库的root密码 ADMIN PASS admin 用户密码 CEILOMETER DBPASS Telemetry
  • three.js 创建文字的几种方法

    three js 创建文字的几种方法 1 DOM CSS 传统网页html实现 2 将文字绘制到画布中 并将其用作Texture 纹理 将文字保存为图片格式 再将其当作一张蒙皮材质 贴到某个物体上 3 在你所喜欢的3D软件里创建模型 并导出
  • 简单的数字水印加密技术

    最近我一个朋友问谍战情节里是怎样办到将数据隐藏到一般图片里的 正好有一段时间我也研究过这个问题 既然他问了干脆我就写出来和大家也一起分享一下吧 大都是自己琢磨的 如有更加专业的做法欢迎大家讨论啊 由于时间比较久远 当年研究的代码找了半天也没
  • [leetcode] 面试题 17.20. 连续中值

    有很多种形式可以实现中位数的求解 比如将所有的数放到一个数组中 然后sort一下获取中间的值 但这样在时间复杂度上不太优雅 为了能够更快的求解 可以使用对顶堆来求解 对顶堆通常用来实现动态k大 小 的问题 在这个题里 因为在往里面加数的过程
  • api接口的获取调用方式是什么?

    API接口的获取调用方式 通常分为以下几个步骤 1 注册账号并申请API Key 在API服务提供商的官方网站上注册账号 并申请API Key 包括通行证ID和密钥 以便后面的API调用验证 2 查看API接口文档 根据API服务提供商的官
  • OSI Network Layer 網絡層

    OSI Network Layer 網絡層 OSI 網絡層 網絡層數據報 IP 數據報結構 IP 地址 IP 地址分類 私有 IP 地址 子網 subnet 子網是什麼 子網掩碼 subnet mask 路由器 Router static
  • 手把手实现AI诗歌生成(AI写诗)

    本模型采用的是字符级别的诗歌生成 pytorch 环境 python3 X pytorch GPU或CPU版本都行 另外天有点冷 建议用GPU训练 电脑绝对比暖手宝好用 目录 项目文件结构 数据已经打包 1 数据集处理 2 构建模型与训练模
  • C# winform 调用webService 格式化程序尝试对消息反序列化时引发异常: 读取 XML 数据时,超出最大字符串内容长度配额 (8192)。

    错误信息 格式化程序尝试对消息反序列化时引发异常 尝试对参数 http ws xzsoft com 进行反序列化时出错 getWagonResponse InnerException 消息是 反序列化对象 属于类型 CallWeb Serv
  • Jina AI 受邀出席 WAIC 2023「科技无障碍」论坛,与行业专家共话 AI 普惠未来

    7 月 6 日 2023 世界人工智能大会 WAIC 在上海世博中心及世博展览馆开幕 并在浦东张江 徐汇西岸设分会场 同步在闵行等产业集聚区开展同期活动 本届大会由上海市人民政府和国家发改委 工信部 科技部 国家网信办 中国科学院 中国工程
  • 什么是css预处理器?

    CSS 预处理器定义了一种新的语言 其基本思想是 用一种专门的编程语言 为 CSS 增加了一些编程的特性 将 CSS 作为目标生成文件 然后开发者就只要使用这种语言进行web页面样式设计 通俗的说 CSS 预处理器用一种专门的编程语言 进行
  • qt 插件加载失败

    不小心把Release版本的QT NO DEBUG预定义宏删除了 导致插件加载提示 The plugin E Qt Trunk Software GT90 GT90Solution Win32 Release plugins Diagnos

随机推荐

  • MySQL数据库免安装版

    MySQL数据库免安装 1 安装配置启动 MySQL现在的版本主要分为 5 x 版本 现在互联网企业中的主流版本 包括 头条 美图 百度 腾讯等互联网公司主流的版本 8 x 版本 新增了一些了窗口函数 持久化配置 隐藏索引等其他功能 所以
  • linux将数字转16进制,使用linux命令将十六进制信息转换为二进制

    我的linux系统上有这个二进制文件 udit udit Dabba cat file enc Salted s bO lt 0 F Jw C LK l 使用hexdump命令 我看到它的信息如下 udit udit Dabba hexdu
  • SpringBoot:Druid 管理界面配置

    SpringBoot MyBatis MySQL Druid PageHeler 核心jar类
  • Python深度学习之VAE

    Deep Learning with Python 这篇文章是我学习 Deep Learning with Python 第二版 Fran ois Chollet 著 时写的系列笔记之一 文章的内容是从 Jupyter notebooks
  • springboot子模块 @Autowired无法找到其他模块的接口和类的解决方法

    在main的启动类上添加 SpringBootApplication scanBasePackages com shangsheng 或者 ComponentScan com shangsheng 注意 只能写两个包的连接点 不能写到最低包
  • 基数排序(Radix Sort)-- 特殊排序算法

    1 基数排序 Radix Sort 基数排序是按照低位先排序 然后收集 再按照高位排序 然后再收集 依次类推 直到最高位 有时候有些属性是有优先级顺序的 先按低优先级排序 再按高优先级排序 最后的次序就是高优先级高的在前 高优先级相同的低优
  • webService接口对接医院lis系统接口

    文章目录 1 应用场景 2 http协议简述 3 webService协议 soup简述 4 发送webService请求 4 1建立HttpUtils工具类 来发送post请求 4 2 调用医院给的url和xml内容 5 接收webSer
  • DC-DC开关电源 拓扑结构(BUCK BOOST BUCK-BOOST)电路

    比较粗略的BUCK BOOST电路的分析 http tech hqew com fangan 522451 http blog csdn net u011388550 article details 23841023 这个还是不错的 htt
  • group by的工作原理和优化思路

    引入 日常开发中 我们经常会使用到group by 你是否知道group by的工作原理呢 group by和having有什么区别呢 group by的优化思路是怎样的呢 使用group by有哪些需要注意的问题呢 使用group by的
  • 下载技巧汇总

    目录 5 下载资源链接 4 下载工具 Free Download Manager 1 1用cmd下载百度网盘中资料 1 2 在网上找到资源用迅雷下载 结果出现 应版权方要求 文件无法下载 的字样 1 3 下载搜索方法 2 查找资源地址 3
  • localhost 对应IP 127.0.0.1

    在使用tomcat gdb等工具调试时会输入localhost localhost 什么意思呢 localhost 对应 映射着一个IP地址 127 0 0 1 代表PC端上的本地服务器 使用的端口号 8080 8084 8089
  • springboot学习(十一)整合JDBC

    之前拿的那个项目都是没有数据库的 这里涉及到整合数据库进来 springboot工程初始化要勾选SQL里面的jdbc api和MySQL 你要是别的数据库就勾选对应的 对于数据访问层 无论是 SQL 关系型数据库 还是 NOSQL 非关系型
  • Kafka eagle的介绍及安装(基于linux环境)

    kafka eagle kafka鹰 是一款由国内公司开源的Kafka集群监控系统 用于监控 Kafka 集群中 Topic 被消费的情况 包含 Lag 的产生 Offset 的变动 Partition 的分布 Owner Topic 被创
  • PCB走线辟谣总结,究竟应该怎么找拐角?

    现在但凡打开 SoC原厂的PCBLayout Guide 都会提及到高速信号的走线的拐角角度问题 都会说高速信号不要以直角走线 要以 45 度角走线 并且会说走圆弧会比 45 度拐角更好 事实是不是这样 PCB 走线角度该怎样设置 是走 4
  • java将属性设置为私有,在给其添加get/set方法和直接把属性设置成public有什么区别

    现在以信用卡为例简单介绍下 public class TestEncapsulation public sataic void main String args CreditCard card new CreditCard System o
  • 如何更改Visual Studio 2019的语言

    第0步 开启Visual Studio 2019 第1步 工具 gt 获取工具和功能 第2步 下载语言包 等待下载 第3步 设置语言 工具 Tools gt 选项 Options 然后重启 VS 就可以看到变化了
  • MediaMetadataRetriever类取得媒体文件信息

    http blog csdn net ameyume article details 7849641 API说明 MediaMetadataRetriever class provides a unified interface for r
  • Java内存管理和面向对象

    Java内存管理 Java的内存管理是自动化的 通过垃圾回收器 Garbage Collector 简称GC 来管理内存分配和释放 在本教程中 我们将探讨Java中的内存管理概念 垃圾回收和一些内存管理相关的最佳实践 步骤1 Java的内存
  • 数据集【NO.10】天池布匹瑕疵检测

    写在前面 数据集对应应用场景 不同的应用场景有不同的检测难点以及对应改进方法 本系列整理汇总领域内的数据集 方便大家下载数据集 若无法下载可关注后私信领取 关注免费领取整理好的数据集资料 今天分享一个非常好的非常小众的研究方向 有应用创新
  • 分布式强一致算法 —— Raft算法

    背景 Paxos算法是最早的强一致性算法 1990年被Leslie Lamport提出 但是由于其难以理解和实现 导致没有被广泛使用 因此 2013年Raft算法被提出 功能与Paxos算法相同 更易于理解 实现简单 因此迅速被广泛推广使用