如何配置Fabric出块参数来达到“最大”TPS

文章目录

  • 如何配置Fabric出块参数来达到“最大”TPS
    • 对于参数的了解
      • 避免落入batch timeout
  • 推论一:我们最好不要依赖一个过大的batchtimeout值来触发fabric出块。
    • PreferredMaxBytes,AbsoluteMaxBytes,MaxMessageCount的关系
  • 推论二:在tx大小恒定的情况下。(或者我们可以以均值取代等方式)块内交易数目为PreferredMaxBytes/tx size,MaxMessageCount, AbsoluteMaxBytes/tx size中的最小值。
    • Fabric TPS的上限是什么?
      • 硬件上限
      • 参数失效
      • 数学表达
  • 推论三: Fabric网络的TPS,可以表达为kb/s或者tx/s,如下:
    • 如何实现
      • 基于BatchTimeout
      • 基于MaxMessageCount
        • 后记

对于参数的了解

在讨论有关最大tps的问题之前,我们首先要了解Fabric出块的四个参数之间是如何工作的。
从结论上,Fabric会优先于PreferredMaxBytes,AbsoluteMaxBytes,MaxMessageCount这三个参数,最后是BatchTimeout。

避免落入batch timeout

我们以如下配置Probe发起对于Fabric的性能测试。

BatchTimeout:20
MaxMessageCount:320
AbsoluteMaxBytes:20
PreferredMaxBytes:20480

得到结果如下:

Chaincode BatchTimeout MaxMessageCount AbsoluteMaxBytes PreferredMaxBytes TPS
sample 20 320 20 20480 414.187180

从tape的log中,我们可以发现最后一个块实际上很大程度的影响了fabric的tps。

Time     5.89s  Block     33    Tx    320
Time     5.98s  Block     34    Tx    320
Time     6.04s  Block     35    Tx    320
Time     6.09s  Block     36    Tx    320
Time    24.14s  Block     37    Tx     80
time="2020-12-11T09:27:48Z" level=info msg="Completed processing transactions."
tx: 10000, duration: 24.143673413s, tps: 414.187180

因此,这个发现表明,

推论一:我们最好不要依赖一个过大的batchtimeout值来触发fabric出块。

PreferredMaxBytes,AbsoluteMaxBytes,MaxMessageCount的关系

那么,PreferredMaxBytes,AbsoluteMaxBytes,MaxMessageCount三个参数之间如何相互影响?
我们以如下配置Probe发起对于Fabric的性能测试。

BatchTimeout:20
MaxMessageCount:10,20,40
AbsoluteMaxBytes:20
PreferredMaxBytes:4

得到结果如下:

Chaincode BatchTimeout MaxMessageCount AbsoluteMaxBytes PreferredMaxBytes TPS
sample 20 10 20 4 156.155258
sample 20 20 20 4 156.811844
sample 20 40 20 4 157.936309

从tape的log中,我们可以发现无论如何配置MaxMessageCount,我们的块中永远只有1笔交易。

Time    63.75s  Block  10000    Tx      1
Time    63.75s  Block  10001    Tx      1
Time    63.76s  Block  10002    Tx      1
Time    63.76s  Block  10003    Tx      1
Time    63.77s  Block  10004    Tx      1
Time    63.77s  Block  10005    Tx      1
time="2020-12-11T09:43:16Z" level=info msg="Completed processing transactions."
tx: 10000, duration: 1m3.770693352s, tps: 156.811844

4k大小的PreferredMaxBytes在测试中只能支持一个1tx
基于我们的测试,一笔交易的大小约为4kb。因此我们调整PreferredMaxBytes并且再次观察。

BatchTimeout:20
MaxMessageCount:320,640
AbsoluteMaxBytes:20
PreferredMaxBytes:512

tape log(512k 约等于 135 tx,即3.8k/block)

Time     6.33s  Block     67    Tx    135
Time     6.37s  Block     68    Tx    135
Time     6.39s  Block     69    Tx    135
Time     6.43s  Block     70    Tx    135
Time     6.48s  Block     71    Tx    135
Time     6.51s  Block     72    Tx    135
Time     6.56s  Block     73    Tx    135
Time     6.59s  Block     74    Tx    135
Time     6.62s  Block     75    Tx    135
Time     6.67s  Block     76    Tx    135
Time     6.70s  Block     77    Tx    135
Time     6.75s  Block     78    Tx    135
Time     6.78s  Block     79    Tx    135

