Horizontally scalable systems achieve both availability and scalability through multiplicity. Adding more machines to increase capacity simultaneous improves resiliency to impulses. The smaller servers used in horizontally scalable architectures also cost far less and allow you to add capacity in small increments. What’s not to like?
Building systems for horizontal scaling automatically implies some form of load balancing. Load balancing is all about distributing requests across a pool or farm of servers to serve all requests correctly in the shortest feasible time. Throughout the remainder of this book, I will commonly refer to designs and situations involving one of these forms of load balancing.
DNS round-robin ...