区块链:Raft协议

news2024/11/14 8:39:48

Raft 协议是一种分布式共识机制,这种机制适用于网络中存在一定数量的故障节点,但不考虑“恶意”节点的情况,所以更适合作为私有链和联盟链的共识算法。

在此协议中,每个节点有三种状态:

  • 候选者 ,可以被选为一个新的领导者
  • 追随者 ,类似选民,追随领导者
  • 选举者,对追随者发送指令,比如区块链写入区块数据,如果追随者收不到领导者的消息,则会转变为候选者

此协议达成共识分为两个阶段:

  • 领导者选举
  • 日志复制

领导者选举过程

它由两个时间间隔控制,分别为选举时间间隔心跳时间间隔
选举时间间隔是指候选者成为领导者的等待时间。
开始时,每个节点都是追随者,每个节点独立记录自己的选举时间间隔。当A节点在选举时间间隔内没有接受到领导者的指令(心跳),则会成为候选者,之后此节点会向其他节点发送给自己投票的请求,其他投给此节点的节点将会重新设置自己的选举时间间隔(从零开始计时),而若是A节点获得超过半数的投票则会成为领导者o( ̄▽ ̄)ブ。
A在成为领导者( Leader )后,同时向其他节点发送心跳。在接收到来自节点A心跳 ,其他节点确认节点A为网络中的选举者,然后重新设置选举时间间隔并开始监听节 A的心跳。
心跳时间间隔是指候选者接受领导者的指令的时间间隔,若是在此间隔内未接收到心跳(指令)则会成为候选者o( ̄▽ ̄)ブ。
同样每个追随者都会记录自己的心跳时间间隔,若B节点在此间隔内未收到领导者A的心跳(假设A发生了故障),B则会变为候选者,向其他节点发送给他投票的请求,其他节点则会停止对A的心跳监听,开始下一轮的投票,并重新设置自己的选举时间间隔。
每一个追随者一直监听领导者的心跳,如果在心跳时间间隔内没有接收到心跳,在等待一个选举时间间隔后,则会变为候选者(即每个追随者都记录着心跳时间间隔和选举时间间隔)。
若是在某一个时刻,有两个节点(均没有接收到请求或者心跳)同时成为候选者,则会分别发起投票(各自投各自一票),由于发送请求存在先后顺序且每个节点在一轮选举中只能投一次票,故经过多轮选举,最后都会产生领导者。

日志复制

作为领导者的节点掌握整个网络的日志复制(比如记录区块)的工作。
例如,领导者会向追随者发送添加区块到区块链的命令,但领导者不会立即将区块数据添加到区块链,而是在得到大多数追随者的确认才会更新自己的区块链的信息,也会在下一次的心跳通知追随者更新区块链的信息。

由Raft协议原理可知,对于私有链,如果网络中永远不会发生通信故障,则本质上是类中心化的区块链,因为所有的区块链都会由第一个领导者产生。

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

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

相关文章

云计算在教育领域的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 云计算在教育领域的应用 云计算在教育领域的应用 云计算在教育领域的应用 引言 云计算概述 定义与原理 发展历程 云计算的关键技…

紫光展锐携手上赞随身Wi-Fi,让5G触手可及

近年来,随着各类移动应用层出不穷,人们对随时随地上网的需求日益增强,随身 Wi-Fi 设备以其便捷性、灵活性和相对较低的成本,成为用户满足办公、社交、娱乐等多元化需求的重要工具。5G技术的逐步普及为随身Wi-Fi市场注入了新的活力…

Spring资源加载模块,原来XML就这,活该被注解踩在脚下 手写Spring第六篇了

这一篇让我想起来学习 Spring 的时&#xff0c;被 XML 支配的恐惧。明明是写Java&#xff0c;为啥要搞个XML呢&#xff1f;大佬们永远不知道&#xff0c;我认为最难的是 XML 头&#xff0c;但凡 Spring 用 JSON来做配置文件&#xff0c;Java 界都有可能再诞生一个扛把子。 <…

【C++】AVL树的了解和简单实现

目录 AVL树的概念 AVL树介绍 平衡因子 AVL树的插入 平衡因子的更新 【1】平衡因子为0 【2】平衡因子为1/-1 【3】平衡因子为2/-2 选择的处理 旋转的原则 右单旋 具体的三种情况&#xff1a; ​编辑 所有情况的概念图&#xff1a; 对于父亲指针的处理 &…

使用 PageHelper 在 Spring Boot 项目中实现分页查询

目录 前言1. 项目环境配置1.1 添加 PageHelper 依赖1.2 数据库和 MyBatis 配置 2. 统一的分页响应类3. 使用 PageHelper 实现分页查询3.1 Service 层分页查询实现3.2 PageHelper 分页注意事项 4. 控制层调用示例5. 常见问题与解决方案5.1 java.util.ArrayList cannot be cast t…

丹摩征文活动 | 丹摩智算:大数据治理的智慧引擎与实践探索

丹摩DAMODEL&#xff5c;让AI开发更简单&#xff01;算力租赁上丹摩&#xff01; 目录 一、引言 二、大数据治理的挑战与重要性 &#xff08;一&#xff09;数据质量问题 &#xff08;二&#xff09;数据安全威胁 &#xff08;三&#xff09;数据管理复杂性 三、丹摩智算…

