-
Notifications
You must be signed in to change notification settings - Fork 39
A Quick Way to Run TPS
This is a tutorial to help you run GoQuarkChain clusters and get your own TPS record real quickly.
Here is a demo video for the same purpose.
For more detailed information please refer to this doc.
First of all, you need to get a bunch of machines prepared to run clusters. It is required that they have:
- Ubuntu 18.04,
- SSH server installed and running,
- root account is enabled, and
- 38291, 38391, 38491, [48000, 48000 + host number] ports opened.
Better to have, they are all in the same subnet.
In one of your hosts, or your laptop of any OS with Docker installed, run the following commands to pull the Docker image and start a container:
# specify a version tag if needed; use 'latest' for latest code
sudo docker pull quarkchaindocker/goquarkchain:<version tag>
sudo docker run -itd --name deployer quarkchaindocker/goquarkchain:<version tag>
NOTE it would be faster to run deployer
container in one of the hosts, but requires latest version Docker installed first.
With the file deployConfig.json, you can configure multiple clusters connected to each other. Here is a simple example in which 3 clusters are deployed on 3 hosts:
{
"DockerName": "quarkchaindocker/goquarkchain",
"Hosts": [
{
"IP": "192.168.183.158",
"Port": 22,
"User": "root",
"Password": "password",
"IsMaster": true,
"SlaveNumber": 1,
"ClusterID": 0
},
{
"IP": "192.168.183.159",
"Port": 22,
"User": "root",
"Password": "password",
"IsMaster": true,
"SlaveNumber": 1,
"ClusterID": 1
},
{
"IP": "192.168.183.160",
"Port": 22,
"User": "root",
"Password": "password",
"IsMaster": true,
"SlaveNumber": 1,
"ClusterID": 2
}
],
"CHAIN_SIZE": 2,
"SHARD_SIZE": 4,
"ExtraClusterConfig": {
"TargetRootBlockTime": 20,
"TargetMinorBlockTime": 4,
"GasLimit": 96000000
}
}
You can update the file outside, and copy it into Docker:
# outside Docker container 'deployer'
sudo docker cp deployConfig.json deployer:/go/src/github.com/QuarkChain/goquarkchain/tests/loadtest/deployer
NOTE TPS competition requires that:
- The number of clusters: >= 3
- TargetRootBlockTime: 20s ~ 60s
- TargetMinorBlockTime : 4s ~ 10s
- GasLimit:<=96,000,000
For detailed explanation of the configurations and more advanced example please refer to here.
Get into Docker container deployer
sudo docker exec -it deployer /bin/bash
The following command will deploy Docker containers named bjqkc
with cluster executables to remote hosts, and start the services of each cluster one by one:
# inside Docker container 'deployer'
cd /go/src/github.com/QuarkChain/goquarkchain/tests/loadtest/deployer
# (optionally) if Docker is not installed in the hosts
go run deploy_cluster.go --init_env
# deploy
go run deploy_cluster.go
If everything goes correctly, you will see from deployer
console log that each cluster started successfully and peers connected to each other.
NOTE the following steps will be executed inside one of the deployed Docker containers (all named bjqkc
).
Log in to one of the hosts running master service of a cluster, and execute the following command to enter Docker container:
# outside Docker container 'bjqkc'
sudo docker exec -it bjqkc /bin/bash
Start mining:
# inside Docker container 'bjqkc'
curl -X POST -H 'content-type: application/json' --data '{"jsonrpc":"2.0","method":"setMining","params":[true],"id":0}' http://127.0.0.1:38491
# inside Docker container 'bjqkc'
curl -X POST -H 'content-type: application/json' --data '{"jsonrpc": "2.0","method": "createTransactions","params": [{ "numTxPerShard": 10000,"xShardPercent": 0}],"id": 1}' http://127.0.0.1:38491
Now you can observe the status of your clusters including TPS:
# inside Docker container 'bjqkc'
cd /go/src/github.com/QuarkChain/goquarkchain/cmd/stats
go run stats.go
Enjoy!