Content of this directory is for running rudimentary load tests of Tinode server. You need this only if you want to run your own load tests.
The tsung.xml
is a configuration for Tsung. The tinode.beam
is an erlang binary required by the test to generate base64-encoded user-password pairs. The tinode.erl
is the source for tinode.beam
(erlc tinode.erl
-> tinode.beam
).
Install Tsung, then run the test
tsung -f ./tsung.xml start
A similar loadtest scenario is also available in Gatling. The configuration file is loadtest.scala
.
Run it with (after installing Gatling):
gatling.sh -sf . -rsf . -rd "na" -s tinode.Loadtest
Currently, three tests are available:
tinode.Loadtest
: after connecting to server, retrieves user's subscriptions, and publishes a few messages to them one by one.tinode.MeLoadtest
: attempts to max outme
topic connections.tinode.SingleTopicLoadtest
: connects to and publishes messages to the specified topic (typically, a group topic).
The script supports passing params via the JAVA_OPTS
envvar.
Parameter name | Description |
---|---|
num_sessions |
Total number of sessions to connect to the server |
ramp |
Time period in seconds over which to ramp up the load (0 to num_sessions ). |
publish_count |
Number of messages that a user will publish to a topic it subscribes to. |
publish_interval |
Maximum period of time a user will wait between publishing subsequent messages to a topic. |
accounts |
tinode.Loadtest and tinode.SingleTopicLoadtest only: Path to CSV file containing user accounts to use in loadtest (in format username,password[,token] (token field is optional). |
topic |
tinode.SingleTopicLoadtest only: topic name to send load to. |
username |
tinode.MeLoadtest only: user to subscribe to me topic. |
password |
tinode.MeLoadtest only: user password. |
Examples:
JAVA_OPTS="-Daccounts=users.csv -Dnum_sessions=100 -Dramp=10" gatling.sh -sf . -rsf . -rd "na" -s tinode.Loadtest
Ramps up load to 100 sessions listed in users.csv
file over 10 seconds.
JAVA_OPTS="-Dusername=user1 -Dpassword=user1123 -Dnum_sessions=10000 -Dramp=600" gatling.sh -sf . -rsf . -rd "na" -s tinode.MeLoadtest
Connects 10000 sessions to me
topic for user1
with password user1123
over 600 seconds.
JAVA_OPTS="-Dtopic=grpYOrcDwORhPg -Daccounts=users.csv -Dnum_sessions=10000 -Dramp=1000 -Dpublish_count=2 -Dpublish_interval=300" gatling.sh -sf . -rsf . -rd "na" -s tinode.SingleTopicLoadtest
Connects 10000 users (specified in users.csv
file) to grpYOrcDwORhPg
topic over 1000 seconds. Each user will publish 2 messages with interval up to 300 seconds.
This will be eventually packaged into a docker container.
We have tested our single-server Tinode synthetic setup with 50000 accounts on a standard t3.xlarge
AWS box (4 vCPUs, 16GiB, 5Gbps network) with the mysql
backend.
As the load increases, before starting to drop:
- The server can sustain 50000 concurrently connected sessions.
- An individual group topic was able to sustain 1500 concurrent sessions.