Hyperledger Fabric 的性能测试

2024-02-18

在尝试使用 Hyperledger Fabric 实现 IBM 团队在其文章中报告的性能期间Hyperledger Fabric:用于许可区块链的分布式操作系统 https://arxiv.org/abs/1801.10228,我遇到了一些问题和错误。我收集了所有有用的信息,并希望与 HF 社区分享。另外,我对 Fabric 开发人员有几个关于其性能的问题。

目标描述

使用 Cello 在四个 c5.9xlarge (36vCPU) aws 实例上部署的 Hyperledger Fabric v1.1.0 网络:

{
    fabric001: {
      cas: [],
      peers: ["[email protected] /cdn-cgi/l/email-protection"],
      orderers: ["orderer1st.orderer"],
      zookeepers: ["zookeeper1st"],
      kafkas: ["kafka1st"]
    },
    fabric002: {
      cas: [],
      peers: ["[email protected] /cdn-cgi/l/email-protection"],
      orderers: ["orderer2nd.orderer"],
      zookeepers: ["zookeeper2nd"],
      kafkas: ["kafka2nd"]
    },
    fabric003: {
      cas: [],
      peers: ["[email protected] /cdn-cgi/l/email-protection"],
      orderers: ["orderer3rd.orderer"],
      zookeepers: ["zookeeper3rd"],
      kafkas: ["kafka3rd"]
    },
    fabric004: {
      cas: ["ca1st.main"],
      peers: [],
      orderers: ["orderer4th.orderer"],
      zookeepers: ["zookeeper4th"],
      kafkas: ["kafka4th"]
    }
}

TLS 已禁用。

Fabric 通道配置(所有其他参数均为​​默认值):

BatchTimeout: 1s
BatchSize:
    MaxMessageCount: 500
    AbsoluteMaxBytes: 200 MB
    PreferredMaxBytes: 50 MB

我对 CouchDB 和 LevelDB 作为状态数据库进行了测试。我使用官方 Fabcar 链码(Golang 实现)进行测试。我创建了简单的 Nodejs 应用程序,它使用 SDK 与 Fabric 网络交互,并公开 HTTP API 以进行负载测试。该应用程序是无状态的,可以轻松扩展。 对于负载测试,我使用工具 YandexTank。我已经执行了两种高负载测试:查询(当区块链为空时通过peer001向Fabric状态发出请求)和插入(区块链内的交易)。

Results

CouchDB 作为状态数据库

  • Query results: https://overload.yandex.net/101153 https://overload.yandex.net/101153. At ~1100 rps latency starts to increase. But Fabric instance is not loaded and have a lot of free resources. On the figure below you can see CPU and Memory usage by the Fabric network containers on the instance fabric001 during the test. 100% CPU usage means one full vCPU load. fabric001 container instances (couchdb, query) Also peer001 prints a lot of similar error logs (not full output, just tiny part, I can share it with you if needed): https://gist.github.com/krabradosty/9780cacc92fcdeaa0c36377a91727ade https://gist.github.com/krabradosty/9780cacc92fcdeaa0c36377a91727ade

  • Insert results: https://overload.yandex.net/101217 https://overload.yandex.net/101217. At ~600 rps latency degradation is very fast. Before is slowly, but anyway, exist. CPU and Memory usage of the fabric003 containers on the figure below: fabric001 container instances (couchdb, insert) A lot of error logs from the peer (again, not full output): https://gist.github.com/krabradosty/3810151b8e101d8279cc705aef22863e https://gist.github.com/krabradosty/3810151b8e101d8279cc705aef22863e

基于此我可以得出结论,Fabric Peer在负载下的CouchDB连接存在问题。

我的问题:Fabric 社区知道这个错误吗?你有计划如何解决吗?

LevelDB 作为状态数据库

  • Query results: https://overload.yandex.net/102035 https://overload.yandex.net/102035. CPU and Memory usage of the fabric001 containers on the figure below: fabric001 container instances (leveldb, query) There are no any errors from the blockchain, I just see latency degradation.
  • Insert results: https://overload.yandex.net/102040 https://overload.yandex.net/102040. CPU and Memory usage of the fabric001 containers on the figure below: fabric001 container instances (leveldb, insert) Aggressive latency degradation starts at ~850 rps. No errors from the blockchain.

