首页 文章

Hyperledger fabric - 并发事务

提问于
浏览
1

我想知道如何使用hyperledger composer在hyperledger结构中执行并发事务 . 当我尝试针对同一资源同时提交两个事务时,我收到此错误:

尝试调用业务网络时出错 . 错误:Peer拒绝了事务'transaction-number ',代码为MVCC_READ_CONFLICT

有没有人知道是否存在变通方法或设计模式以避免这种情况?

1 回答

  • 1

    虽然我可能没有提供最佳解决方案,但我希望能够就这个问题分享一些想法和可能的解决方法 .

    首先让我们简要解释一下为什么会出现此错误 . Hyperledger Fabric的底层数据库采用类似MVCC(多版本并发控制)模型 . 一个例子是两个客户端试图将版本0的资产更新为某个值 . 一个会成功(更新值并将stateDB中的版本号增加到1),而另一个会由于版本不匹配而导致此错误(MVCC_READ_CONFLICT)失败 .

    这里讨论的一个可能的解决方案(https://medium.com/wearetheledger/hyperledger-fabric-concurrency-really-eccd901e4040)将是在业务逻辑和Fabric SDK之间自己实现FIFO队列 . 在这种情况下也可以添加重试逻辑 .

    另一种方法是使用delta概念 . 假设有一个值为10的资产A(也许它代表账户余额) . 该资产经常被多个并发事务更新(比如在这组值12-> 19-> 16中更新),并且很容易触发上述错误 . 相反,我们将值存储为增量(2 - > 7 - > -3),最终聚合值在分类帐中相同 . 但请记住,这个技巧可能不适合每个案例,在这个例子中,您可能还需要密切监控运行总计,以避免在您的帐户中出现空白时给钱 . 所以它在很大程度上取决于数据类型和用例 .

    有关更多信息,您可以查看:https://github.com/hyperledger/fabric-samples/tree/release-1.1/high-throughput

相关问题