Hyperledger作曲家的表现(添加资产)非常低

时间:2018-08-17 03:41:56

标签: performance hyperledger hyperledger-composer

以下代码是用于检查每秒或每分钟可以添加多少个实体的简单代码。 createAsset调用后端(http:localhost:3000)并使用post添加数据。

当我使用此代码进行测试时,花了23秒添加了10个实体。

我正在使用作曲家0.19.12和结构1.1。当我从GitHub检查某些线程时,使用索引沙发床可以提高性能。如何使用该功能? (我需要再次检查,但这似乎是最近的作曲家版本的默认功能)

addEntities: async function() {

    var start = 0;
    var end = start + 100;
    var sd = new Date();
    console.log(sd.getHours()+':'+sd.getMinutes()+':'+sd.getSeconds()+'.'+sd.getMilliseconds());

    for(var i = start; i<end; i++) {
        entityData.id = i.toString();
        await this.createAsset('/Entity', 'model.Entity', entityData);
    }

    var ed = new Date();
    var totalTime = new Date(ed.getTime()-sd.getTime());
    console.log(totalTime.getMinutes()+':'+totalTime.getSeconds()+'.'+totalTime.getMilliseconds());
},

我的模型非常简单,如下所示。

asset Entity identified by id {
  o String id
}

我已按照david_k的建议将测试代码更改为发送多个事务,如下所示。

addEntities: async function() {

        var start = 15000;
        var dataNumber = 1200;
        var loopNumber = 400;
        var end = start + dataNumber;
        var sd = new Date();
        console.log(sd.getHours()+':'+sd.getMinutes()+':'+sd.getSeconds()+'.'+sd.getMilliseconds());

        var tasks = [];
        for(var i = start; i<end; i++) {
            entityData.id = i.toString();

            if((i-start)%loopNumber === loopNumber - 1) {
                await this.createAsset('/Entity', 'model.Entity', entityData);
                console.log('--- i: ' + i + ' loops completed');
            }
            else {
                this.createAsset('/Entity', 'model.Entity', entityData);
            }
        }
        var ed = new Date();
        var totalTime = new Date(ed.getTime()-sd.getTime());
        console.log(totalTime.getMinutes()+':'+totalTime.getSeconds()+'.'+totalTime.getMilliseconds());
    },

更改的目的是同时发送多个请求,并且看起来效果很好,因为与以前的代码相比,它显示出更好的性能。但是,性能仍约为8 TPS。由于原始测试代码是每2秒至3秒1个事务,因此改进了很多。但是,8TPS看起来它根本不能用于商业应用。即使对于测试目的也不是很好。有人可以为此提供一些建议吗?

1 个答案:

答案 0 :(得分:2)

这听起来像是正确地查看了您的示例代码,我假设您使用的是fabric-dev-servers软件包,这是一个非常简单的Fabric网络,可以帮助用户开始开发业务网络,并想尝试一下一个超级账本结构网络,或者您正在使用来自多组织教程的byfn网络,这是一个联盟中2组织网络的超级账本结构示例,以演示在多组织结构设置中Composer所需的操作步骤。

Hyperledger Fabric是基于最终一致性的分布式分类帐技术。 Composer实现了一个提交/通知模型,以便一旦提交了事务,它将在该事务已提交到分类帐时通知客户。您可以配置网络中的哪个对等点,以便在发生这种情况时通知您,但默认情况下是所有对等点,因此一旦所有对等点都将其提交到分类帐,其余服务器就会做出响应。

Hyperledger结构不提交单个交易,而是将它们分批处理成块,这些块将被提交到分类账,并且它将等待一段时间,然后再使用已提交的当前交易集构建该块。排序,因此块可以包含一个或多个事务。您需要为用例配置结构,以确定如何将事务批处理到块中。