我的问题:延迟降低的原因是什么?为什么我无法实现 IBM 在其文章中报告的 3500 rps 性能? Fabric社区在性能提升方面有什么计划?


Fabric 是一个排队系统。在高负载的情况下,等待时间呈指数增长(排队属性),从而导致事务延迟。然而,对于 golevelDB,我们应该以低延迟获得至少 2000 tps。

从 CPU 利用率图中可以看出,36 个 vCPU 中只有 16 个 vCPU 得到充分利用。 core.yaml 中为每个对等点的 validatorPoolSize 设置什么值?您可以将此值设置为等于或小于块大小,并检查吞吐量是否增加。

性能会有所不同,具体取决于

  1. 工作负载(fabcar 与 fabcoin),
  2. 磁盘(HDD 与 SSD、本地连接与网络连接)、
  3. 负载生成器(CLI 与 SDK),
  4. 负载生成方法(开放系统与封闭系统 https://www.usenix.org/legacy/event/nsdi06/tech/full_papers/schroeder/schroeder.pdf与某些分布)和
  5. 网络带宽(2700 tps 至少 1.6 Gbps)。

另外,请确保负载生成器不会成为瓶颈。最好将延迟进一步划分为(背书延迟、排序延迟、提交延迟)并收集其他资源利用率(例如网络和磁盘),以便可以轻松识别瓶颈。

您可以参考我们的技术论文,标题为性能基准测试和优化 Hyperledger Fabric https://drive.google.com/file/d/1OsIoPtlv5X2PWyOAlDn1FCnHCZPyrF57/view。我们进行了全面的实证研究。使用 levelDB,我们应该获得至少 2000 tps 的低延迟。

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

Hyperledger Fabric 的性能测试 的相关文章

  • 改进绩效反思 - 我应该考虑哪些替代方案?

    我需要动态地设置对象上的一堆或属性的值 将其称为传输对象 将在短时间内创建相当数量的此类传输对象并设置其属性 我想避免使用反射 还有其他选择吗 如果是的话 有我可以查看的示例实现吗 Use Delegate CreateDelegate h
  • 为什么 pow(int, int) 这么慢?

    我一直在做一些项目欧拉练习来提高我的 C 知识 我写了以下函数 int a 0 b 0 c 0 for a 1 a lt SUMTOTAL a for b a 1 b lt SUMTOTAL a b c SUMTOTAL a b if c
  • 为什么在我的例子中 For 循环比 Map、Reduce 和 List 理解更快

    我编写了一个简单的脚本来测试速度 这就是我发现的结果 实际上 for 循环在我的例子中是最快的 这真的让我感到惊讶 请查看下面 正在计算平方和 这是因为它在内存中保存列表还是有意为之 谁能解释一下这一点 from functools imp
  • 样式组件如何影响性能?

    使用样式组件是否比样式表更会降低 Web 应用程序的速度 如果我关心性能并且没有任何依赖于 props 的样式 我是否应该放弃样式组件并使用样式表 当您有很多小组件时 同时使用样式化组件渲染 性能开销可能会很有意义 绝对值得测试以删除小元素
  • 我们可以使用什么方法来重塑非常大的数据集?

    当由于非常大的数据计算将花费很长时间并且因此我们不希望它们崩溃时 事先知道要使用哪种重塑方法是很有价值的 Lately methods for reshaping data have been further developed regar
  • MySQL InnoDB 查询性能

    我正在尝试优化一个简单的 sql 查询 该查询将多次运行大量数据 这是场景 MySQL 与 InnoDB 表 where 和 join 中使用的所有字段都已索引 表有 FK 我不需要查询的整个缓存 但每个表的缓存是可能的 表有更多的更新 插
  • C# 写入文件的性能

    我的情况概述 我的任务是从文件中读取字符串 并将它们重新格式化为更有用的格式 重新格式化输入后 我必须将其写入输出文件 这是必须完成的操作的示例 文件行示例 ANO 2010 CPF 17834368168 YEARS 2010 2009
  • 双线性序列给出奇数结果

    我试图让我的表现技能 不存在 达到标准 但在将公式写入代码时遇到了问题 这是我试图将其引用为 转换 为代码的公式 考虑一个序列 u 其中 u 定义如下 号码u 0 1是第一个u 对于每个x in u then y 2 x 1 and z 3
  • 嵌套辅助函数和性能

    嵌套辅助函数对于使代码更易于理解非常有用 谷歌甚至建议在他们的应用程序中使用嵌套函数时尚指南 https google styleguide googlecode com svn trunk javascriptguide xml Nest
  • 只读有运行时开销吗?

    出于某种原因 我一直认为readonly字段有与其相关的开销 我认为这是 CLR 跟踪是否存在readonly字段是否已初始化 这里的开销是一些额外的内存使用量 用于跟踪状态以及分配值时的检查 也许我这么认为是因为我不知道readonly字
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • 这个 cProfile 结果告诉我需要修复什么?

    我想提高Python脚本的性能并且一直在使用cProfile生成性能报告 python m cProfile o chrX prof bgchr py args 我打开这个chrX prof使用 Python 的文件pstats并打印出统计
  • 在Python列表中交换元素的最快方法

    在Python中交换两个列表元素是否有比 L a L b L b L a 或者我必须求助于Cython http cython org or Weave http www scipy org Weave或类似的 看起来 Python 编译器
  • jQuery mousemove 性能 - 节流事件?

    我们面临着与 mousemove 连接的 jQuery 事件传播性能问题 我们有一个屏幕填充画布 需要跟踪用户是否在其上拖动鼠标 因此我们在该对象上添加了一个鼠标移动侦听器 如下所示 ourCanvas on mousemove funct
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • 海量记录的bulk_create最佳实践

    I use bulk create将 1 mio 记录插入到新表中 需要 80 秒 Django 只使用一个 CPU 核心 大约 25 CPU 但没有一个核心达到 100 我相信有改进的潜力 这是代码 class Stock models
  • Mxnet - 缓慢的数组复制到 GPU

    我的问题 我应该如何在 mxnet 中执行快速矩阵乘法 我的具体问题 数组复制到 GPU 的速度很慢 对此我们能做些什么呢 我创建随机数组 将它们复制到上下文中 然后相乘 import mxnet as mx import mxnet nd
  • Gtk/GtkD 在窗口调整大小时检测鼠标按钮的释放?

    我正在尝试改进我用 GtkD Gtk 的 D 绑定 编写的绘图库 具有很多点的散点图需要很长时间才能调整大小 我想重新缩放图像 允许像素化 同时用户拖动窗口边缘来调整大小 并且仅在释放鼠标按钮时重新渲染它 是否有 API 可以检测在调整窗口
  • 多处理器机器中秒表的最佳实践?

    我找到了一个好的question https stackoverflow com questions 28637 is datetime now the best way to measure a functions performance
  • 如果 PyPy 快 6.3 倍,为什么我不应该使用 PyPy 而不是 CPython?

    我已经听到很多关于PyPy http en wikipedia org wiki PyPy项目 他们声称它比现有技术快 6 3 倍CPython http en wikipedia org wiki CPython口译员开启他们的网站 ht

随机推荐

  • 在Python中从pdf文件中读取和提取文本时单词之间没有空格?

    社区成员您好 我想从一本以 pdf 作为文件扩展名的电子书中提取所有文本 我才知道python有一个包PyPDF2采取必要的行动 不知何故 我尝试过并能够提取文本 但它会导致提取的单词之间的空间不适当 有时结果是 2 3 个单词合并的结果
  • 使用 PendingIntent 托管在不同进程中的服务和活动之间的通信

    我正在从一个片段启动一个前台服务 该片段在调用后被破坏startService 这是我无法使用的原因ResultReceiver or Messanger 所以选项仍然存在PendingIntent 如何使用 PendingIntent 在
  • 使用我自己的 UICollectionViewFlowLayout 子类滚动时 UICollectionView 项目消失

    上下文 我正在使用UICollectionView用于查看照片 每张图片都是一个单元格UIImage 图像可以有不同的尺寸 我希望它们填满整个屏幕 所以我写了一个类来确定每个单独的框架UICollectionCell并让一个子类UIColl
  • 更改 CakePHP 中的管理布局

    我在 cakephp 工作 我的 app config routes php 文件中有以下两行 and setup admin routing Router connect admin controller action array act
  • 为什么 sql.Open() 不应该返回 nil 作为错误?

    我正在尝试连接到 mysql 数据库 我尝试查看如果我提供了错误的连接信息是否会收到错误 但它仍然返回nil作为错误 即使我完全关闭 mysql 它仍然不会返回错误 如果此函数不返回错误 那么在该函数之后检查错误有何意义 这是在 Windo
  • iPhone 6 设备和模拟器上的快照方法被破坏

    由于某种未知的原因 iPhone 6 模拟器 和设备 上的所有屏幕截图方法似乎都可能存在错误 每当我调用任何屏幕截图方法时 包括 屏幕更新后的快照视图 可调整大小的SnapshotViewFromRect 绘制ViewHierarchyIn
  • 将表单输入值作为路径附加到操作 url

    我有一个这样的表格
  • 如何录制屏幕并保存为gif动画? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有这样的软件吗 尝试这个名为 Cropper 的免费工具 无限帧 将输出设置为动画 Gif http cropper codeplex com htt
  • iOS 动画在 iOS7 中的我的应用程序中停止工作

    我发现我的应用程序中的所有 ios 动画都停止工作 这种情况在 iOS7 中非常频繁地发生 我有一个支持 iOS 5 6 和 7 的应用程序 最近我发现所有 iOS 动画在 iOS7 中的应用程序中都停止工作 在 IOS 7 中 当在后台线
  • EditTextPreference 禁用按钮?

    我想要一个 EditTextPreference 如果 EditText 字段中没有文本 它将禁用 确定 按钮 我创建了一个自定义 EditTextPreference 类 并且能够获取 EditText 对象并设置 TextWatcher
  • Nginx 不接受字节范围

    我正在使用 nginx 来提供文件系统中的视频 我想启用范围请求 目前这是我的文件返回的结果 curl I fileurl HTTP 1 1 200 OK Server nginx Date Sat 29 Mar 2014 06 41 41
  • 使用Ansible、Jenkins和docker构建快速测试环境

    我计划使用ansible jenkins和docker一起构建测试环境 计划是这样的 为您在环境中使用的每个工具创建 ansible 剧本并将其存储在 git 上 使用 jenkins create job 在开发服务器上创建 docker
  • 如何使用 EF 在 MVC Code-first 中更新/创建多对多关系数据?

    我仔细研究了 StackOverflow Google 和 asp net 试图找到一个清晰 基本的示例来说明如何做到这一点 所有的例子都是抽象的或涉及不适用的复杂情况 我没能从他们身上获得太多有用的东西 到目前为止 他们都没有完全回答我的
  • Spring RestTemplate 将响应流式传输到另一个请求中

    我正在尝试使用 spring 将文件下载的结果直接流式传输到另一篇文章中RestTemplate 我目前的方法如下 ResponseEntity
  • 为express.js更新Cookie会话

    我正在使用cookie会话 https github com expressjs cookie sessionExpress js 处理会话的模块 我希望在每次页面加载 或ajax调用 时更新会话 这就是他们通常在任何地方工作的方式 文档对
  • Python + Selenium:从“ng-bind”获取跨度值

    所以我有 Selenium 代码可以使用 chrome 访问页面 现在在该页面上有这样的 HTML span Heloooo span 如何使用 python 和 Selenium 获取值 所以只有Heloooo 谢谢 您可以使用以下 CS
  • $.proxy() 和 bind() 有什么区别?

    2009 年 ECMAScript 5 添加了一个内置的bind 函数接受一个对象作为参数并返回一个相同的函数 其中this将始终引用您传递给它的对象 我找不到任何看起来像规范文档链接的内容 这与jQuery 的 proxy 功能 http
  • 处理 Yesod 表单中的数据集合

    是否有可能在Yesod https en wikipedia org wiki Yesod web framework 处理包含数据集合的表单 我有一个用户可以添加多个人的表单 在前端它目前看起来像这样 people map person
  • 使用 AFNetworking 下载大文件

    我正在尝试实现大文件的下载并向用户显示当前进度 但阻止 AFURLConnectionOperation setDownloadProgressBlock 返回不正确bytesRead and totalBytesRead值 它们小于应有的
  • Hyperledger Fabric 的性能测试

    在尝试使用 Hyperledger Fabric 实现 IBM 团队在其文章中报告的性能期间Hyperledger Fabric 用于许可区块链的分布式操作系统 https arxiv org abs 1801 10228 我遇到了一些问题