When thinking about distributing load across a cluster of servers running instances of an application, it's interesting to consider a brief (and incomplete) history of web application architectures. Some of the earliest web applications were static HTML pages hosted by a web server, such as Apache or similar web server daemon software. Gradually, applications became more dynamic, using technologies such as server-side scripts executed through CGI. Even dynamic applications were still files hosted and served directly by a web server daemon. This simple architecture worked for a long time. Eventually, however, as the amount of traffic an application received grew, a way to distribute load among identical stateless instances of an application was needed.
There are a number of techniques for load balancing, including round-robin DNS or DNS geolocation...