超级账本 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.

Here you can read more.

编辑:默认情况下,batchTimeout 值为 2sec

3) 现在orderer会把区块发送给所有ancho peer,他们会把这个区块广播给他们自己组织的所有peer,提交区块并更新账本的状态。

当然,如果你的电脑性能低,这个过程会更慢。

通常,fabric 中的 TPS 取决于多种因素。

  1. 背书策略(背书节点数和策略)
  2. 当前状态数据库(Level DB,Couch DB)
  3. 资源分配(硬件配置)
  4. 块大小(批量大小和批量时间(在 configtx.yaml 文件中定义))以及更多因素

网络可​​以处理的交易数量和交易延迟是两个不同的东西。 发送交易和获得响应之间的时间是延迟 以秒为单位执行的最大事务数为 TPS