本文介绍了实用拜占庭容错算法(PBFT)。

Fabric在v0.6中采用的是PBFT算法,在v1.0.0-preview中是SBFT算法,在v1.0.0-release中文档上说PBFT还在开发中,项目中目前还没有实现(⊙o⊙)…但是万变不离其宗都是对BFT算法的一些优化改进。

解决的问题

拜占庭算法主要解决了缺少可信的中央节点和可信任的通道的情况下,分布在网络中的各个节点如何达成共识的问题,实用拜占庭算法是拜占庭算法的改进,主要改进了拜占庭算法效率不高的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。

基本概念

  • 客户端(client)负责发送请求。
  • 副本(replica)所有参与提供服务的节点。
  • 备份节点(backup)主节点外的所有节点。
  • 主节点(primary)从副本中选出提供主要服务的节点。
  • 视图(view)主节点和副本之间编号的一次快照。

PBFT是一种状态机副本复制算法,即服务作为确定有限状态机进行建模,状态机在分布式系统的不同节点进行副本复制。每个状态机的副本都保存了服务的状态,同时也实现了服务的操作。

在确定有限自动机中,每个状态对每个可能输入只有精确的一个转移,在输入顺序一致,起始状态一致的情况下输出也必然一致。这也就对PBFT算法中的副本提出了两个限定 :

  1. 所有节点必须是确定性的。也就是说,在给定状态和参数相同的情况下,操作执行的结果必须相同。
  2. 所有节点必须从相同的状态开始执行。

在这两个限定条件下,即使失效的副本节点存在,PBFT算法对所有非失效副本节点的请求执行总顺序达成一致,从而保证安全性。

将所有的副本组成的集合使用大写字母R表示,使用0到|R|-1的整数表示每一个副本。为了描述方便,假设|R|=3f+1,这里f是有可能失效的副本的最大个数。尽管可以存在多于3f+1个副本,但是额外的副本除了降低性能之外不能提高可靠性。

算法流程

  1. 请求阶段:客户端向主节点发送请求。
  2. 预准备阶段:主节点分配一个序列号n给收到的请求,然后向所有备份节点广播预准备消息,预准备消息的格式为<<PRE-PREPARE,v,n,d>,m>,这里v是视图编号,m是客户端发送的请求消息,d是请求消息m的摘要。
  3. 准备阶段:备份节点i接受了预准备消息<<PRE-PREPARE,v,n,d>,m>,则进入准备阶段。在准备阶段的同时,该节点向所有副本节点发送准备消息<PREPARE,v,n,d,i>,并且将预准备消息和准备消息写入自己的消息日志。
  4. 确认阶段:副本节点收到2f个从不同副本节点发来一致的预准备消息,一共2f+1个一致的预准备消息确认了消息的正确性,然后按照序号n依次执行请求。

预准备阶段和准备阶段确保所有正常节点对同一个视图中的请求序号达成一致。

准备阶段和确认阶段确保了节点执行了大多数都认可的操作。

PBFT算法流程:

PBFT算法流程

主要介绍了PBFT算法的主要流程,其中还有一些问题例如:主节点是如何选择,主节点失效,怎么确定消息的正确性等都不在此赘述,可以参考 区块链核心技术:拜占庭共识算法之PBFT。

https://zhuanlan.zhihu.com/p/34346665

Fabric学习笔记-PBFT算法相关推荐

  1. 【统计学习方法】学习笔记——EM算法及其推广

    统计学习方法学习笔记--EM算法及其推广 1. EM算法的引入 1.1 EM算法 1.2 EM算法的导出 1.3 EM算法在非监督学习中的应用 2. EM算法的收敛性 3. EM算法在高斯混合模型学习 ...

  2. Hyperledger fabric学习笔记(一)

    原文链接:https://blog.csdn.net/zhanglingge/article/details/106012703 fabric分为底层的网络层.权限管理模块.区块链应用模块,通过SDK ...

  3. c语言算法有效性,BerForest—C语言学习笔记-《算法》

    这是我学习C语言的笔记,也可以算是回忆录,反正有利于我的学习,也可以让C语言的新手借鉴. 许多人都在盲目的学习编程,其实学习编程无为就是学习一些编程语法.即使学会了,也不一定能够自己独立的编写出程序了 ...

  4. 目标检测学习笔记--DSSD算法

    1. 论文笔记 1.1 YOLO网络结构 论文链接:http://cn.arxiv.org/pdf/1506.02640 1.2 SSD网络结构 论文链接:http://cn.arxiv.org/pd ...

  5. Fabric 学习笔记-架构初探

    本文介绍了Fabric的架构,以及通过一个简单的Demo来熟悉整个交易流程. Hyperledger fabric V1.0的架构 如下图所示: application提供各种语言的SDK接口. me ...

  6. Hyperledger Fabric学习笔记(三)- 启动网络并测试一个Fabcar的demo

    参考文章:https://blog.csdn.net/jambeau/article/details/107551208 前言:文章底下的$GOPATH即为~/go,也就是当前用户下的go目录,比如我 ...

  7. Hyperledger Fabric学习笔记(二)- Fabric 2.2.1环境搭建

    一.参考文章如下: 1.https://blog.csdn.net/zhanglingge/article/details/106208491 2.https://blog.csdn.net/qq_4 ...

  8. 吴恩达神经网络和深度学习-学习笔记-12-RMSprop算法

    全称是root mean square prop算法 我们假设纵轴方向为b,横轴方向为W.我么希望纵轴slow,横轴fast. 对于第t次迭代,公式如上图. 我们希望W方向fast,B方向slow,所 ...

  9. 【学习笔记】算法101--数学(二)2.3篇

    前言: 学习<算法101>,每天进步一点点,加油

最新文章

  1. Linux2.6内核--抢占
  2. 熟读《阿里巴巴java开发手册》(二、异常日志)
  3. :new与:old的用法
  4. [云炬创业基础笔记] 第四章测试6
  5. CodeForces798cMike and gcd problem
  6. 通过ABAP business switch动态扩展一个ABAP domain
  7. 【Tensorflow】tf.set_random_seed(seed)
  8. 10.Web组件复用
  9. hive on tez集成完整采坑指南(含tez-ui及安全环境)
  10. 1月8日 官方ros.org太慢,配置中科院ros镜像源 关于解决Ubuntu 14.04安装ros提示校验错误解决
  11. requests库及相关知识点(get,post区别,params与data区别)
  12. 「 硬核分享」 ❤️ QQ连连看自动消除外挂完整源码❤️「 复制即用」
  13. ubuntu18.04安装opencv viz模块
  14. 【C++游戏设计】用颜色原理打印平面地图
  15. 网络作战训练模拟仿真管理系统软件
  16. AI先驱Learned-Miller:为面部识别建立监管机构
  17. pse文本行检测_CVPR 2019 | 文本检测算法PSENet解读与开源实现
  18. 2021的最新操作系统知识梳理,建议收藏!
  19. python 小程序搜索排名优化_5个Python脚本优化你的网站搜索引擎优化
  20. 两款不错的网络电视录制软件

热门文章

  1. PHP用CURL伪造IP和来源
  2. 15---Net基础加强
  3. 现代谱估计:多窗口谱
  4. deb和rpm文件安装
  5. 科大星云诗社动态20201129
  6. 科大星云诗社动态20210329
  7. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170327
  8. 通俗解释随机森林算法
  9. CMake2:版本号配置与头文件生成
  10. 小波的秘密5_多分辨率分析和连续小波变换2