paxos算法_共识算法(8) —— PBFT 算法详解

2023-11-14

本文翻译自:伊利诺伊大学厄巴纳-香槟分校助理教授 Ling Ren 开设的讨论课:CS598 Consensus Algorithm

参考论文:

PBFT 原论文 1999​pmg.csail.mit.edu

前言

上一节中我们介绍了经典的Paxos算法。我们知道在节点只可能出现故障错误的情况下,可以实用Paxos算法来解决共识问题。但是如果节点不仅仅可能会宕机,还可能会发送错误的消息呢?实用拜占庭容错算法(PBFT)就是Paxos算法的拜占庭错误的扩展。

我们将逐步改善Paxos算法,最终形成PBFT算法,使之在拜占庭错误的环境下也依然可以使用。

拜占庭错误节点数量

在故障错误下我们知道 n > 2f,而在部分同步的拜占庭错误环境下,n > 3f。这是因为:

  1. 在部分同步算法中,节点接收到 n - f 条消息之后必须要做出决策,否则,如果有f个节点发生故障,将不满足存活性的条件
  2. 在拜占庭错误环境下,节点可能收到的假消息数量 f 一定要小于真消息数量。因此消息数量必须大于 2f
  3. n-f > 2f ,n > 3f

在本文中我们确定 n = 3f+1

身份验证

接下来一步,我们要验证消息的正确性。首先我们要确定消息的发送者一定是来源于某个特定节点,而不是由其他节点伪造。

在此我们引入签名机制,在消息中加入该节点特有的签名。例如:当某个节点收到了 2f + 1 个消息,它可以得知这些消息的签名都是来自 2f + 1 个不同节点,此外我们可以知道这些节点是谁。

从 Paxos 到 PBFT

我们说 PBFT 是 Paxos 算法的一种改进,理由是这两种算法的问题设定和环境设定除了错误类型之外完全一致。因此我们将从 Paxos 开始,讨论出现拜占庭错误的情况下会有哪些情况会导致 Paxos 失败,随后逐步改进,最终形成我们的 PBFT 算法

初始 Paxos 算法

上图为原本的 paxos 算法。我们在安全性证明中提到,如果有节点提交了v,那么至少有f+1 个节点锁定了值v。然而在拜占庭错误中这个断言是不成立的:节点可能假装锁定并且发送投票 vote,而在status的信息中只包含上一轮锁定的值和view。

因此我们在这里需要扩大收到vote的数量,让收到的所有 status 消息中至少有一个诚实节点在上一轮锁定了已经提交的值。

Paxos 的第一次改进:我们扩大票数到 2f+1, 那么下一个view中, 新的leader 收到的 2f+1 个 status中至少有 f+1 个节点在上个 view 锁定了这个已经提交的值。在这f+1 节点中至少有一个诚实节点真正锁定了这个值 v

这样就万事大吉了吗?我们再列举另外几种拜占庭节点可以胡作非为的可能性。

  1. 如果拜占庭节点在 status 消息中给出一个根本不存在的锁定值,而且
    非常高,那么leader会以为这个是最新的值并且发送该值的提议
  2. 如果拜占庭节点是假的 leader, 并且发送假的 proposal 给节点们
  3. 如果拜占庭节点是假的 leader, 并且发送假的 success 消息 (致命!因为所有节点收到success 之后都会commit)

我们需要验证这个节点发的proposal 和 success,status 消息都是真实可信的,因此我们在消息签名的基础上再增加了 backup 的概念:把收到的签名消息收集起来再转发,证明自己收到了这些消息

  1. 证明 success 消息合法:每收到一个投票消息,便把收到的消息和签名一起存在缓存中,在发送的时候带上其中 2f+1 个消息+签名(记为 ),用以证明自己确实收到了2f+1 个投票
  2. 证明 status 消息合法:在 锁定值之前增加一轮投票(见下图):leader 在该轮收集到 2f+1 个投票消息后,一并转发给其他节点;节点在收到这些投票消息后将它存在缓存中,并且在 status消息中带上这些消息+签名,用以证明自己确实可以锁定这些值
  3. 证明 propose 消息合法:在 propose 中带上收到的 2f+1 个status消息中的 2f+1 个消息+签名(一共为
    个签名),用以证明这个 propose 消息是收到足够的status之后发出的

