System Design Fundamentals
Scaling Fundamentals
Once you know what the system needs to do and roughly how much load it's under, the next question is almost always: what happens when one machine isn't enough? This chapter covers the three techniques that answer that question for the vast majority of systems — scaling out, distributing load, and caching — in the order you should actually reach for them.