【问题标题】:Hyperledger TPS超级账本 TPS
【发布时间】:2019-02-15 03:00:27
【问题描述】:

我正在做一个基于 Hyperledger 区块链的概念证明 (PoC),并将其与医疗保健数据集成(这是一个学术项目)。

我遵循了这个教程:https://github.com/IBM/BlockchainNetwork-CompositeJourney

由于我是 Windows 用户,我的 SSD 上没有剩余空间来容纳带有所有分类帐内容的 Linux Ubuntu 双启动,我决定在具有所有 VM 的“Oracle VM VirtualBox”上安装所有 POC文件 (*.vdi) 托管在我的辅助硬盘驱动器上,它是 HDD,而不是 SSD。

这是棘手的部分,“Oracle VM VirtualBox”软件本身已完美安装在我的 SSD 中,但具有所有 POC 的 Linux VM 位于 HDD 上,这是我的辅助硬盘驱动器。

到目前为止,我已经让 Peer 在我的 VM 上工作,并且已经在其上保存了数据。我的问题/担忧是关于它的表现......

我在 python 中创建了一个 sn-p 代码来对其进行基准测试,每个事务的结构响应时间在 2 到 3 秒之间,我认为这是极低的 TPS(每秒事务数),对吧?

我做错了吗?我一步一步按照教程进行操作,它可以工作,但 TPS 性能极低。

可能是因为我让它在带有 Oracle VM 的 HDD 上工作?

如果我直接在带有 Linux 的 SSD 上运行它,我会获得更好的 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)

【问题讨论】:

    标签: performance hyperledger-fabric hyperledger


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      TPS 低的因素很多。要在 Hyperledger Fabric 中进行交易,需要经过几个过程。

      1) 创建交易提案并将其发送给所有对等方背书。例如,如果您有下一个政策背书:

      AND('Org1MSP','Org2MSP')  
      

      每个组织的至少一个peer需要对交易进行背书,对于您发送提案的每个peer,他们将在容器内执行交易并检查其是否有效,如果有效,他们将响应状态200 (这是针对每个人的,个人的)。

      2) 下一步是将交易提案发送给orderer,如果是solo-orderer 共识将比kafka-orderer 共识(You can check how it works here) 快。 orderer 将创建块并等待几秒钟,然后将其发送给每个 orgs ancho peers。这几秒是configtx.yaml文件中一个很重要的参数,这个是BatchTimeout,我引用hyperledger fabric官网的定义:

      批处理超时。第一次交易后等待的时间 在切割一个块之前到达额外的交易。递减 此值将改善延迟,但降低太多可能 通过不允许块填充到最大值来降低吞吐量 容量。

      Here you can read more.

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

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

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

      【讨论】:

      • 非常感谢您的回复。目前我只有 1 个 Peer 和 1 个 Organization,我将它命名为 AdminPeer,它的意思是一个非常小的 POC。我安装了 composer-rest-server 并在网页上对其进行了测试,即使在那里交易也需要 2 秒才能完成。我想知道我的这种低 TPS 是否是由于 HDD + VM 而不是直接在 SSD 上运行...
      • 是的,batchTimeout 需要 2 秒才能完成交易,但您的 orderer 节点可以在 2 秒内处理大量交易。尝试在 nodejs 中创建 PoC 并使用循环(承诺)进行大量交易,您将在 2 秒内看到您进行了大量交易。
      • 非常感谢 Alexander,我将尝试在 nodejs 中重新创建我的 PoC,但我有最后一个问题:在现实世界的场景中,假设我们正在处理医疗保健患者数据,真实 -时间数据处理是必须的,我该如何批量处理这些信息?例如,有许多传感器每秒读取大量数据的患者,我应该每秒创建一个新批次并在那一秒内保存所有收集的数据?
      • (1) 对于现实世界的场景,您可以减少 batchTimeout 的最小值(我不知道它是否接受浮点数)。我不安全,但在医疗保健数据中它非常脆弱。当您发送一笔交易时,您应该等待区块提交后再发送下一笔交易,因为您可能需要查阅区块链的最新状态。
      • (2)例如,如果您有 2 个事务(A 和 B)修改 C 的状态并且它们在同一个块中,则只会执行一个(A 或 B),因为每个一个采取了 C.in 但有不同的结果(A.out 或 B.out),这可能对健康数据很危险。 (3) 您使用了错误的客户端:fabric-sdk-node.github.io/release-1.4/…。我这里有一个小样本:github.com/Alex99y/fabric-app-example
      猜你喜欢
      • 2017-07-24
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 2022-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多