符合预期,因此我们可以简单的得出一个推论,这三个参数实际上都是限制block中有多少笔交易的参数。

推论二:在tx大小恒定的情况下。(或者我们可以以均值取代等方式)块内交易数目为PreferredMaxBytes/tx size,MaxMessageCount, AbsoluteMaxBytes/tx size中的最小值。

Fabric TPS的上限是什么?

硬件上限

我们说任何性能的理论上限是整个网络的上限,也就是整组设备中某个设备I/O,或其他的最小值。
也就是说,无论我们如何优化这四个参数,我们也无法将fabric的tps上限超过网络中某块网卡的最大承载能力。

参数失效

因此,为了追求最大的TPS我们需要尽可能的让Fabric某些控制参数失效。来达到这一目的,数学证明如下:

数学表达

从上文中我们将PreferredMaxBytes,AbsoluteMaxBytes,MaxMessageCount视为控制一个块内有多少交易。
即:

block size = min(PreferredMaxBytes,MaxMessageCount * tx size, AbsoluteMaxBytes)

或:

tx size = min(PreferredMaxBytes / tx size,MaxMessageCount, AbsoluteMaxBytes / tx size)

推论三: Fabric网络的TPS,可以表达为kb/s或者tx/s,如下:

tps(kb/s) = min(PreferredMaxBytes,MaxMessageCount * tx size, AbsoluteMaxBytes)/batchtimout

或者

tps = min(PreferredMaxBytes / tx size,MaxMessageCount, AbsoluteMaxBytes / tx size)/batchtimout

如何实现

现实上来说,业务一般会限制BatchTimeout或者MaxMessageCount。或者我们可以从这两个参数入手。
在如下示例中,

基于BatchTimeout

在同样的BatchTimeout下,调整MaxMessageCount,基于

tps = min(PreferredMaxBytes / tx size,MaxMessageCount, AbsoluteMaxBytes / tx size)/batchtimout

不断的调整MaxMessageCount直到上限。
我们以如下 来配置Probe发起对于Fabric的性能测试。

得到结果如下:

Chaincode BatchTimeout MaxMessageCount AbsoluteMaxBytes PreferredMaxBytes TPS calculation tps
sample 0.5 40 500 512000 853.662773 80
sample 0.5 160 500 512000 1073.833629 320
sample 0.5 320 500 512000 1168.482934 640
sample 0.5 640 500 512000 1180.903770 720
sample 0.5 720 500 512000 1282.712621 1440
sample 0.5 1280 500 512000 1258.385389 20480
sample 0.5 2048 500 512000 1258.623620 4096

基于MaxMessageCount

在同样的MaxMessageCount下,调整BatchTimeout,基于

tps = min(PreferredMaxBytes / tx size,MaxMessageCount, AbsoluteMaxBytes / tx size)/batchtimout

不断的调整BatchTimeout直到上限。
我们以如下 来配置Probe发起对于Fabric的性能测试。
得到结果如下:

Chaincode BatchTimeout MaxMessageCount AbsoluteMaxBytes PreferredMaxBytes TPS
sample 0.2 128000 500 512000 1156.604634
sample 0.5 128000 500 512000 1227.426704
sample 1 128000 500 512000 1291.886710
sample 2 128000 500 512000 1310.490079
sample 5 128000 500 512000 1295.549652
sample 10 128000 500 512000 1184.683782

后记

本文基于Probe,Tape以及test-network,基于fabric 2.2版本image,在mac上单机进行的测试。

Probe项目现在在招募维护者,欢迎大家反馈,贡献~
原文地址: https://github.com/SamYuan1990/Probe/blob/main/doc/HowToConfigFabricParameters_ZH.md
项目地址:https://github.com/SamYuan1990/Probe

