1 Thinking in distributed systems: Models, mindsets, and mechanics
This chapter covers
- Knowing versus understanding
- The significance of mental models
- The structure and behavior of a distributed system
- The correctness, scalability, and reliability of a distributed system
- Recognizing the need for building distributed systems
Every modern application is a distributed application. Whether you are building a web app, a mobile app, or a cloud service, the question is not whether an application is distributed, but to what degree the application is distributed.
Why do we distribute applications? After all, distributed applications are notoriously hard to build, so why go through the trouble?
We assess the fitness of a system in terms of correctness, scalability, and reliability. In other words, a system must provide its intended function even in the presence of increasing load and inevitable failures. While a single component can be functional, no single component can handle unbounded load or survive inevitable failures. We need more than one component. We need a distributed system.
A distributed system is a collection of concurrent components that communicate with each other by exchanging messages over a network:
- The behavior of a distributed system emerges from the behavior of its components and their interactions.
- The complexity of a distributed system emerges from the complexity of its components and the intricacy of their interactions.