Very simples HTTP/TCP Load Balancer. Implemented in Python3, single thread, using OS selector. The code contains 4 classes that implement different strategies to select the next back-end server:
- N to 1: all the requests are routed to a single server
- Round Robin: the requests are routed to all servers in sequence
- Least Connections: the request is routed to the server with fewer active connections
- Least Response Time: the request is routed to the server with less average execution time
At the moment only the first strategy is fully implemented.
The back-end server was implemented with flask. It provides a simple service that computes the number Pi with a certain precision.
$ python3 -m venv venv
$ source venv/bin/activate
$ pip3 install -r requirements.txt
$ source venv/bin/activate
$ ./setup.sh
In another terminal
$ curl -s http://localhost:8080/10
Or use a browser to open
http://localhost:8080/10
Go to a browser and open this link. The number after the URL specifies the precision of the computation.
$ ./stress_test.sh
Alternative
$ httperf --server=localhost --port=8080 --uri=/100 --num-conns=100 --rate=5
$ git remote add upstream git@github.com:detiuaveiro/load-balancer.git
$ git fetch upstream
$ git checkout master
$ git merge upstream/master
- Mário Antunes - mariolpantunes
This project is licensed under the MIT License - see the LICENSE.md file for details