Hyperledger Composer 性能(添加资产)非常低

Hyperledger composer performance(adding asset) is very low

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

添加数据

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

我正在使用 composer 0.19.12 和 fabric 1.1。当我检查来自 GitHub 的一些线程时,使用索引 couchdb 提高了性能。我该如何使用该功能? (我需要再次检查,但它似乎是最近 composer 版本的默认功能)

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 左右。由于原来的测试代码是每2sec~3sec 1笔交易,所以改进了很多。但是,8TPS看起来根本不能用于商业应用。即使它也不适合测试目的。有人可以为此提供一些建议吗?

看看你的示例代码,这听起来很正确,我假设你正在使用 fabric-dev-servers 包,这是一个非常简单的结构网络,可以帮助用户开始开发业务网络并想尝试在 hyperledger fabric 网络上,或者您正在使用多组织教程中的 byfn 网络,这是一个联盟中 2 个组织网络的 hyperledger fabric 示例,用于演示 composer 在多组织结构设置中所需的操作步骤。

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

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