In my thesis I was optimizing a distributed system that is serving a web application. In such system load balancing is essential, because the incoming requests are being received by the same unit, but it delegates the processing of these requests between multiple processing units, so the system's throughput can be increased. The available load balancing algorithms ignored the data carried by the requests, I found this as an opportunity to optimize. In order to create an algorithm that does not ignore the content of the requests, I have made my own load balancing algorithm that uses the available data to approximate the processing time of the request, using this information to make better judgement on selecting the worker, which is going to make the actual processing.
The created algorithm performs better than its alternatives if the processing time between certain requests is different. If this does not apply, then it performs at least at the same level. This hypothesis is confirmed by many different tests. The implementation of the algorithm was made in C, by extending the Apache webserver using certain modules.