This chapter covers
- The difference between knowing and understanding
- The role of mental models
- The structure and behavior of a distributed system
- The correctness, scalability, and reliability of a distributed system
- The need to build distributed systems
Every modern application is a distributed application. Whether you are building a web app, mobile app, wearable app, cloud service, or game, the question is not whether an application is distributed but to what degree the application is distributed. A distributed system is a collection of collaborating, concurrent components that communicate with one another by sending and receiving 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.
Why do we distribute applications? After all, distributed applications are notoriously hard to build, so why go through the trouble?