This is something I've always wondered about. I understand that horizontal scaling is about adding more machines into the mix. But I can think of two approaches to this. Suppose I have 20 servers I want to use (plus a database). I can:
- Make all 20 servers run as application servers.
- Make different servers do different parts of a task. For instance, have one set of servers handle the request, then another set to apply business logic, and then another to make the database call.
Number 1 seems to be more common and easier to understand, but number 2 seems to be considered "best practice" (as it's mostly an n-tier architecture). How does one choose between these two models? And what are the pros and cons of each approach?