当前位置: 首页 > news >正文

区块链:Raft协议

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

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

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

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

  • 领导者选举
  • 日志复制

领导者选举过程

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

日志复制

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

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

http://www.lryc.cn/news/481539.html

相关文章:

  • 【C语言】位运算
  • 计算机体系结构之多级缓存、缓存miss及缓存hit(二)
  • 【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线
  • Oracle Fetch子句
  • Linux应用——线程池
  • 95.【C语言】数据结构之双向链表的头插,头删,查找,中间插入,中间删除和销毁函数
  • leetcode82:删除排序链表中的重复节点||
  • 【C#】使用.net9在C#中向现有对象动态添加属性
  • Linux进程信号(信号的产生)
  • 97_api_intro_imagerecognition_pdf2word
  • 【算法】【优选算法】二分查找算法(上)
  • springboot初体验
  • 使用kalibr_calibration标定相机(realsense)和imu(h7min)
  • 绿色工厂认定流程
  • 《Python游戏编程入门》注-第5章5
  • LangChain Ollama实战文献检索助手(二)少样本提示FewShotPromptTemplate示例选择器
  • K倍区间 C++
  • Linux - 弯路系列3:安装和编译libvirt-4.5.0
  • Jenkins插件使用问题总结
  • u盘怎么重装电脑系统_u盘重装电脑系统步骤和详细教程【新手宝典】
  • Sql server查询数据库表的数量
  • Linux学习笔记之软件包管理RPM与YUM
  • 15分钟学 Go 第 41 天:中间件的使用
  • 《Python 与 SQLite:强大的数据库组合》
  • Golang | Leetcode Golang题解之第552题学生出勤记录II
  • Vue3 常用代码指南手抄,超详细 cheatsheet
  • 结构体是否包含特定类型的成员变量
  • 堆排序与链式二叉树:数据结构与排序算法的双重探索
  • 用 Python 从零开始创建神经网络(四):激活函数(Activation Functions)
  • 使用 Flask 和 ONLYOFFICE 实现文档在线编辑功能