如何配置Fabric出块参数来达到“最大”TPS
如何配置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相关推荐
- 如何获取filecoin_Filecoin如何获取更大的出块机会?
Filecoin如何分配区块奖励方面,在Filecoin总量20亿的FIL通证中,可以通过挖矿获得的部分为70%.其余为开发团队(15%).投资人(10%),基金会(5%)的份额. 就区块奖励而言,可 ...
- 33 WM配置-策略-出库策略6-定义过期日期策略H(SLED)
业务背景:出库策略之6 定义过期日期策略H(SLED) 就是根据物料的货架寿命到日期 进行出库.系统会根据SLED(Shelf Life Expiration Date=货架使用寿命)的数据,哪个货架 ...
- DG配置过程中的参数解释
文章目录 DG配置过程中的参数解释: 1.DB_NAME 2.DB_UNIQUE_NAME 3.LOG_ARCHIVE_CONFIG 4.CONTROL_FILES 5.LOG_ARCHIVE_DES ...
- BCH三小时缓慢出块——需要重视的小概率事件
BitcoinCash 最近BCH以及诸多主流币迎来了一波行情回暖,平均涨幅均超过20%.伴随着行情的回暖,社区用户发现BCH区块高度606218在北京时间2019-10-26 15:21:57被挖出 ...
- c3p0数据源配置抛出Could not load driverClass com.mysql.jdbc.Driver的解决方案
c3p0数据源配置抛出Could not load driverClass com.mysql.jdbc.Driver的解决方案 参考文章: (1)c3p0数据源配置抛出Could not load ...
- ML之UliR:利用非线性回归,梯度下降法(迭代十万次)求出学习参数θ,进而求得Cost函数最优值
ML之UliR:利用非线性回归,梯度下降法(迭代十万次)求出学习参数θ,进而求得Cost函数最优值 目录 输出结果 代码设计 输出结果 更新-- 代码设计 import numpy as np imp ...
- 波卡链Substrate (7)Babe协议四“出块签名和验证”
1. 步骤 step1. slot leader更新本地链C使用新块,并发送新块B发送给其他节点 step2. 签名 slk:当前槽 H(l-1):sLk前一个区块的哈希 d:VRF输出 pi:val ...
- EOS 共识机制 (4)出块流程
step1. 超级节点提供相关计算资源和网络资源,保证节点的正常运行; step2. 当轮到某超级节点拥有出块权时,超级节点收集该时段内的所有交易,并对交易验证后打包成区块 广播至其他超级节点 ste ...
- 29 WM配置-策略-出库策略2-定义“紧急FIFO”策略(Stringent FIFO)
业务背景:出库策略之2 定义"紧急FIFO"策略,从字面上理解就是更加严谨的FIFO.上面我们了解到了一个存储类型下的FIFO策略<28 WM配置-策略-出库策略1-定义FI ...
最新文章
- 关于mouseenter、mouseover、mouseout、mouseleave的理解
- 为什么体制内外永远在互相羡慕着?
- poj 2415(BFS)
- 【起航计划 011】2015 起航计划 Android APIDemo的魔鬼步伐 10 App-Activity-Reorder Activities 后退栈 Intent FLAG...
- Python 总结题目
- c语言酒店管理系统设计目的,C语言酒店管理系统设计.doc
- php mysql开发技术_PHP+MySQL开发技术详解—学习笔记
- RestTemplate实践(及遇到的问题)
- jQuery:获取浏览器中的分辨率
- Gartner 如何看 RASP 和 WAF?
- 佛说剖腹产的孩子_选择好的剖腹产时间会改变孩子的命运吗?
- 小米Mi 11手机电路原理图+主板元件位号图
- 查看EXE/DLL文件是32/64位之通用方法
- Stack的三种含义
- Cisco服务器硬盘状态jbod,2018-11-06 JBOD模式下LSI9361RAID卡操作步骤
- 盘点市场营销工作中的5个办公神器
- 如何删除计算机文件类型,怎么删除win10.1电脑中的文件夹分类?
- ALLHIC使用 | HiC辅助基因组组装(三)
- 基于SARIMA、XGBoost和CNN-LSTM的时间序列预测对比
- 用最通俗的语言讲一讲,什么是阻抗匹配?
热门文章
- gprmax3.0安装与三维建模
- 封面|这几张肯定适合你的朋友圈封面
- 数据加密——凯撒加密
- OpenCV入门:读取图像以及对图像进行一些操作,比如只提取某颜色部分的东西
- python的sleep怎么实现的_sleep实现原理
- 投影机在笔记本电脑上切换视频的快捷键列表
- 电脑主机启动,鼠标、键盘指示灯均有亮,屏幕显示无信号输入
- 一套键鼠操控多台电脑--Mouse Without Borders 设置教程(转载)
- Scrapy 遇到的小坑_关于payload参数_scrapy第一次发送POST请求
- 在家办公更累?软件崩溃自带功能不靠谱?工作小妙招帮助你