Modern systems are rarely deployed on a single machine. With the availability of high-speed LAN interconnects, cloud-based pay-per-use environments, and microservices-based architectures, systems are increasingly composed on independent services, which are deployed on multiple computers. They work together to give a single coherent experience to the users.
Distributed architectures have two key ingredients:
- Components: Modular units with well-defined interfaces (such as services and databases)
- Interconnects: The communication links between the components (sometimes with the additional responsibility of mediation/coordination between components)
In the initial days of non-distributed computation, the components were hosted within a single process and components were essentially software modules that were orchestrated/initiated by a driver (Main) program. However...