2017-01-04 Jin Gao HoneyBadgerBFT:一个网络环境无关的Byzantine容错的分布式共识协议

作者介绍:

夏雨,麻省理工学院电子工程与计算作者机科学系博士一年级在读,本科毕业于清华大学姚班。目前的研究兴趣包括分布式系统与理论密码学。

随着密码货币的流行,人们把越来越多的注意力放在大规模、Byzantine容错的分布式协议上。这些协议可以用来执行一些“任务敏感”的应用,例如金融交易系统、能源维护系统、交通调度系统等。这样的协议可以保证即使集群中的部分机器出现故障或者因遭受攻击被敌手支配的情况下,剩下的大部分主机还可以使任务正常进行。在这样的应用场景中,传统的解决方案是使用弱同步(Weakly Synchronous)的分布式协议,例如PBFT。这类弱同步协议的活跃性(Liveness)仍然依赖于对于网络延迟的假设,我们认为这样的协议不适用于极端的网络环境(在我们的论文中,我们给出了一个让PBFT失败的网络环境)。

因此我们提出了HoneyBadgerBFT协议,这是据我们所知的第一个完全异步的共识协议,它不依赖于任何关于网络环境的时间假设

目前HoneyBadgerBFT仅支持封闭网络,即在协议开始前,集群中的主机数量是已知的,并且在协议执行过程中没有新的主机加入网络

HoneyBadgerBFT的核心部分由两部分组成,分别是原子广播(Atomic Broadcast)和异步公共子集协议(Asynchronous Common Subset),这两个协议的性质请参考论文的第4章 。

在协议开始以前,每个主机准备好各自的提案(即试图写入共识的数据),启动N个原子广播的实例(N为网络中主机的个数)。在某一个原子广播完成以后遂将该广播对应的主机编号作为输入启动异步公共子集协议。异步公共子集协议在收集到足够多的主机编号后终止,所有的非敌手主机得到一个关于子集的共识。根据这个子集这些主机将从原子广播阶段获得的提案写入共识。

我们的原子广播取自Bracha在1987年提出的协议 [1],如论文中图2所示。我们在[1]的基础之上进行了许多优化。例如,我们使用了消除码来改善它的渐近通信复杂度 [2]。

我们使用的异步公共子集协议来自Ben-Or的构造[3],如论文中图4所示。直观来讲,它使用N个二进制共识协议实例并根据其结果来决定一个公共子集。在我们的工作中,我们使用了Mostefaoui等人的随机二进制共识协议原型[4]。

这个随机二进制共识协议中依赖于一个分布式公共随机源,我们使用了一个简单的阈值加密系统来设计这个随机源。

在核心部分之外,我们还要考虑对手利用网络延迟操纵提案选择的可能性,完整的协议在论文中的图1中描述。

HoneyBadgerBFT的容错率为该模型下理论最优的 。

协议的期望运行时间为个异步时间单位(以公共随机源为准)。N台主机间的消息总和的通信复杂度为, 其中为各个主机的提案中最大的一个,为安全参数。如果我们每次投放大小的消息平摊到每个主机上,的额外开销将被消除。通信复杂度将变为每台主机。

我们在Amazon EC2服务上进行了大规模的实验(104台主机,容错量为26,分布在EC2的8个区横跨5个大洲),在论文中我们提供了消息大小(Batch Size)和通过量(Throughput)的折线图(图6),消息延时和通过量的折线图(图7),以及与PBFT的消息通过量的对比(图8),当主机数目稍大的时候,PBFT处于劣势。由于HoneybadgerBFT对网络环境的要求很低,我们将其在Tor上也进行了实验,最高达到了800Tx/sec的通过量。

image.png

image.png

参考文献
  • [1] G. Bracha. Asynchronous byzantine agreement protocols. Information and Computation, 75(2):130–143, 1987.
  • [2] C. Cachin and S. Tessaro. Asynchronous verifiable information dispersal. In Reliable Distributed Systems, 2005. SRDS 2005. 24th IEEE Symposium on, pages 191–201. IEEE, 2005.
  • [3] M. Ben-Or, B. Kelmer, and T. Rabin. Asynchronous secure computations with optimal resilience. In Proceedings of the thirteenth annual ACM symposium on Principles of distributed computing, pages 183–192. ACM, 1994.
  • [4] A. Mostefaoui, H. Moumen, and M. Raynal. Signature-free asynchronous byzantine consensus with t< n/3 and o (n 2) messages. In Proceedings of the 2014 ACM symposium on Principles of distributed computing, pages 2–9. ACM, 2014.

作者:大圣2017
链接:https://www.jianshu.com/p/425d7fde411a
來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

