PBFT协议在超过100个节点的时候性能会下降
作者:maxdeath
链接:https://www.zhihu.com/question/60058591/answer/173970031

首先要搞清为什么PBFT,乃至所有的BFT都没法应用于超过100个节点。原因的关键在于O(N^2)的消息复杂度。这是什么意思呢?点对点的消息传输需要发一个消息就够了,这是O(1)的消息复杂度,要是广播一个消息,需要把消息发给网络里所有人一人一份,就是O(N)的消息复杂度,而想要可靠地,在有拜占庭节点(恶意节点)存在的网络里广播一条消息的话,至少需要O(N^2)的消息复杂度,也就是说,如果网络有100个节点,如果你想让确认网络里的其他人都确实地收到你的消息,你至少要发10000条消息。这性能一看就好不了。于是才有了比特币,它把可靠的那部分用奖励,挖矿和最长链解决了,于是再大的网络也只是O(N)的消息复杂度,这就scalable了。但是另一个问题就出现了——大网络里传输效率和延迟有瓶颈,而这种瓶颈会制约可靠性。也就是说你广播的东西太大的话,比特币的那套奖励,挖矿和最长链的东西就不是那么好使了。于是,目前所有的提高scalability的方法基本上就是结合两者,也就是分层。无论是叫分层也好,委员会选举也好,差不多想法就是我们把某一部分的可靠性用比特币的方法解决,剩下的部分用BFT。这其实和代议制民主很像——所有人一起讨论事情太难了,那么我们让所有人选代表,然后选出来几个代表讨论事情就高效多了。但接下来的问题是这两部分怎么对接?两个方法对于恶意节点的数量要求不一样(BFT必须严格少于1/3,比特币的话是算力小于1/4),要不要奖励(自私挖矿算不算恶意呢?),共识类型不一样(BFT是最终共识,比特币是最长链共识,也就是允许分叉),是许可还是非许可。这些都是处理起来很让人头疼的问题,基本上,所有的分层算法都得要给出这些东西。而我目前为止还没有看到一个完全找不出漏洞的算法。就拿你说的sharding的那篇文章说吧。这个Elastico,或者叫SCP,我很惊讶这个竟然能发表,他们对于无穷小量的处理太随意了。我不是说他们结果一定不对,但是他们的证明是有问题的。他们分层非常的幼稚,他的方法就是简单的随机选,而随机选的时候,他们就是简单的说如果我们的随机方法是公平的,那么当这个小组的人数很大的时候,这个小组恶意节点超过1/3的可能无穷小。

异步拜占庭容错(aBFT),以加快实现不可逆转性。 aBFT算法在1秒内提供100%的不可逆性确认。

POW
POW机制是依赖机器算力进行数学运算来获取记账权,资源消耗相比其他共识机制高、可监管性弱,同时每次达成共识需要全网共同参与运算,性能效率比较低,容错性方面允许全网50%节点出错。POW机制最早出现在比特币中,这也是区块链里出现的较早的共识机制。
缺点:
浪费能源;
区块的确认时间难以缩短;
新的区块链必须找到一种不同的散列算法,否则就会面临算力攻击;
容易产生分叉,需要等待多个确认;
永远没有最终性,需要检查点机制来弥补最终性;

POS( Proof of Stake)权益证明

DPOS(Delegated Proof of Stake)股份授权证明机制
DPOS与POS原理相同,只是选了一些“人大代表”。BTS社区最先提出了DPOS机制。最近较热的EOS也是采用了DPOS机制。
核心思想:百分之五十一的矿工具有不可逆转的权利。
优点:该模式可以每30秒产生一个新区块,并且在正常的网络条件下区块链分叉的可能性极其小,即使发生也可以在几分钟内得到解决。
缺点:整个共识机制还是依赖于token,很多商业应用是不需要token存在的。

POOL验证池
一句话介绍:基于传统的分布式一致性技术,加上数据验证机制。
优点:
不需要token也可以工作,在成熟的分布式一致性算法(Pasox、Raft)基础上,实现秒级共识验证。
缺点:
去中心化程度不如Bitcoin;
更适合多方参与的多中心商业模式。

一致性算法(BFT-DPOS)
EOS.IO软件能够精确的每0.5秒生成一个块,并且只有一个生产者有权在任何给定的时间点生成一个块。如果在预定时间没有生成块,则跳过该时间段的块。当跳过一个或多个块时,区块链中会出现0.5秒或更多秒的间隔。

