Skip to content

Commit

Permalink
document update and prepare for 0.2.0 release (#253)
Browse files Browse the repository at this point in the history
* document update and prepare for 0.2.0 release

Signed-off-by: Sam Yuan <yy19902439@126.com>

* fix up a threads bug found in CI

Signed-off-by: Sam Yuan <yy19902439@126.com>

* fix up via pr comments

Signed-off-by: Sam Yuan <yy19902439@126.com>

* fix up for test bug

Signed-off-by: Sam Yuan <yy19902439@126.com>
  • Loading branch information
SamYuan1990 authored Apr 8, 2022
1 parent 23d51ff commit 5e02b68
Show file tree
Hide file tree
Showing 22 changed files with 476 additions and 199 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,7 @@

e2e/Tape.log
# local dependency
vendor
vendor

tape
Tape.log
8 changes: 4 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
FABRIC_VERSION = latest
INTERGATION_CASE = ANDLogic

BASE_VERSION = 0.0.2
PREV_VERSION = 0.0.1
BASE_VERSION = 0.2.0
PREV_VERSION = 0.1.2

PROJECT_NAME = tape
DOCKERIMAGE = ghcr.io/hyperledger-twgc/tape
Expand All @@ -28,8 +28,8 @@ MARCH=$(shell go env GOOS)-$(shell go env GOARCH)
METADATA_VAR = Version=$(BASE_VERSION)
METADATA_VAR += CommitSHA=$(EXTRA_VERSION)

GO_LDFLAGS = $(patsubst %,-X $(PROJECT_NAME)/pkg/infra.%,$(METADATA_VAR))
GO_LDFLAGS += -X '$(PROJECT_NAME)/pkg/infra.BuiltTime=$(BuiltTime)'
GO_LDFLAGS = $(patsubst %,-X $(PKGNAME)/pkg/infra/cmdImpl.%,$(METADATA_VAR))
GO_LDFLAGS += -X '$(PKGNAME)/pkg/infra/cmdImpl.BuiltTime=$(BuiltTime)'

GO_TAGS ?=

Expand Down
19 changes: 14 additions & 5 deletions README-zh.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
# Tape
<div align="center">
<img src="logo.svg" width="100">
</div>
Tape 是一款轻量级 Hyperledger Fabric 性能测试工具

[![Go doc](https://img.shields.io/badge/go.dev-reference-brightgreen?logo=go&logoColor=white&style=flat)](https://pkg.go.dev/github.com/hyperledger-twgc/tape)
[![Github workflow test](https://github.com/Hyperledger-TWGC/tape/actions/workflows/test.yml/badge.svg)](https://github.com/Hyperledger-TWGC/tape/actions/workflows/test.yml)

## 项目背景

Tape 项目原名 Stupid,最初由 超级账本中国技术工作组成员[郭剑南](https://github.com/guoger)开发,目的是提供一款轻量级、可以快速测试 Hyperledger Fabric TPS 值的工具。Stupid 取自 [KISS](https://en.wikipedia.org/wiki/KISS_principle) 原则 Keep it Simple and Stupid,目前已正式更名为 Tape,字面含义卷尺,寓意测量,测试。
Tape 项目原名 Stupid,最初由 超级账本中国技术工作组成员[郭剑南](https://github.com/guoger)开发,目的是提供一款轻量级、可以快速测试 Hyperledger Fabric TPS 值的工具。Stupid 取自[KISS](https://en.wikipedia.org/wiki/KISS_principle) 原则 Keep it Simple and Stupid,目前已正式更名为Tape,字面含义卷尺,寓意测量,测试。

目前 Tape 已贡献到超级账本中国技术社区,由 [TWGC 性能优化小组](https://github.com/Hyperledger-TWGC/fabric-performance-wiki)负责维护。
目前 Tape 已贡献到超级账本中国技术社区,由[TWGC 性能优化小组](https://github.com/Hyperledger-TWGC/fabric-performance-wiki)负责维护。

## 项目特点

Expand All @@ -21,11 +27,11 @@ Tape由负载生成器客户端和观察者客户端组成。因此Tape仅可以

## 文档索引

如果你想快速使用 Tape 测试 TPS,请参考[快速开始](docs/gettingstarted.md)
如果你想快速使用 Tape 测试 TPS,请参考[快速开始](docs/zh/gettingstarted.md)

如果你想了解配置文件中各项参数的具体含义,请参考[配置文件说明](docs/configfile.md)
如果你想了解配置文件中各项参数的具体含义,请参考[配置文件说明](docs/zh/configfile.md)

如果你想详细了解 Tape 工作流程,请参考[工作流程](docs/workflow.md)
如果你想详细了解 Tape 工作流程,请参考[工作流程](docs/zh/workflow.md)

如果你在使用过程中遇到了问题请参考[FAQ](https://github.com/Hyperledger-TWGC/tape/wiki/FAQ),如果 FAQ 还不能解决你的问题,请在 github 中提 issue,或者发邮件咨询项目维护者。

Expand All @@ -37,3 +43,6 @@ Tape由负载生成器客户端和观察者客户端组成。因此Tape仅可以
## 使用许可

Tape 遵守 [Apache 2.0 开源许可](LICENSE)

## Credits
Icons made by <a href="https://www.flaticon.com/authors/good-ware" title="Good Ware">Good Ware</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a>
25 changes: 4 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,42 +36,25 @@ You could get `tape` in three ways:
## [Configure](docs/configfile.md)

## Usage
---
[**Sample run of Tape**](https://www.bilibili.com/video/BV1k5411L79)

---
For further usage, please see [getting start](/docs/gettingstarted.md)

### Binary

Execute `./tape -c config.yaml -n 40000` to generate 40000 transactions to Fabric.


### Docker

```
```shell
docker run -v $PWD:/tmp ghcr.io/hyperledger-twgc/tape tape -c $CONFIG_FILE -n 40000
```

*Set this to integer times of batchsize, so that last block is not cut due to timeout*. For example, if you have batch size of 500, set this to 500, 1000, 40000, 100000, etc.

### CommitOnly
```
docker run -v $PWD:/tmp ghcr.io/hyperledger-twgc/tape tape commitOnly -c $CONFIG_FILE -n 40000
```


### EndorsementOnly
```
docker run -v $PWD:/tmp ghcr.io/hyperledger-twgc/tape tape endorsementOnly -c $CONFIG_FILE -n 40000
```
## [FAQ](https://github.com/Hyperledger-TWGC/tape/wiki/FAQ)

---
## Contribute
[How to Contribute](CONTRIBUTING.md)
[workflow](docs/workflow.md)

---
## License
Expand Down
66 changes: 19 additions & 47 deletions docs/configfile.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
# Configuraion in Details/配置文件说明
# Configuraion in Details

Tape need a configuration file as `config.yaml`. You can find it in project root. Before start Tape to test your own network, please modify it accordingly.

我们为 Tape 提供了一个示例配置文件 `config.yaml`,你可以在项目根目录下找到它。使用 Tape 进行测试之前,请根据您的区块链网络情况修改该配置文件。

This is a sample:

`config.yaml` 示例配置文件如下所示:

```yaml
# Definition of nodes
peer1: &peer1
Expand Down Expand Up @@ -61,13 +55,7 @@ num_of_conn: 10
client_per_conn: 10
```
Let's deep dive the config.
接下来我们将逐一解析该配置文件的含义。
1st node related setting:
首先,前三个部分:
```yaml
# Definition of nodes
peer1: &peer1
Expand All @@ -81,12 +69,6 @@ orderer1: &orderer1
```
Here defines for nodes, including peer and orderer. we need address, org name (for endorsement policy usage), and (m)TLS certs if any.
定义了不同的节点,包括 Peer 节点和排序节点,配置中需要确认节点地址以及 TLS CA 证书(如果启用 TLS,则必须配置 TLS CA 证书)。
其中节点地址格式为`地址:端口`。此处`地址`推荐使用域名,否则需要在`ssl_target_name_override`中指定域名。另外org表明了peer所属的组织信息以用来供给背书策略使用。

如果启用了双向 TLS,即你的 Fabric 网络中的 Peer 节点在 core.yaml 配置了 "peer->tls->clientAuthRequired" 为 "true",我们就需要在配置文件中增加 TLS 通信中需要使用的密钥,双向 TLS 配置示例如下:

```yaml
peer1: &peer1
addr: localhost:7051
Expand All @@ -110,15 +92,12 @@ orderer1: &orderer1
tls_ca_root: ./organizations/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/server.crt
```
其中三个 TLS 相关的证书/密钥说明如下:
- `tls_ca_cert`:客户端 TLS 通信时使用的证书文件。
- `tls_ca_key`:客户端 TLS 通信时使用的私钥文件。
- `tls_ca_root`:CA 根证书文件。
- `tls_ca_cert` TLS cert。
- `tls_ca_key`:TLS private key。
- `tls_ca_root`:CA root cert。

Then move to endorsement and commit parts:

接下来的三个部分:

```yaml
policyFile: /config/test/andLogic.rego
# Nodes to interact with
Expand All @@ -136,11 +115,7 @@ commitThreshold: 1
orderer: *orderer1
```

We defined endorsement peer, commit peer and orderer node in each sections. With `policyFile` for given endorsement policy. So far we use OPA and rego for endorsement policy. You can file as sample below.

分别定义了角色为背书节点(endorsers)、提交节点(committer)和排序节点(orderer)的节点。

`policyFile`: 指代背书策略文件,我们目前采用了rego和OpenPolicyAnywhere. 一个org1和org2都需要对交易进行背书的逻辑可以描述为:
We defined endorsement peer, commit peer and orderer node in each sections. With `policyFile` for given endorsement policy. So far we use OPA and rego for endorsement policy. You can file as sample for a policy as `org1` and `org2` can be described as below:
```
package tape
Expand All @@ -152,19 +127,18 @@ allow {
}
```

`endorsers`: 负责为交易提案背书的节点,Tape 会把构造好的已签名的交易提案发送到背书节点进行背书。
`endorsers`: peer node for endorsement the traffic
- include the addr and tls ca cert of peers. Peer address is in IP:Port format.
- You may need to add peer name, i.e. `peer0.org1.example.com,peer0.org2.example.com` to your `/etc/hosts`
`committers`: 负责接收其他节点广播的区块提交成功的信息。
`committers`: peer node for block commit
- observe tx commitment from these peers. If you want to observe over 50% of peers on your network, you should selected and put them here.
`commitThreshold`: 多少个节点收到消息后认为区块成功
`commitThreshold`: how many peers committed the block as the block logically committed among fabric network.
- mark the block as successe, after how many committer receive the mesage
`orderer`: 排序节点,目前 Tape 仅支持向一个排序节点发送交易排序请求。
`orderer`: orderer node
- include the addr and tls ca cert of orderer. Orderer address is in IP:Port format. It does not support sending traffic to multiple orderers, yet.
- You may need to add orderer name, i.e. `orderer.example.com` to your `/etc/hosts`
Tape 以 Fabric 用户的身份向区块链网络发送交易,所以还需要下边的配置:

This tool sends traffic as a Fabric user, and requires following configs
As Tape sends traffic as a Fabric user, and requires following configs

```yaml
# Invocation configs
Expand All @@ -184,15 +158,13 @@ num_of_conn: 10
client_per_conn: 10
```

`channel`:通道名。

`chaincode`:要调用的链码名。
`channel`:channel name

`commitThreshold`: how many committers received the block see as successed.
`chaincode`: chaincode name

`version`: the version of chaincode. This is left to empty by default.

`args`要调用的链码的参数。参数取决于链码实现,例如,fabric-samples 项目中提供的示例链码 [abac](https://github.com/hyperledger/fabric-samples/blob/master/chaincode/abac/go/abac.go) ,其功能为账户A和账户B之间的转账。如果想要以此链码作为性能测试的链码,执行操作为账户A向账户B转账10,则参数设置如下:
`args`args for chaincode action, take sample from [abac](https://github.com/hyperledger/fabric-samples/blob/master/chaincode/abac/go/abac.go) ,if from alice trans 10 to bob.

```
args:
Expand All @@ -202,7 +174,7 @@ args:
- 10
```
如果需要随机数支持,目前我们提供了三种随机方式`uuid`,`randomString$length`(随机长度为n的字符),`randomNumberA_B`(A,B之间的随机数)
for random arg support, we support `uuid`,`randomString$length`,`randomNumberA_B`
```
args:
- CreateAsset
Expand All @@ -213,12 +185,12 @@ args:
- randomNumber0_50
```
`mspid`:MSP ID 是用户属性的一部分,表明该用户所属的组织。
`mspid`:MSP ID.
`private_key`:用户私钥的路径。如果你使用 BYFN 作为你的测试网络,私钥路径为 `crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/priv_sk` 。
`private_key`:private key for user, sample as `crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/priv_sk` 。
`sign_cert`:用户证书的路径。如果你使用 BYFN 作为你的测试网络,私钥路径为 `crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem` 。
`sign_cert`: cert for user, sample as `crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem` 。
`num_of_conn`:客户端和 Peer 节点,客户端和排序节点之间创建的 gRPC 连接数量。如果你觉得向 Fabric 施加的压力还不够,可以将这个值设置的更大一些。
`num_of_conn`:over all connection setting between tape client and peer, tape client and orderer
`client_per_conn`:每个连接用于向每个 Peer 节点发送 提案的客户端数量。如果你觉得向 Fabric 施加的压力还不够,可以将这个值设置的更大一些。所以 Tape 向 Fabric 发送交易的并发量为 `num_of_conn` * `client_per_conn`
`client_per_conn`:connection number between tape client and peer, `Total connections number = num_of_conn * client_per_conn`
89 changes: 32 additions & 57 deletions docs/gettingstarted.md
Original file line number Diff line number Diff line change
@@ -1,74 +1,55 @@
# 快速开始
# Quick start

## 视频教程
## Tutorial Video

[这里](https://www.bilibili.com/video/BV1k5411L79A/) 有一个视频教程,欢迎观看
[here](https://www.bilibili.com/video/BV1k5411L79A/) is a video demo

## 安装
## Install

你可以通过以下三种方式安装 `tape`
You are able to install `tape` via ways blow

1. **下载二进制文件**[这里](https://github.com/hyperledger-twgc/tape/releases)下载 tar 包,并解压
1. **download binary**from[release page](https://github.com/hyperledger-twgc/tape/releases)download binary

2. **本地编译**:克隆本仓库并在根目录运行如下命令进行编译:

```
go build ./cmd/tape
```

注意:

1. 推荐 Go 1.14。Go 语言的安装请参考[这里](https://golang.google.cn/doc/install)

2. Tape 项目是一个 go module 工程,因此不用将项目保存到 `GOPATH` 下,任意目录都可执行编译操作。执行编译命令之后,它会自动下载相关依赖,下载依赖可能需要一定时间。编译完成后,会在当前目录生成一个名为 tape 的可执行文件。

3. 如果下载依赖速度过慢,推荐配置 goproxy 国内代理,配置方式请参考[Goproxy 中国](https://goproxy.cn/)

3. **拉取 Docker 镜像**:

```
docker pull ghcr.io/hyperledger-twgc/tape
```

## 编译 Docker(可选)
2. **local complie**
```shell
make tape
```

Tape 支持本地编译 Docker 镜像,在项目根目录下执行以下命令即可:
3. **Docker image**:
```shell
docker pull ghcr.io/hyperledger-twgc/tape
```

## Local Docker complie(optional)
```shell
make docker
```

执行成功之后本地会增加一个 ghcr.io/hyperledger-twgc/tape:latest 的 Docker 镜像。

## 修改配置文件

请根据[配置文件说明](configfile.md)修改配置文件。

注意:如果需要修改 hosts 文件,请注意相关映射的修改。

## 运行
## Edit configuration file according to your fabric network

执行如下命令即可运行测试:
according to [this](configfile.md) edit config file.

```
## Run
### default run:
```shell
./tape --config=config.yaml --number=40000
```

该命令的含义是,使用 config.yaml 作为配置文件,向 Fabric 网络发送40000条交易进行性能测试。
> 使用 `./tape --help` 可以查看 tape 帮助文档
注意:**请把发送交易数量设置为 batchsize (Fabric 中 Peer 节点的配置文件 core.yaml 中的参数,表示区块中包含的交易数量)的整倍数,这样最后一个区块就不会因为超时而出块了。** 例如,如果你的区块中包含交易数设为500,那么发送交易数量就应该设为1000、40000、100000这样的值。


## 日志说明

我们使用 [logrus](https://github.com/sirupsen/logrus) 来管理日志,请通过环境变量 `TAPE_LOGLEVEL` 来设置日志级别。例如:

### CommitOnly
```shell
docker run -v $PWD:/tmp ghcr.io/hyperledger-twgc/tape tape commitOnly -c $CONFIG_FILE -n 40000
```
### EndorsementOnly
```shell
docker run -v $PWD:/tmp ghcr.io/hyperledger-twgc/tape tape endorsementOnly -c $CONFIG_FILE -n 40000
```

## Log level
environment `TAPE_LOGLEVEL` for log level
```shell
export TAPE_LOGLEVEL=debug
```

日志级别共有如下八级,默认级别为 `warn`
default is `warn`
- panic
- fatal
- error
Expand All @@ -77,9 +58,3 @@ export TAPE_LOGLEVEL=debug
- info
- debug
- trace

## 注意事项

- 请把 Tape 和 Fabric 部署在接近的位置,或者直接部署在同一台机器上。这样就可以防止因网络带宽问题带来的瓶颈。你可以使用类似 `iftop` 这样的工具来监控网络流量。
- 可以使用类似 `top` 这样的指令查看 CPU 状态。在测试刚开始的时候,你可能会看到 CPU 使用率很高,这是因为 Peer 节点在处理提案。这种现象出现的时间会很短,然后你就会看到区块一个接一个的被提交。
- 修改 Peer 的出块参数,可能会有不同的测试结果。如果你想测试最佳出块参数,请查看 [Probe](https://github.com/SamYuan1990/Probe) 项目,该项目的目的就是测试 Fabric 的最佳出块参数。
Loading

0 comments on commit 5e02b68

Please sign in to comment.