HoneyBadgerBFT:一个网络环境无关的Byzantine容错的分布式共识协议相关推荐

  1. Ubuntu 16.04 配置Raft(分布式共识协议)及Maven+Java运行环境

    本文用于在Ubuntu 16.04中配置分布式共识协议 Raft, 运行环境为Java + Maven, 开辟端口为 8051-8080, demon中实际使用端口为8051-8053 Raft软件包 ...

  2. 以太坊性能优化:分片技术、雷电网络、Casper-下一代以太坊共识协议

    第九章 文章目录 第九章 一.分片技术 二.雷电网络 三.Casper-下一代以太坊共识协议 总结 一.分片技术 分片是为了解决所有区块链面临的扩展性问题,将在以太坊2.0实现.总体来说,分片的作用是 ...

  3. 搭建一个简单的SDN网络环境

    第1小题:简单网络 说明:由于对于SDN架构的理解在学界和业界并没有统一,为了方便参赛队员选择,对于初学者,大赛推荐OpenFlow作为南向接口来实现SDN环境,以下给出分别针对采用OpenFlow和 ...

  4. VMware 网络环境配置(win7系统)

    我们在装完VMware虚拟机以及windows7系统之后,需要虚拟机与本地计算机通信,或者需要虚拟机上网,这就需要我们进行虚拟机的网络配置.这篇文章将简单介绍VMware网络配置的三种方式,并完成NA ...

  5. 基于raft共识搭建的Fabric1.4网络环境

    基于Raft共识搭建多机Fabric1.4网络环境 ​ 由于近期fabric官方继fabric1.4LTS版本之后,又推出了fabric1.4.1的正式补丁版本,虽然fabric1.4.1是fabri ...

  6. Linux就这个范儿 第12章 一个网络一个世界

    Linux就这个范儿 第12章 一个网络一个世界 与Linux有缘相识还得从一项开发任务说起.十八年前,我在Nucleus  OS上开发无线网桥AP,需要加入STP生成树协议(SpanningTree ...

  7. 医疗行业多层级复杂网络环境下的消息传输(远程会诊)架构与实现

    近期接手一个针对医疗系统远程会诊平台的技术改造工作,这项工作中的一些技术问题颇具代表性,我会在此记录这一工作的过程和技术细节,如果条件允许,会在 GitHub 上开源部分业务无关的纯技术实现,敬请关注 ...

  8. 计算机病毒实践汇总五:搭建虚拟网络环境

    在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索.敬请批评指正! 涉及内容: INetSim安装及使用 ApateDNS安装及使用 1. 搭建病毒分析网络环境原因 使用虚拟机作为 ...

  9. c++ 打开添加删除程序_Docker 添加容器到一个网络

    要创建一个安全并且能够协同运行的 Web 应用程序,你需要创建一个网络. 通过网络,在默认情况下为容器提供了完全独立的环境.在你第一次运行一个容器的时候,你可以将容器添加到一个网络中. 例如,我们希望 ...

最新文章

  1. java 数组越界异常_数组越界异常 求解决!!!
  2. 2019年公务员计算机(大类)类,2019年中国证监会参照公务员法管理专业科目考试大纲 (计算机类)...
  3. 集合论——二元关系的表示方法,特殊的二元关系及关系的运算
  4. YUV图像实时去雾算法的优化与改进
  5. mybatis log4j 在日志中打印sql_MyBatis---gt;01总结
  6. REDIS实践之请勿踩多进程共用一个实例连接的坑
  7. lucene api
  8. c语言机考答案,全国计算机等级考试C语言上机试题题库(内附答案)
  9. 4.21 使用剪切蒙版命令制作可爱的皮球 [Illustrator CC教程]
  10. 云服务器的安全设置常识
  11. express基本使用步骤
  12. 请立即停止刷博客流量
  13. 全球及中国HSK筒夹行业运营能力与投资状况分析报告2022版
  14. springboot结合注解动态获取数据库表
  15. 俞敏洪:梦想需要行动(转)
  16. 使用免费绿色工具chfs,将文件夹共享成网盘
  17. 计算机课说话检查200字,上课说话检讨书200字
  18. C语言实现网络聊天室 socket的简单应用
  19. Android Studio键盘快捷键
  20. 遗传算法求解无人机路径多目标规划问题(python实现)

热门文章

  1. Web API Help Page Install WebApiTestClient 简单的测试客户端
  2. Github上的资源清单
  3. VirtualBox + vagrant
  4. 使用DBUnit框架数据库插入特殊字符失败的查错经历
  5. 经典网页设计:10个响应式设计的国外购物网站
  6. 推荐10款来自极客标签的超棒前端特效[第五期]
  7. simulink m序列仿真(待验证)
  8. C编程,随机数,排序
  9. Gauss-Newton算法学习
  10. 给初学者们讲解人工神经网络(ANN)