彻底理解ARXML中的PDU

文章目录 一、DBC报文信号的发送二、ARXML报文信号的发送2.1 什么是PDU2.2 PDU的类型2.3 Container-I-PDU的发送 三、小结 在CANFD支持可变速率和更大的数据长度&#xff08;64字节&#xff09;的情况下&#xff0c;可以使用DBC和ARXML两种数据库格式来进行报文通信&#xff0c…

探索MoviePy:Python视频编辑的瑞士军刀

文章目录 &#x1f3ac; 探索MoviePy&#xff1a;Python视频编辑的瑞士军刀第一部分&#xff1a;背景介绍第二部分&#xff1a;MoviePy是什么&#xff1f;第三部分&#xff1a;如何安装MoviePy&#xff1f;第四部分&#xff1a;MoviePy的基本函数使用方法1. 视频剪辑2. 视频拼接…

前端请求后端php接口跨域 cors问题

只需要后端在网站的入口文件 一般都是 index.php 加上 这几行代码就可以了 具体的参数可以根据需要去修改 header("Access-Control-Allow-Origin: *"); header(Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS); header(Access-Control-Allow-Heade…

C++11的一些特性

1、列表初始化&#xff0c;对内置类型和自定义类型都可以使用列表进行初始化——一切都可以用列表初始化 不要和初始化列表混了 std::initializer_list临时对象作为函数的参数&#xff0c;用来接收{}括起来的的初始化列表 容器中有用initializer_list作为参数的构造函数&…

MySQL多系统安装配置教程(Windows、Ubuntu、Centos)

专题目标 • 掌握在Windows下安装MySQL数据库 • 掌握在CentOS下安装MySQL数据库 • 掌握在Ubuntu下安装MySQL数据库 一、在Windows下安装MySQL数据库 • Windows下推荐使用安装程序进行安装 • 安装程序下载地址&#xff1a;https://dev.mysql.com/downloads/ 通过上面的安装…

关于 npm 更新镜像源问题

npm&#xff08;Node Package Manager&#xff09;&#xff0c;是一个NodeJS包管理和分发工具&#xff0c;已经成为了非官方的发布Node模块&#xff08;包&#xff09;的标准。&#xff09; 查看当前npm版本 npm -v 10.9.0 执行以下命令报错 npm install --registryhttp…

Netty篇(入门编程)

目录 一、Hello World 1. 目标 2. 服务器端 3. 客户端 4. 流程梳理 &#x1f4a1; 提示 5. 运行结果截图 二、Netty执行流程 1. 流程分析 2. 代码案例 2.1. 引入依赖 2.2. 服务端 服务端 服务端处理器 2.3. 客户端 客户端 客户端处理器 2.4. 代码截图 一、Hel…

文本语义分块、RAG 系统的分块难题:小型语言模型如何找到最佳断点

文本语义分块、RAG 系统的分块难题&#xff1a;小型语言模型如何找到最佳断点&#xff1f; 转自jina最新的关于文本语义分块的分享和模型 之前我们聊过RAG 里文档分块 (Chunking) 的挑战&#xff0c;也介绍了 迟分 (Late Chunking) 的概念&#xff0c;它可以在向量化的时候减…

大数据技术在金融风控中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 大数据技术在金融风控中的应用 大数据技术在金融风控中的应用 大数据技术在金融风控中的应用 引言 大数据技术概述 定义与原理 发…

小程序中引入下载到本地的iconfont字体图标加载不出来问题解决

我这个是uniapp项目,字体图标都是一样的,在vue项目中web端、uniapp运行到h5都没问题,但是运行到小程序加载不出来,报错如下: 不让用本地路径,所以我们要转为base64编码,这里给大家提供一个工具,它可以把本地字体文件转为base64:transfonter 进入官网后,第一步: …

MYSQL隔离性原理——MVCC

表的隐藏字段 表的列包含用户自定义的列和由系统自动创建的隐藏字段。我们介绍3个隐藏字段&#xff0c;不理解也没有关系&#xff0c;理解后面的undo log就懂了&#xff1a; DB_TRX_ID &#xff1a;6 byte&#xff0c;最近修改( 修改/插入 )事务ID&#xff0c;记录创建这条记…

vue3 + element-plus 的 upload + axios + django 文件上传并保存

之前在网上搜了好多教程&#xff0c;一直没有找到合适自己的&#xff0c;要么只有前端部分没有后端&#xff0c;要么就是写的不是很明白。所以还得靠自己摸索出来后&#xff0c;来此记录一下整个过程。 其实就是不要用默认的 action&#xff0c;要手动实现上传方式 http-reque…

【C++课程学习】:二叉搜索树

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 二叉树搜索树的概念&#xff1a; 节点的结构&#xff1a; ⚽️结构&#xff1a; ⚽️ 构造函数&…

Axure是什么软件?全方位解读助力设计入门

在产品设计和开发领域&#xff0c;Axure是一款大名鼎鼎且功能强大的软件&#xff0c;它为专业人士和团队提供了卓越的设计支持&#xff0c;帮助他们将创意转化为实际可操作的产品原型。 一、Axure 的基本介绍 Axure是一款专业的原型设计工具&#xff0c;主要用于创建交互式的…