如何配置Fabric出块参数来达到“最大”TPS相关推荐

  1. 如何获取filecoin_Filecoin如何获取更大的出块机会?

    Filecoin如何分配区块奖励方面,在Filecoin总量20亿的FIL通证中,可以通过挖矿获得的部分为70%.其余为开发团队(15%).投资人(10%),基金会(5%)的份额. 就区块奖励而言,可 ...

  2. 33 WM配置-策略-出库策略6-定义过期日期策略H(SLED)

    业务背景:出库策略之6 定义过期日期策略H(SLED) 就是根据物料的货架寿命到日期 进行出库.系统会根据SLED(Shelf Life Expiration Date=货架使用寿命)的数据,哪个货架 ...

  3. DG配置过程中的参数解释

    文章目录 DG配置过程中的参数解释: 1.DB_NAME 2.DB_UNIQUE_NAME 3.LOG_ARCHIVE_CONFIG 4.CONTROL_FILES 5.LOG_ARCHIVE_DES ...

  4. BCH三小时缓慢出块——需要重视的小概率事件

    BitcoinCash 最近BCH以及诸多主流币迎来了一波行情回暖,平均涨幅均超过20%.伴随着行情的回暖,社区用户发现BCH区块高度606218在北京时间2019-10-26 15:21:57被挖出 ...

  5. c3p0数据源配置抛出Could not load driverClass com.mysql.jdbc.Driver的解决方案

    c3p0数据源配置抛出Could not load driverClass com.mysql.jdbc.Driver的解决方案 参考文章: (1)c3p0数据源配置抛出Could not load ...

  6. ML之UliR:利用非线性回归,梯度下降法(迭代十万次)求出学习参数θ,进而求得Cost函数最优值

    ML之UliR:利用非线性回归,梯度下降法(迭代十万次)求出学习参数θ,进而求得Cost函数最优值 目录 输出结果 代码设计 输出结果 更新-- 代码设计 import numpy as np imp ...

  7. 波卡链Substrate (7)Babe协议四“出块签名和验证”

    1. 步骤 step1. slot leader更新本地链C使用新块,并发送新块B发送给其他节点 step2. 签名 slk:当前槽 H(l-1):sLk前一个区块的哈希 d:VRF输出 pi:val ...

  8. EOS 共识机制 (4)出块流程

    step1. 超级节点提供相关计算资源和网络资源,保证节点的正常运行; step2. 当轮到某超级节点拥有出块权时,超级节点收集该时段内的所有交易,并对交易验证后打包成区块 广播至其他超级节点 ste ...

  9. 29 WM配置-策略-出库策略2-定义“紧急FIFO”策略(Stringent FIFO)

    业务背景:出库策略之2 定义"紧急FIFO"策略,从字面上理解就是更加严谨的FIFO.上面我们了解到了一个存储类型下的FIFO策略<28 WM配置-策略-出库策略1-定义FI ...

最新文章

  1. 关于mouseenter、mouseover、mouseout、mouseleave的理解
  2. 为什么体制内外永远在互相羡慕着?
  3. poj 2415(BFS)
  4. 【起航计划 011】2015 起航计划 Android APIDemo的魔鬼步伐 10 App-Activity-Reorder Activities 后退栈 Intent FLAG...
  5. Python 总结题目
  6. c语言酒店管理系统设计目的,C语言酒店管理系统设计.doc
  7. php mysql开发技术_PHP+MySQL开发技术详解—学习笔记
  8. RestTemplate实践(及遇到的问题)
  9. jQuery:获取浏览器中的分辨率
  10. Gartner 如何看 RASP 和 WAF?
  11. 佛说剖腹产的孩子_选择好的剖腹产时间会改变孩子的命运吗?
  12. 小米Mi 11手机电路原理图+主板元件位号图
  13. 查看EXE/DLL文件是32/64位之通用方法
  14. Stack的三种含义
  15. Cisco服务器硬盘状态jbod,2018-11-06 JBOD模式下LSI9361RAID卡操作步骤
  16. 盘点市场营销工作中的5个办公神器
  17. 如何删除计算机文件类型,怎么删除win10.1电脑中的文件夹分类?
  18. ALLHIC使用 | HiC辅助基因组组装(三)
  19. 基于SARIMA、XGBoost和CNN-LSTM的时间序列预测对比
  20. 用最通俗的语言讲一讲,什么是阻抗匹配?

热门文章

  1. gprmax3.0安装与三维建模
  2. 封面|这几张肯定适合你的朋友圈封面
  3. 数据加密——凯撒加密
  4. OpenCV入门:读取图像以及对图像进行一些操作,比如只提取某颜色部分的东西
  5. python的sleep怎么实现的_sleep实现原理
  6. 投影机在笔记本电脑上切换视频的快捷键列表
  7. 电脑主机启动,鼠标、键盘指示灯均有亮,屏幕显示无信号输入
  8. 一套键鼠操控多台电脑--Mouse Without Borders 设置教程(转载)
  9. Scrapy 遇到的小坑_关于payload参数_scrapy第一次发送POST请求
  10. 在家办公更累?软件崩溃自带功能不靠谱?工作小妙招帮助你