TDDE35 Project: Netstorm
Introduction
This is a distributed test suite that can be used to measure web servers performance from a wide set of geographical locations. The measurements that we care about in this specific test suite are throughput, latency and bandwidth link bottlenecks.
For this testing suite to work, you need to set up as many "worker nodes" as you want. These will, for best results, be placed at different locations. A "worker node" has one mission, to test against a specified web server and then send that information to one collector, called a "controller node". A "controller node" is the, well, controller in this scheme. It is the node that all the other nodes connect to and has all the control during testing. For example, it tells all the "worker nodes" when and what it should test.
Getting started
We recommend that every machine run Ubuntu 22.04 or atleast Linux.
In order to get started, please follow the steps below. (We assume that python3.11 is installed on all the machines!)
-
Clone the repository at the worker locations and one controller location
-
Setting up the controller
- Start a terminal in the src folder and write
python3 main.py controller --port myPort
where myPort is the port your controller should run on. If you do not use the --port command, you will default to port 9000.
- Start a terminal in the src folder and write
-
Setting up the worker
- You need to setup httperf. See: https://github.com/httperf/httperf
- Start a terminal in the src folder and write
python3 main.py worker --location myLocation --connect controllerAddr:port
where myLocation is the location of the worker, controllerAddr is the IP address or domain name of the controller and port is the controllers port. If you want to avoid using these commands, you can set environment variables. SetNETSTORM_CONTROLLER_ADDRESS=controllerAddr
andNETSTORM_WORKER_LOCATION=myLocation
where controllerAddr and myLocation are as described earlier.
-
You should now see some prints in the worker and controller terminals. Check the controller terminal if the connection was successful.
-
Use the
'list'
command in the controller to see if all workers are connected. When assured, typestart webserver port requests connections
where webserver and port is the webserver's address and port, requests is the amount of requests to be made and connections are the amount of connections that are to be made. Example:start google.com 80 5 1
, which will test against google at port 80 (HTTP) and will do 5 requests at 1 connection.
Authors / Developers
Oskar Arensmeier
Liam Andersson
Joakim Lundqvist
Mattias Karlsson