最终的PBFT算法

总结

该算法与原来的PBFT有一点小小的不同:运用签名减少了消息收发的总数量,增加了验证签名的计算量(可以忽略不计,因为分布式系统的主要瓶颈在于IO而非计算)

PBFT算法被广泛运用与各种区块链底层协议中,但是针对不同的情况该算法会有一些低性能的瓶颈,下一章我们将介绍PBFT算法的几种不同的改进

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

paxos算法_共识算法(8) —— PBFT 算法详解 的相关文章

  • STM32固件库(标准外设库)入门学习 第六章TIM定时器(二)

    STM32固件库 标准外设库 入门学习 第六章TIM定时器 二 文章目录 STM32固件库 标准外设库 入门学习 第六章TIM定时器 二 前言 一 定时中断代码 1接线图 2 程序编写 2 1 第一步开启RCC时钟 2 2 第二步选择时基单
  • 大数据应用期末总评

    本作业来自于 https edu cnblogs com campus gzcc GZCC 16SE1 homework 3363 一 将爬虫大作业产生的csv文件上传到HDFS 将爬虫大作业中爬取到的数据文件csv导入到 usr loca
  • 前端API接口的调用

    一 开启API接口 首先我们把模型部署在自己的服务器上之后开启模型的接口 linux环境下 进入模型文件 输入命令行 bash webui sh listen api 实现api接口的开启 我们获得一个api接口的地址 二 API接口调用并
  • Springboot的部分依赖及作用

    SpringBoot2使用Undertow来提高应用性能 spring boot starter undertow
  • 【Linux】---文件基础I/O

    文章目录 回顾C语言文件操作接口 文件相关的系统调用接口 打开和关闭文件 文件的打开方式 文件描述符 文件描述符的分配规则 write read 重定向 dup2 mysell 回顾C语言文件操作接口 在C语言中对于文件的操作有着几个常用的
  • retinaface人脸对齐

    yolov5 face 人脸对齐 yolov5 face align rar 深度学习文档类资源 CSDN下载 GitHub foamliu MobileFaceNet PyTorch PyTorch implementation of M
  • 高等数学教材啃书汇总重难点(三)微分中值定理与导数的应用

    本章节包含多个知识点 一些列微分中值定理是考研证明题的重头戏 而洛必达和泰勒展开则是方法论的天花板难度 虽然对于小题的考察难度较低 整体上仍需重点复习 1 费马引理 2 罗尔定理 3 拉格朗日定理 4 柯西中值定理 5 洛必达法则 6 泰勒
  • 求一个4*4矩阵两对角线元素之和 设计一个程序

    提示你一下 但是只应该加一次 中间行的对角线元素重叠 由于当n是奇数的时候 每行上对角线元素的序号相加是n 1 对角线的元素在每行上的分布是规律的 共n行 不过思想是从行出发 矩阵由数组array n n 表示for int i 0 i
  • 用C语言解“计算工资”题

    7 10 计算工资 某公司员工的工资计算方法如下 一周内工作时间不超过40小时 按正常工作时间计酬 超出40小时的工作时间部分 按正常工作时间报酬的1 5倍计酬 员工按进公司时间分为新职工和老职工 进公司不少于5年的员工为老职工 5年以下的
  • Vue3全局提示(Message)

    Vue2全局提示 Message 可自定义设置以下属性 自动关闭的延时 duration 类型 number 单位ms 默认 3000ms 消息距离顶部的位置 top 类型 number 单位px 默认 30px 调用一次只展示一个提示 调
  • datax源码解析-任务拆分机制详解

    datax源码解析 任务拆分机制详解 写在前面 此次源码分析的版本是3 0 因为插件是datax重要的组成部分 源码分析过程中会涉及到插件部分的源码 为了保持一致性 插件都已大部分人比较熟悉的mysql为例子说明 本文我们来看看datax的
  • [云原生专题-22]:K8S - 集群编排工具K8S与SWARM比较与技术选择

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122750196 目录 前言 第1章
  • Tomcat安装及IDEA配置Tomcat教程

    Tomcat安装 以Tomcat8 5为例 1 网站链接 Apache Tomcat Apache Tomcat 8 Software Downloads 根据个人喜好 我安装的是8 5版本 2 下载完解压即可 我的安装目录为 E Envi
  • R语言入门(一)

    R语言入门 一 在vscode中使用R语言注意事项 按照其他教程安装配置插件 使用run source运行r代码 使用run code 会报错 原因未知 生成正态分布的点数据 import pandas as pd import numpy
  • win7+ VS2010安装CUDA7.0图文说明

    win7 VS2010安装CUDA7 0图文说明 1 查看本机配置 查看显卡类型是否支持NVIDIA GPU 选中计算机 gt 右键属性 gt 设备管理器 gt 显示适配器 NVIDIA GeForce GT 610 从https deve
  • Servlet 基础知识(4)(利用Servlet实现文件上传功能)

    目录 1 DiskFileUpload 类 1 setSizeMax 方法 2 setSizeThreshold 方法 3 setRepositoryPath 方法 4 parseRequest HttpServletRequest req
  • TOOLS_Python获取音域范围

    基于librosa pyin方法 链接 获取基频最值 对比标准音高序列 得到音域范围 def create standard pitch sequence 生成一个包含名称的标准音高序列 T C C D D D E E F F G G G
  • 第七届蓝桥杯省赛C++B组 最大比例

    最大比例 X星球的某个大奖赛设了M级奖励 每个级别的奖金是一个正整数 并且 相邻的两个级别间的比例是个固定值 也就是说 所有级别的奖金数构成了一个等比数列 比如 16 24 36 54 其等比值为 3 2 现在 我们随机调查了一些获奖者的奖
  • sublime text3 安装 golangsublime 配置

    1 安装git 因为golang是通过git来管理远程包的 所以我们首先要安装git 下载地址 http www git scm com download git安装比较简单 直接下一步即可 在Windows Explorer integr

