Giter Club home page Giter Club logo

fabric-performance-wiki's Introduction

TWGC Fabric 性能优化小组 wiki

TWGC Fabric 性能优化小组 wiki

TWGC Fabric Performance Special Interest Group wiki

项目介绍

随着 Fabric 的使用已经越来越广泛,Fabric 性能问题也日益凸显,为了更好的研究和优化 Fabric 性能问题,2020年7月13日,TWGC 成立了性能优化小组以便为大家提供优化方案和参考实现。

目前 TWGC 性能优化小组主要研究方向:

  1. Fabric 性能问题

    主要从两个方面探索Fabric性能的优化方案:Fabric 项目自身性能和 Fabric 应用系统架构设计。我们通过 Fabric 性能优化相关论文讨论,社区成员优化经验分享等方式梳理优化思路,目前整理了 Fabric 性能优化 思维导图 ,欢迎大家参考和补充!

  2. Fabric 性能测试工具

    我们目前推出了两个 Fabric 开源测试工具:

    • Tape:一个轻量级 Fabric 测试工具,直接使用 gRPC 和 Fabric 网络连接发送交易请求,并利用 Go 语言高并发特性向 Fabric 网络进行压力测试,避免了 SDK 造成的压测工具性能损失。同时,Tape 配置简单,仅需配置相关交易参数和证书即可实现一键启动。目前 Tape 已支持 TLS 双证书、单独压测 Fabric 交易声明周期中提交和背书阶段、交易发送速率控制等功能,Tape 也正在陆续开发新特性,以支持更多场景的 Fabric。欢迎大家试用和贡献!

    • Probe:用于测试 Fabric 最优网络参数,可根据配置项结合 Fabric 测试网络自动执行网络启停 Fabric 区块链网络,并利用测试工具 Tape 测试 TPS 指标,最终结合前端页面展示网络配置参数之间关系,以及得到最优配置参数,为 Fabric 开发人员提供参考。

加入方式

目前小组开放加入,加入 Fabric 性能优化小组可以联系以下人员:

姓名 微信 邮箱 GitHub-ID 角色
程阳 yycheng418 [email protected] Stone-ch 组长
袁怿 oe19901019 [email protected] SamYuan1990 副组长
许强 xq_19880125 [email protected]\[email protected] XuHugo 副组长
李明轩 Lmx-1994 [email protected] Matthewbalala 核心成员
赵世宏 zshong1987 [email protected] tianxuanhong 核心成员

作为 Fabric 性能优化小组的一员,我们更愿意你:

  1. 熟悉 Fabric 源码或应用开发;
  2. 有 Fabric 或其他系统性能分析、优化经验;
  3. 愿意持续为 Hyperledger 开源社区做贡献。

例会信息

现已和国际社区合并详见 https://wiki.hyperledger.org/display/PSWG/Meetings

国内性能组历史会议记录

百度网盘链接: https://pan.baidu.com/s/1XcVS5kY4BfxQUxybyJF_wA 提取码: h38i

fabric-performance-wiki's People

Contributors

davidkhala avatar lijiachuan1982 avatar matthewbalala avatar samyuan1990 avatar stone-ch avatar xuhugo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fabric-performance-wiki's Issues

[期望广泛认证]不同语言合约性能差异研究(一)

主要是针对不同语言,同逻辑合约的tps差距。研究。
比如同环境下,例如

  • 逻辑一(A/B转账), 二(车辆交易),三(简单银行/其他)针对简单的get/put在不同语言的实现上tps有没有性能差距?(有无规律可循)
  • 如果可能,结合一些性能监控手段,对于性能进行监控,看看能否从监控结果上进行一些对比分析。如智能合约执行时占用的cpu/内存资源等

[Probe 测试 - 小白开箱文档]

PROBE小白开箱测试记录

测试背景

关于Probe

  1. Probe项目是TWGC社区性能优化小组推出的一个UI级性能测试工具项目。它的侧重点是通过操作FABRIC的四个性能参数 [
    BatchTimeout, MaxMessageCount,AbsoluteMaxBytes,PreferredMaxBytes ] 来测算这些参数不同组合下TPS可能达到的输出值;关于参数的说明下一小点我们会给出。

  2. 其中PROBE项目是基于TWGC的TAPE项目以及FABRIC官方的fabric-samples中的test-network项目。它通过用户手工配置以上四个参数,在Probe内部会调用TWGC生态的TAPE项目(性能测试工具)发起性能测,从而得到相应的TPS结果输出。

  3. 结果的输出将会是三维立体坐标系曲线图,以及产生一个CSV结果集文件。[ 我需要实测后详细备注 ]

  4. 目前Probe项目地址位于 https://github.com/SamYuan1990/Probe.git

配置参数说明

  1. Probe项目用到的这四个参数均属于Orderer排序服务需要关心和使用的参数,一般我们会配置在交易的configtx.yaml中,放在Orderer的属性之下。
  • BatchTimeout: 返回创建批处理之前要等待的时间。缺省配置是2s。
