PBFT(一):过程
PBFT 算法的基本流程主要有以下四步:
- 客户端(不是主节点)发送请求给主节点(PBFT算法只是在各个服务器节点上运行的)
- 主节点广播请求给其它节点,节点执行 pbft 算法的三阶段共识流程。
- 节点处理完三阶段流程后,返回消息给客户端。
- 客户端收到来自 f+1 个节点的相同消息后,代表共识已经正确完成。(要注意各个阶段确认消息的数量)
下面介绍 pbft 算法的核心三阶段流程,如下图所示:
算法的核心三个阶段分别是
- pre-prepare 阶段(预准备阶段)
- prepare 阶段(准备阶段)
- commit 阶段(提交阶段)
图中的C代表客户端,0,1,2,3 代表节点的编号,打叉的3代表可能是故障节点或者是问题节点,这里表现的行为就是对其它节点的请求无响应。0 是主节点。整个过程大致是如下:
首先,客户端向主节点发起请求,主节点 0 收到客户端请求,会向其它节点(不包括主节点)发送 pre-prepare 消息,其它节点就收到了pre-prepare 消息,就开始了这个核心三阶段共识过程了。
Pre-prepare 阶段:节点收到 pre-prepare 消息后,会有两种选择
- 一种是接受
- 一种是不接受
什么时候才不接受主节点发来的 pre-prepare 消息呢?
一种典型的情况就是如果一个节点接受到了一条 pre-pre 消息,消息里的 v 和 n 在之前收到里的消息是曾经出现过的(各个节点都有要给消息缓存池,可以将收到过的消息存储起来[1]),但是 d 和 m 却和之前的消息不一致,或者请求编号不在高低水位之间(高低水位的概念在下文会进行解释),这时候就会拒绝请求。拒绝的逻辑就是主节点不会发送两条具有相同的 v 和 n ,但 d 和 m 却不同的消息。
Prepare 阶段:节点同意请求后会向其它节点发送 prepare 消息。
这里要注意一点,同一时刻不是只有一个节点在进行这个过程,可能有 n 个节点也在进行这个过程。因此节点是有可能收到其它节点发送的 prepare 消息的。在一定时间范围内,如果收到超过 2f 个不同节点的 prepare 消息,就代表 prepare 阶段已经完成。
Commit 阶段:于是进入 commit 阶段。(是在这个阶段后才执行客户的请求)
向其它节点(包括主节点)广播 commit 消息,同理,这个过程可能是有 n 个节点也在进行的。因此可能会收到其它节点发过来的 commit 消息,当收到2f+1个 commit 消息后(包括自己),代表大多数节点已经进入 commit 阶段,这一阶段已经达成共识,于是节点就会执行请求,写入数据。
注解:
V:当前视图的编号。视图的编号是什么意思呢?比如当前主节点为 A,视图编号为 1,如果主节点换成 B,那么视图编号就为 2,这个概念和 raft 的 term 任期是很类似的。
N:当前请求的编号。主节点收到客户端的每个请求都以一个编号来标记。
M:消息的内容
d或D(m):消息内容的摘要
i: 节点的编号
【1】PBFT算法会将每个节点收到的请求都缓存下来,知道所有的节点都完成这个请求的时候(PBFT算法有一个stable checkpoint变量来表示当前所有节点已完成的最大请求序号),会在缓存中将这个消息清除,并且会记录到日志当中
参考 https://zhuanlan.zhihu.com/p/35847127
PBFT(一):过程相关推荐
- DNBFT共识——一种可动态调节网络节点数的PBFT优化方案
摘要 区块链类比于一种分布式存储系统, 这种存储系统有可持续增长,不可篡改的特点. 区块链中的共识是多个节点对某一个状态达成一致的过程. PBFT是一种快速的共识机制. 但有无法动态调整网络的缺陷. ...
- 区块链共识机制 (Consensus)(PoW,PoS,PAXOS,RAFT,PBFT)
文章目录 Consensus Proof of Work(PoW) Proof of Stake(PoS) PAXOS Phases in PAXOS Prepare Phase Accept Pha ...
- Hands-On Hyperledger Fabric——Byzantine-fault tolerant(BFT)过程详解
文章目录 拜占庭问题描述 分布式架构遭遇的问题 Practical Byzantine Fault Tolerance(PBFT) PBFT过程详解 拜占庭问题描述 拜占庭将军问题是分布式计算中的一个 ...
- 联盟链中的Hyperledger Fabric、FISCO BCOS和CITA
本文援引自链接:https://mp.weixin.qq.com/s/4JAZGwI32bZNlxBqPfkihg 一.摘要 第 46 届世界经济论坛达沃斯年会将区块链与人工智能.自动驾驶等一并列入& ...
- 区块链与联邦学习的研究
本文分别介绍了区块链与联邦学习的研究现状.架构和运行原理.主要技术及局限性,并针对区块链与联邦学习所存在的问题,通过分析区块链与联邦学习各自的特点,探讨了如何将区块链与联邦学习进行融合互补,介绍了两种 ...
- 初链主网上线技术解读之-混合共识
背景 从2017年11月启动至今,经过历时近一年的研究.开发与测试,初链主网Beta版于新加坡时间2018年09月28日08:00正式上线,在此之前,07:56分PBFT委员会第一次共识出块和True ...
- 【概念】FISCO-BCOS证书进行Dapp开发需要注意什么?讲解config.ini,group.id.genesis,group.id.ini
前言 FISCO-BCOS是联盟链,一说到联盟链就少不了证书的存在,无论是节点证书还是加密证书都有着重要的作用,目前证书配置最多的是hyperledger fabric,这一节我们就简单的讲一下爱FI ...
- 【全网首发】FISCO-BCOS从底层讲起链从配置文件开始解析,拆开build_chain.sh,从配置文件解读,起链时会有哪些文件产生,区块链端口解读RPC,P2P,channel,账本文件
前言 今天学习了FISCO-BCOS的节点信息配置讲解,来分开讲一下FISCO-BCOS是在正常单群组四节点的情况下如何调用文件.篇幅较长请耐心观看,如果觉得小弟写的还可以,留下红心和关注帮助小弟冲一 ...
- 开源架构Fabric、FISCO BCOS(以下简称“BCOS”)、CITA 技术对比
转自 https://www.coingogo.com/news/41300 联盟链技术哪家强?开源架构Fabric.FISCO BCOS(以下简称"BCOS").CITA 技术对 ...
- 区块链技术:架构及进展
title: 区块链技术:架构及进展 总结归纳 1 引言 传统数据库 传统的关系型数据库管理系统.NoSQL数据库管理系统 单一机构进行管理和维护 单一机构对所有数据拥有绝对的控制权 其他机构无法完整 ...
最新文章
- vue路由 routers的写法:require用与不用
- 液晶显示模块的分类和基本知识
- php 模拟ip访问网页,curl模拟浏览器,ip,来源,进行网站采集的实现方法
- 【杂项】2021年年度报告
- 利用STM32F103单片机输出SPWM波
- 黄聪:Delphi 日期格式问题 - is not a valid date
- 99se 封装属性设置大全
- 怎样做中国的自由译者
- 拖库 洗库 撞库的概念
- 用Ventoy同时引导ubuntu/centos/windows多系统安装
- 串行外设接口(Serial Peripheral Interface, SPI)
- c语言生成exe文件的作用,c语言怎么生成exe文件
- Quick BI、帆软Fine BI等BI产品,优势详细介绍
- (十四)STM32——外部中断(EXTI)
- npm 安装淘宝镜像报错 npm ERR! code EEXIST
- 树-生成树-最小生成树
- index.php g wap,index.php?g=Wap
- 天龙八部手游服务器等级哪里显示,天龙八部手游
- 微信小程序初体验-苏州实时公交API
- 降级论–只需要降级,就能创造更大的价值,也能获得更大的满足。