1 Thinking in distributed systems: Models, mindsets, and mechanics

 

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?

1.1 Software engineering and mental models

1.1.1 Mental models: The foundation of reasoning

1.1.2 Correct mental models

1.1.3 Complete mental models

1.2 Mental model of software systems

1.3 Different types of models

1.3.1 Different models describing the same aspects

1.3.2 Different models describing different aspects of a system

1.4 Thinking about distributed systems

1.4.1 Correctness

1.4.2 Scalability and reliability

1.4.3 Responsiveness

1.5 Two big ideas

1.5.1 Systems of systems

1.5.2 Global view vs. local view

1.6 Distributed Systems Incorporated

Summary