如果未在特定时间内填充该块,则BatchTimeout是一种回退机制。
该值提供了切割块要花费多长时间的上限(也就是说,定义了多久把一个Block生成出来)。  
  1. 以下三个参数均属于BatchSize 范畴的配置集合,它们位于configtx.yaml 的Orderer的 ’BatchSize‘ 配置集下;BatchSize配置集主要用来定义切割一个块之前能收集多少交易。

    关于这两类参数的详情说明,可参考 https://medium.com/@yashukla47/hyperledger-fabric-ideal-values-for-batchtimeout-and-batchsize-407a04b5d1a6

  • MaxMessageCount: 一个区块里允许包含的最大交易(消息)个数。缺省配置是10

  • AbsoluteMaxBytes: 批处理中的序列化消息允许的绝对最大字节数。缺省配置是99MB。

最大块大小是此值加上相关元数据的大小(通常为几KB,具体取决于签名身 份的大小)。
大于此值的任何交易将被Orderer直接拒绝。如果把OrdererType选择了“ kafka” ,请将Kafka代理节点(broker节点)上的“ message.max.bytes”和“ replica.fetch.max.bytes”设置为大于此值的值。对于本次的test-network底层链构建模型,我个人会在我的测试用例上配置成`etcdraft`
  • PreferredMaxBytes : 区块中首选的所有序列化后的消息大小的总和允许的最大字节数值。缺省配置是512KB。
如果序列化后的总消息长度超过它,那么此刻就是切割区块的分界点。具体可以参考这篇文章。https://www.liankexing.com/question/1399

参数具体配置和位置如下(configtx.yaml)
image

测试前的一些疑问

  1. Probe用户配置四个参数后,内部是去哪里改变这四个参数的(是否是sed切改configtx.yaml或者其他)

    目前了解下来:通过内建 Probe/sample/prepareConfig.sh 脚本由 sed 正则切改 configtx/configtx.yaml

  2. 修改后是否会重启test-network并开启测试

    目前了解下来:是会全新构建test-network

  3. 是否支持分布式test-network网络模型测试

    目前了解下来:项目暂对官方单vm mode做了验证

    待单vm验证通过后,可对 2 vm分布式做验证
    【注】
    这里是一个我以前的2 vm构建简单节点模型&构建脚本:
    https://github.com/wanxiang-blockchain/hackathon2020-T2-Fight.git

    • 脚本: hackathon2020-T2-Fight/alliance_blockchain/fabric_native_dev_project/run.sh
    • 构建说明: hackathon2020-T2-Fight/hackathon2020-T2-Fight/Tutorial_for_alliance_chain.txt

以上疑问等开启测试后,还会不定期补充。

测试记录

    1. 安装步骤
      根据教程 README_ZH.MD先完成 Probe 安装步骤。
    1. 环境检查
      安装步骤中在执行完boostrap.sh做完后,检查后台镜像下载情况。目前而言官方下载的fabric镜像版本是v2.3.1
      image
    1. 测试步骤
      a. 做完安装步骤后,执行npm start

    b. 进入我的测试web页面 http://192.168.1.135:3000
    选择TestnetworkSample选项,点Submit提交
    image
    image

    c. 此时可以看到Probe后台打印信息
    image

    d. 检查后端fabric底层链运行状态
    假如没有被加载,需重新检查哪步操作出现错误
    image

    e. 耐心等待Probe测试完成
    目前测下来,至少要等待到以下信息,才可去访问result页面(见下一小点)
    image

    f. 查看测试结果
    图片

图片

g. 关闭底层链 & 清空链数据
pushd fabric-samples/test-network && ./network.sh down && popd

遇到的问题 & 解决方案

问题现象描述

加载Probe并安测试步骤在localhost:3000执行test-network sample测试, 等待后台tape执行完毕后,检查result页面时发现X,Y轴都无数据,如下图所示。
image

image

问题追踪

经过后台观察,发现后台报chaincode安装失败。经排查后原因如下:

  • a. 我的ubuntu 18 LTS 环境因为假期重装了,没有安装go环境(snap install golang-go一行命令传送门,搞定go 1.15x)

  • b. 我的ubuntu没有外网环境,后台编译go chaincode出错,谷歌protobuf包被墙了。
    于是:
    cd ~/Probe/fabric-samples/asset-transfer-basic/chaincode-go;
    export GO111MODULE=on && go env -w GOPROXY=https://goproxy.cn;
    go mod vendor
    耐心等待包下载完毕后,自己go build检查一下是否chaincode编译没有问题

  • c. 修改/etc/hosts文件,将以下内容写入,避免tape找不到domain。
    127.0.0.1 peer0.org1.example.com
    127.0.0.1 peer0.org2.example.com
    127.0.0.1 orderer.example.com

  • d. 重新启动 Probe
    cd ~/Probe/fabric-samples/test-network && ./network.sh down
    cd ~/Probe && npm start

  • e. 再次测试后,问题解决。

沟通 & Issues

#81
#82

意见征集 高性能SDK功能 需求

如果您有任何好的想法或者功能建议,请在这里留言。
如果您发现其他人已经建议了您希望的功能,请在对应的留言下边点赞。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.