PBFT性能会下降? 各种算法的对比。的更多相关文章

  1. react性能调谐与diff算法

    一个页面其实就相当于是一颗dom树,里面有很多它的子节点,然后你每次去操作一个事件,它都会生成一个虚拟dom,它会跟上一个虚拟dom进行比对,这里运用的算法叫做diff算法,当它找到需要改变的组件的时 ...

  2. paip.提升性能----硬盘不同转速不同缓存对比转

    paip.提升性能----硬盘不同转速不同缓存对比转 西数 WDC WD2500BEVT-08A23T1 ( 250 GB / 5400 转/分 ) 5400转 8M缓存 单碟250 GB      ...

  3. 梯度下降优化算法综述与PyTorch实现源码剖析

    现代的机器学习系统均利用大量的数据,利用梯度下降算法或者相关的变体进行训练.传统上,最早出现的优化算法是SGD,之后又陆续出现了AdaGrad.RMSprop.ADAM等变体,那么这些算法之间又有哪些 ...

  4. MySQL 偶尔抽风,性能突然下降

    有时会碰到这样的情况,一条 SQL 在平时执行没问题,很快.但是突然某个时间执行的就会很慢,而且这种场景并不能复现,只能随机发送的. SQL 执行突然变慢的原因 在之前讲解 MySQL Redo lo ...

  5. 在PYTHON中使用StringIO的性能提升实测(更新list-join对比)

    刚开始学习PYTHON,感觉到这个语言真的是很好用,可以快速完成功能实现. 最近试着用它完成工作中的一个任务:在Linux服务器中完成对.xml.gz文件的解析,生成.csv文件,以供SqlServe ...

  6. Memcached 笔记与总结(8)Memcached 的普通哈希分布算法和一致性哈希分布算法命中率对比

    准备工作: ① 配置文件 config.php ② 封装 Memcached 类 hash.class.php,包含普通哈希算法(取模)和一致性哈希算法 ③ 初始化 Memcached 节点信息 in ...

  7. Python和C#基本算法实现对比

    最近在学习python,很多入门的例子又写了一遍,基本上是C#和Python都写了一遍,对比发现语言真是相通啊,只是语法不同而已. python开发也是用的VS,很好用,特别是代码段运行,选中一段py ...

  8. **测试某系统切换成docker部署之后性能的下降情况**

    ###分析 * 对比:某系统/docker* A:某系统性能情况* B:dockers部署的性能情况* 求出A&B两者之间的差异* 确定性能指标(tps)* 测试报告里体现:tps的变化 ## ...

  9. [转]nginx折腾记(HTTP性能能测试,与Apache对比)

      话说nginx在大压力的环境中比apache的表现要好,于是下载了一个来折腾一下. 下载并编译安装,我的编译过程有点特别: 1.去除调试信息,修改$nginx_setup_path/auto/cc ...

随机推荐

  1. aop 和castle 的一些 学习文章

    https://www.cnblogs.com/zhaogaojian/p/8360363.html

  2. 居中未知元素(翻译https://css-tricks.com/centering-in-the-unknown/)

    在web开发中,当你遇到居中元素时,知道越多关于元素本身和父级元素的信息,居中做起来就很轻松.但是,当遇到你一点都不知道的元素该怎么办? It's still kinda doable. 不会很难:已 ...

  3. linux下jdk的安装配置

    1.下载jdk:地址 选中你选择的版本,下载linux版本对应你系统的32位或64位. 我这里选择的是64位. 2.使用你的ssh直连工具把安装包丢到/usr/local/目录下 3.解压安装jdk ...

  4. swiper轮播始终居中active图片

    用的是vue-awesome-swiper 在vue项目中,参数方法与swiper一致.使用场景如下: 左侧小图一共八张,默认显示的是三张,始终保持activeimg在中间,提升用户体验度.swipe ...

  5. lintcode_111_爬楼梯

    爬楼梯   描述 笔记 数据 评测 假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? 您在真实的面试中是否遇到过这个题? Yes 哪家公司问你的 ...

  6. vue 改变我们插值的符号{{}}改为${}

    delimiters的作用是改变我们插值的符号.Vue默认的插值是双大括号{{}}.但有时我们会有需求更改这个插值的形式. delimiters:['${','}'] 现在我们的插值形式就变成了${} ...

  7. R-描述性统计

    RT...老实说这一章我是抖的...但是,加油- # 从1:100中均匀抽取size个数据,replace=TRUE指有放回抽样,数据可以重复 x = sample(1:100, size = 100 ...

  8. caioj:1093: 并查集2(scy的删边问题) C++

    题目描述 [题目描述] 读入一个无向图(可能含有多个连通分支),输出最多能删掉多少条边,而不改变这个图任意两点的连通性(原来连通的两个点依然连通,不连通的依然不连通). [输入格式] 第一行为图的顶点 ...

  9. python——标准异常总结

    请参考此网站: Python 标准异常总结 https://fishc.com.cn/forum.php?mod=viewthread&tid=45814&extra=page%3D1 ...

  10. 笔记-python-多环境-virtualenv

    笔记-python-多环境-virtualenv 1.      多环境 在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.6.4,所有第三方的包都会被pip安装到Pytho ...