What does it mean to scale? Essentially, it means how well a particular solution fits a problem as the scope of that problem increases. One of the original approaches to this book was to present a few illustrative case studies demonstrating epic and catastrophic business-collapsing mistakes. The dot-com bubble popping provides ample material for such horror stories. Instead, specific common problems will be presented, as well as progressive solutions that scale well. It is hoped that this approach to refining the solutions will provide insight into sound approaches to solving difficult (and easy) problems and result in improved architecting skills.
Some solutions are defined as scalable simply because the capacity of a system can be increased by adding more of the same hardware or software. This approach is called horizontal scalability and is the best (and only true) type of scalability. However, simply having a solution that scales horizontally doesn't mean that you are safe.
Solutions that do not scale horizontally (rarely called vertically) can be scaled up by adding more horsepower. This is typically done by adding storage, processors, and/or RAM to build a bigger, faster, better machine. This is an expensive strategy and should be used only to solve problems that are difficult to solve with a horizontal scaling paradigm. Difficult does not mean inconvenient. Difficult problems are those that are considered academically difficultproblems for which no legitimate solutions are available on the market.
One such academically difficult problem are large ACID-compliant databases. ACID stands for Atomicity, Consistency, Isolation, and Durability. Chapter 8, "Distributed Databases Are Easy," delves into why this is such a difficult problem, and why solving it in a horizontally scalable way requires tremendous compromise. In the world today, databases are one such architecture component typically scaled by placing the service on a mammoth machine. With the introduction of grid computing and truly distributed database architectures maturing, I foresee this changing in the immediate future.
On the other hand, problems such as serving DNS, FTP, and static web content are well understood and horizontally scalable by nature. This does not mean that building such a system is idiot-proof; great care must still be taken when building this "scalable" system.