You are required to implement in Python a stripped down and simplified web load balancer, leveraging the web server and web downloader client you implemented as part of Assignment #2 and reused in Assignment #3. Note that you will not need to use your web cache from Assignment #3 here, though it should theoretically still work with all of this. You can use your own work from Assignment #2 or #3 as a foundation here, or the provided sample Assignment #2 solution.A load balancer can be complex, but we will be making a pretty straightforward one. Usually, these things work with DNS and other systems to spread incoming requests across a pool of servers, but in our case we will be doing this entirely with HTTP redirection. (Again, this isn't necessarily the best way of doing things, but it is at least A way of doing things using the tools and previous work at our disposal!)In a nutshell,
your load balancer will sit between your web client and multiple instances of your web server. When your client submits a request, it will be sending its request to the load balancer, thinking it is the one and only source of the files it is looking for. The load balancer will have a list of the actual servers hosting the content, will select a server from the list, and respond to the client with a redirection response to inform the client to retrieve the file from the given server. On receiving this, the client will connect with the designated server and retrieve its file. Periodically, the load balancer will check each server to get a measure of their responsiveness and performance, and use this information to influence its selection process, directing more client requests to the better performing server instances.(In theory, this would be partially influenced by client and server location, but this approach should still do the job for us!)