Loadtesting VerneMQ
Loadtesting VerneMQ with vmq_mzbench
You can loadtest VerneMQ with our vmq_mzbench tool. It is based on Machinezone's very powerful MZBench system and lets you narrow down what hardware specs are needed to meet your performance goals. You can state your requirements for latency percentiles (and much more) in a formal way, and let vmq_mzbench automatically fail, if it can't meet the requirements.
If you have an AWS account, vmq_mzbench can automagically provision worker nodes for you. You can also run it locally, of course.
1. Install MZBench
Please follow the MZBench installation guide
2. Install vmq_mzbench
Actually, you don't even have to install vmq_mzbench, if you don't want to. Your scenario file will automatically fetch vmq_mzbench for any test you do. vmq_mzbench runs every test independently, so it has a provisioning step for any test, even if you only run it on a local worker.
To install vmq_mzbench on your computer, go through the following steps:
To provision your tests from this local repository, you'll have to tell the scenario scripts to use rsync. Add this to the scenario file:
If you'd just like the script itself fetch vmq_mzbench, then you can direct it to github:
3. Write vmq_mzbench scenario files
MZBench recently switched from an Erlang-styled Scenario DSL to a more python-like DSL dubbed BDL (Benchmark Definition Language). Have a look at the BDL examples on Github.
You can familiarize yourself quickly with MZBench's guide on writing loadtest scenarios.
There's not much to learn, just make sure you understand how pools and loops work. Then you can add the vmq_mzbench statement functions to the mix and define actual loadtest scenarios.
Currently vmq_mzbench exposes the following statement functions for use in MQTT scenario files:
random_client_id(State, Meta, I)
: Create a random client Id of length Ifixed_client_id(State, Meta, Name, Id)
: Create a deterministic client Id with schema Name ++ "-" ++ Idworker_id(State, Meta)
: Get the internal, sequential worker Idclient(State, Meta)
: Get the client Id you set yourself during connection setup with the option {t, client, "client"}connect(State, Meta, ConnectOpts)
: Connect to the broker with the options given in ConnectOptsdisconnect(State, Meta)
: Disconnect normallysubscribe(State, Meta, Topic, QoS)
: Subscribe to Topic with Quality of Service QoSunsubscribe(State, Meta, Topic)
: Unubscribe from Topicpublish(State, Meta, Topic, Payload, QoS)
: Publish a message with binary Payload to Topic with QoSpublish(State, Meta, Topic, Payload, QoS, RetainFlag)
: Publish a message with binary Payload to Topic with QoS and RetainFlag
It's easy to add more statement functions to the MQTT worker if needed, get in touch with us.
Last updated