超级账本 TPS
Hyperledger TPS
我正在做一个基于 Hyperledger 区块链的概念验证 (PoC) 并将其与医疗保健数据集成(这是一个学术项目)。
我遵循了这个教程:https://github.com/IBM/BlockchainNetwork-CompositeJourney
因为我是一个 Windows 用户并且我的 SSD 上没有空闲的 space 来容纳 Linux Ubuntu 双启动和所有分类帐的东西,我决定在 "Oracle VM VirtualBox" 上安装所有 POC,所有 VM 文件 (*.vdi) 都托管在我的辅助硬盘驱动器上,它是 HDD,而不是 SSD。
这是棘手的部分,"Oracle VM VirtualBox" 软件本身完美地安装在我的 SSD 中,但是 Linux VM 和所有 POC 都在 HDD 上,这是我的辅助硬盘驱动器。
到目前为止,我的对等节点正在我的 VM 上工作,并且已经在其上保留了数据。我的 issue/concern 是关于它的性能...
我在 python 中创建了一段代码来对其进行基准测试,我得到的每笔交易的结构响应时间在 2 到 3 秒之间,我认为这是极低的 TPS(每秒交易数),对吗?
我是不是做错了什么?我按照教程一步一步来,它是有效的,但性能极低的 TPS。
可能是因为我使用 Oracle VM 在 HDD 上工作?
如果我 运行 直接在 SSD 上 Linux 我会得到更好的 TPS 吗?
//composer-rest-server endpoint
url = 'http://localhost:3000/api/Member'
start = time.time()
response = requests.post(url, headers=headers, data=data)
end = time.time()
timeTotal = (end - start)
造成TPS低的因素有很多。要在 Hyperledger Fabric 中进行交易,需要经过几个过程。
1) 创建交易提案并发送给所有peer背书。例如,如果您有下一个保单背书:
AND('Org1MSP','Org2MSP')
每个组织的至少一个节点需要为交易背书,对于你发送提案的每个节点,他们将在容器内执行交易并检查它是否有效,如果有效,他们将响应status 200(这是针对每个人的,individualy)。
2) 下一步是将交易提案发送给排序者,如果是单独排序者共识将比 kafka 排序者共识更快 (You can check how it works here)。 orderer 将创建块并等待几秒钟,然后将其发送给每个组织的 ancho peers。这几秒是configtx.yaml文件中一个很重要的参数,这个是BatchTimeout,这里引用一下hyperledger fabric官网的定义:
Batch Timeout. The amount of time to wait after the first transaction
arrives for additional transactions before cutting a block. Decreasing
this value will improve latency, but decreasing it too much may
decrease throughput by not allowing the block to fill to its maximum
capacity.
编辑:默认情况下,batchTimeout 值为 2sec。
3) 现在orderer会把区块发送给所有ancho peer,他们会把这个区块广播给他们自己组织的所有peer,提交区块并更新账本的状态。
当然,如果你的电脑性能低,这个过程会更慢。
通常,fabric 中的 TPS 取决于多种因素。
- 背书策略(背书节点数和策略)
- 当前状态数据库(Level DB,Couch DB)
- 资源分配(硬件配置)
- 块大小(批量大小和批量时间(在 configtx.yaml 文件中定义))以及更多因素
网络可以处理的交易数量和交易延迟是两个不同的东西。
发送交易和获得响应之间的时间是延迟
以秒为单位执行的最大事务数为 TPS
我正在做一个基于 Hyperledger 区块链的概念验证 (PoC) 并将其与医疗保健数据集成(这是一个学术项目)。
我遵循了这个教程:https://github.com/IBM/BlockchainNetwork-CompositeJourney
因为我是一个 Windows 用户并且我的 SSD 上没有空闲的 space 来容纳 Linux Ubuntu 双启动和所有分类帐的东西,我决定在 "Oracle VM VirtualBox" 上安装所有 POC,所有 VM 文件 (*.vdi) 都托管在我的辅助硬盘驱动器上,它是 HDD,而不是 SSD。
这是棘手的部分,"Oracle VM VirtualBox" 软件本身完美地安装在我的 SSD 中,但是 Linux VM 和所有 POC 都在 HDD 上,这是我的辅助硬盘驱动器。
到目前为止,我的对等节点正在我的 VM 上工作,并且已经在其上保留了数据。我的 issue/concern 是关于它的性能...
我在 python 中创建了一段代码来对其进行基准测试,我得到的每笔交易的结构响应时间在 2 到 3 秒之间,我认为这是极低的 TPS(每秒交易数),对吗?
我是不是做错了什么?我按照教程一步一步来,它是有效的,但性能极低的 TPS。
可能是因为我使用 Oracle VM 在 HDD 上工作?
如果我 运行 直接在 SSD 上 Linux 我会得到更好的 TPS 吗?
//composer-rest-server endpoint
url = 'http://localhost:3000/api/Member'
start = time.time()
response = requests.post(url, headers=headers, data=data)
end = time.time()
timeTotal = (end - start)
造成TPS低的因素有很多。要在 Hyperledger Fabric 中进行交易,需要经过几个过程。
1) 创建交易提案并发送给所有peer背书。例如,如果您有下一个保单背书:
AND('Org1MSP','Org2MSP')
每个组织的至少一个节点需要为交易背书,对于你发送提案的每个节点,他们将在容器内执行交易并检查它是否有效,如果有效,他们将响应status 200(这是针对每个人的,individualy)。
2) 下一步是将交易提案发送给排序者,如果是单独排序者共识将比 kafka 排序者共识更快 (You can check how it works here)。 orderer 将创建块并等待几秒钟,然后将其发送给每个组织的 ancho peers。这几秒是configtx.yaml文件中一个很重要的参数,这个是BatchTimeout,这里引用一下hyperledger fabric官网的定义:
Batch Timeout. The amount of time to wait after the first transaction arrives for additional transactions before cutting a block. Decreasing this value will improve latency, but decreasing it too much may decrease throughput by not allowing the block to fill to its maximum capacity.
编辑:默认情况下,batchTimeout 值为 2sec。
3) 现在orderer会把区块发送给所有ancho peer,他们会把这个区块广播给他们自己组织的所有peer,提交区块并更新账本的状态。
当然,如果你的电脑性能低,这个过程会更慢。
通常,fabric 中的 TPS 取决于多种因素。
- 背书策略(背书节点数和策略)
- 当前状态数据库(Level DB,Couch DB)
- 资源分配(硬件配置)
- 块大小(批量大小和批量时间(在 configtx.yaml 文件中定义))以及更多因素
网络可以处理的交易数量和交易延迟是两个不同的东西。 发送交易和获得响应之间的时间是延迟 以秒为单位执行的最大事务数为 TPS