PBFT 算法原理简介
什么是 PBFT?
Practical Byzantine Fault Tolerance ,实用拜占庭容错。
什么是 BFT?
Byzantine Fault Tolerance ,拜占庭将军问题。
拜占庭将军的问题是什么?
简单地说,是一种少数服从多数的问题。拜占庭罗马帝国的每块封地都驻扎一支由将军统领的军队,将军与将军之间只能靠信差传递消息。在战争时期,拜占庭军队只有占据人数优势情况下,才能夺取目标的胜利。但在军队内有可能存有叛徒,当敌军与之联合起来大于忠诚将军数量时,进攻就会失败。
pBFT 算法的提出主要是为了解决拜占庭将军问题。
要解决这个问题的前提是通信必须是可靠的,如果通信不可靠则问题无解。而拜占庭将军问题中通过通信不可靠而试图达成一致的结果几乎不可能或者非常困难。所以要在通信可靠的前提下来解决此问题。也就是在系统上有一些恶意组件不断发送错误信息的情况下让系统依旧正常运行的能力。
PBFT 原理
在系统中有一个节点会被当做主节点,而其他节点都是子节点。系统内的所有节点都会相互通信,最终目标是大家能以少数服从多数的原则达成数据的共识。
pbft 算法的基本流程主要有以下四步:
- 客户端发送请求给主节点
- 主节点广播请求给其它节点,节点执行 pbft 算法的三阶段共识流程。
- 节点处理完三阶段流程后,返回消息给客户端。
- 客户端收到来自 f+1 个节点的相同消息后,代表共识已经正确完成。
为什么收到 f+1 个节点的相同消息后就代表共识已经正确完成?从上一小节的推导里可知,无论是最好的情况还是最坏的情况,如果客户端收到 f+1 个节点的相
PBFT 算法原理简介相关推荐
- 支持向量机算法原理简介
1,支持向量机概念简介 分类作为数据挖掘领域中一项非常重要的任务,它的目的是学会一个分类函数或分类模型(或者叫做分类器),而支持向量机本身便是一种监督式学习的方法,它广泛的应用于统计分类以及回归分析中 ...
- 逻辑回归算法原理简介
1,逻辑回归简介 逻辑回归完成分类任务,是经典的二分类算法(也可以解决多分类问题),机器学习算法一般选择先逻辑回归(优先选择)再用复杂的,逻辑回归的决策边界可以是非线性的(高阶).可以通过参数对结果进 ...
- RSA算法原理简介,非对称加密,公开密钥算法(易懂篇)
RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解.我们经 ...
- 深度学习算法 | LSTM算法原理简介及Tutorial
北京 | 深度学习与人工智能研修 12月23-24日 再设经典课程 重温深度学习 阅读全文 > 正文共4880个字 17张图,预计阅读时间:13分钟. 1.背景 LSTM(Long Short ...
- GNSS/INS松组合算法原理简介
文章目录 卡尔曼滤波简介 概念 内容 方法 卡尔曼滤波器的初始化 系统状态 微分方程 离散化 GNSS 位置观测方程 状态转移矩阵 系统噪声方差阵 系统噪声驱动阵 本篇博文的矩阵展开都是根据状态向量为 ...
- AVS-CABAC算法原理简介2
CABAC是H264的一种熵编码方案,相比如H264的另外一种熵编码方案CAVLC而言,在可接受的视频质量(30dB到38dB之间)内变化时,前者可节约平均9%到14%的码流.CABAC有以下几个特性 ...
- 线性回归算法原理简介
1,线性回归概念 回归和分类的区别:简单地说,回归就是通过数据预测出一个目标值(实际值),分类就是通过数据预测出一个类别(二分类,多分类). 比如:银行贷款实例 (1)数据:每个个人(样本)的工资和年 ...
- h264—CABAC算法原理简介1
Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC 简称Cabac,H264中的一种熵编码方式:基于上下文的自适应二进制算 ...
- 银行家算法原理及代码实现
银行家算法原理 简介 银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法.它 ...
最新文章
- 获取地区html代码,根据ip地址获取所在城市信息(省市县)代码
- 每天一个 Linux 命令(13):less 命令
- “有一个产品经理的女朋友是什么体验?”
- ES6 Map和Set的用法笔记
- Hibernate Collection Cache如何工作
- Tecplot如何提取某点数据并导出
- centerpython_centeros下安装python3
- Linux命令详解系列(一)——find命令详解
- java核心教程_核心Java教程
- 实用的软件安装及使用
- UmiJS介绍--快速上手(一)
- 使用脚注添加网页类参考文献(使用word)
- 红米note10和红米note10pro的区别
- matlab怎么输入斜杠,如何实现Matlab的mldivide(又称反斜杠运算符“ \”)
- mysql 提升tps_MYSQL的TPS优化
- (十五:2020.08.28)CVPR 2013 追踪之论文纲要(译)
- YOLOV3-项目解析+关键点理解
- 【文学文娱】《人类简史》--从动物到上帝
- 如何用W7100A实现串口转以太网(一)
- Agora Flat 开源教室一周年总结
热门文章
- Saving James Bond - Easy Version 原创 2017年11月23日 13:07:33
- 分块试水--CODEVS4927 线段树练习5
- java代码生成器 快速开发平台 二次开发 外包项目利器 springmvc SSM后台框架源码...
- Codeforces Round #148 (Div. 2)
- Oracle优化 -- 关于Database Buffer Cache相关参数DB_CACHE_SIZE的优化设置
- 《机器学习》周志华 习题答案9.4
- Hibernate所用15个jar包
- 一些常用的系统存储过程
- Kylin启动异常:java.lang.outofMemoryError:Requested array size exceeds VM limit
- ubuntu 转mysql_(转)Ubuntu 16.04下安装MySQL