tarantool / cartridge-cli

Command-line utility to manage tarantool cartridge applications
Other
49 stars 18 forks source link

RFC: Cartridge bench tool for Tarantool #645

Open filonenko-mikhail opened 3 years ago

filonenko-mikhail commented 3 years ago

Cartridge bench tool for Tarantool

User Story

User setup Tarantool single node or cluster and try to understand «How many specific traffic Tarantool can handle on this hardware»

The same official things are for redis, postgresql and aerospike.

arch-ux-speedometer

Propolsal

Make a bench module for cartridge cli. Bench module makes some load for Tarantool.

MVP

The simplest case "Single Node Forever Alone"

Bench tool

"Twix Pair Candy Popkorn"

User sets up tarantool leader and tarantool follower with replication. Bench tool makes the same scenario as for "Single Node", but read requests go to the follower.

"Splinter Cell"

User sets up vshard cluster with one router and two storages. Bench tool

filonenko-mikhail commented 3 years ago

MVP PoC

Material for

Status — DONE

filonenko-mikhail commented 3 years ago

Next — Single Node Forever Alone

filonenko-mikhail commented 3 years ago

Plan For MIFI

ligurio commented 3 years ago

CH benchmark https://clickhouse.com/docs/en/operations/utilities/clickhouse-benchmark/

LeonidVas commented 3 years ago

Hi! I have a conversation with Dima and looked at the descriptions of the redis-benchmark and clickhouse-benchmark and I would like to write some thoughts. As I understand it, redis-benchmark generates the database itself in accordance with the test scenarios, and clickhouse-benchmark runs the given workload on a previously prepared database. According to the code previously proposed in the PR, we want to implement the redis-benchmark approach. As for me, this is a more interesting approach, but we need to understand what and how we plan to measure, because if there are various requests (insert, update, select, delete), some starvation may begin (for example, we have a lot of delete, but small amount of insert, respectively, we will spend a lot of time waiting insert). It is possible that it is necessary to slightly change the approach to the filling of the DB, measurements. For example, we can also measure the average (moving average) execution time of a request depending on its type (this will not give us information about ​​the throughput, but it will give information about ​​the latency for this type of load). We can also measure the duration of the benchmark in the number of requests and set the time limit as a limitation, then we can prepare a DB in which starvation will be unlikely / impossible. Also, a couple of points on which I think it is important to clarify:

I plan to take a closer look at the redis-benchmark and see how the DB is filled there in various test scenarios.