随机推荐

  • Spring Boot:如何配置Undertow容器?不会我教你

    环境说明 Windows10 Idea2021 3 2 Jdk1 8 SpringBoot 2 3 1 RELEASE 一 前言 作为springboot开发者 使用最多的就是Tomcat 这是springboot默认的容器技术 而且是内嵌
  • MyEclipse修改.properties文件的编码

    MyEclipse中新建一个messageResource properties文件 如果输入中文保存时就会提示错误 Save could not be completed Reason some characters cannot be
  • 京东零售大佬为你讲解:黑盒测试的底层逻辑

    什么是黑盒测试 它是把程序看作一个黑盒子 在不考虑程序内部结构的情况下 检查程序功能是否按照PRD的规定正常使用 程序是否能适当地接收输入数据 产生正确的输出 这其实就是黑盒测试的定义 也是黑盒测试的底层逻辑 一般人不会重视定义 但往往就是
  • html5 canvas(小树姐的牛掰到爆了的作品)

    自从小树嫁了个牛逼的前端之后 canvas的境界超过我了 小树demo 小编表示 这个境界 这个几何 让我有种跪舔的感觉 http www wow trend com brand index shtml 这个hover让我彻底凌乱了 div
  • react中Hooks

    React Hook Hooks是什么 常见的Hook 1 state Hook 2 Effect Hook 3 Ref Hook 4 Context Hook React Hook Hooks是什么 1 Hook是react 16 8版本
  • Qt的ui文件不能简单复制

    在使用vs Qt开发时 直接复制另外一个widget类的ui文件 简单改名成当前类对应的ui文件 会导致编译出错 尽可能使用添加的Qt class自带的ui文件 因为ui文件的配置文件中有许多与当前类相关的字符串 简单复制容易报错
  • 二叉树的结点数

    二叉树的结点数 10分 已知二叉树的结点结构定义如下 typedef struct NODE char data struct NODE lch rch NODE 说明 data 为数据域 均为英文大写字母 lch 和 rch 分别为指示左
  • 抖音视频怎么去水印

    水印 一般是指放置在图片 视频或者文档上的文字或者图标 用来做标记或者品牌宣传 我们从网上获取的文件资源很多都是带有水印的 比如从抖音短视频下载的视频就会带有水印 为了达到更好的观看效果 我们就需要将这些视频自带的水印给去除掉 下面就来教教
  • Unity Shader渲染顺序 坐标系 和光照模型

    1 Shader中的渲染顺序 是按照Queue Geometry RenderType Opaque Queue是一般渲染时候的顺序 RenderType是后处理特效使用的渲染顺序 Background Geometry AlphaTest
  • JAVA中XML格式字符串转为javabean(对象),然后返回xml格式字符串

    一 引入相关依赖 pom xml文件配置如下所示
  • Road Construction POJ - 3352(tarjan双连通缩点模板)

    题目描述 给一个无向连通图 至少添加几条边使得去掉图中任意一条边不改变图的连通性 即使得它变为边双连通图 include
  • CH3___Debugging C++ Programs

    3 1 Syntax and semantic errors Modern compilers have been getting better at detecting certain types of common semantic e
  • Linux下yum命令及软件的安装

    yum命令 1 yum install softwarename 安装 2 yum remove softwarename 卸载 安装dhcp及卸载 mkdir iso 建立目录 mv home kiosk Desktop iso iso
  • tcp 是一个安全的网络协议

    1 tcp 是一个安全的网络协议 确定双方的收发能力之后 才会真正传输数据 2 tcp 建立起一个连接 比较消耗成本 所以比较平稳 安全 3 3次握手 发起连接 双方确认 确认双方的收发能力 客户端告诉服务器i我要创建连接i 一次 服务器告
  • 出栈的合法性检测

    对于一个给定的入栈顺序 可能的出栈顺序会有很多 但是肯定都要遵循栈 后进先出 的特点 那么怎么进行合法性检测呢 算法思想如下 定义变量InIndex标记入栈序列的当前位置 定义OutIndex标记出栈序列的当前位置 对InIndex和Out
  • 利用纯净语音和噪声合成不同信噪比的训练数据

    如题 这应该算是我前往语音这座大山的第一步 在此做出记录 一 工作背景 由于需要进行单通道降噪的实验 但是现在只有纯净语音和噪声数据 而在阅读文章的过程中 大家并没有将这个细小的内容写道论文中 的确也不应该 做出来之后确实感觉蛮简单的 所以
  • python爬虫ip被封怎么办?

    用python写的爬虫 设置了headers 包括host和useragent 设置了cookies 访问的结果是 访问过于频繁 请输入验证码 但是用浏览器访问怎么刷新都没有问题 这个时候大致可以判定你被反爬虫锁定 那怎样解决 你可能不太了
  • Python无法识别csv文件

    我的报错 utf 8 codec can t decode byte 0xc9 in position 84 invalid continuation byte 大概意思是utf 8无法识别文件里的一些信息 后面将encoding里面改成下
  • 【Java编程】图书管理系统

    图书管理系统 我们用一个列表存放书籍信息 private static List
  • paxos算法_共识算法(8) —— PBFT 算法详解

    本文翻译自 伊利诺伊大学厄巴纳 香槟分校助理教授 Ling Ren 开设的讨论课 CS598 Consensus Algorithm 参考论文 PBFT 原论文 1999 pmg csail mit edu 前言 上一节中我们介绍了经典的P