Motivations behind distributed systems
One of the first questions should ask for the need for distribution. There are several technical motivations behind designing distributed systems.
Typical enterprise scenarios are in essence distributed. Users or other systems that are spread across locations need to communicate with a service. This needs to happen over the network.
Another reason is scalability. If a single application reaches the point where it cannot reliably serve the overall load of clients, the business logic needs to be distributed to multiple hosts.
A similar reasoning aims toward a system's fault tolerance. Single applications represent single points of failure; if the single application is unavailable, the service won't be usable by the clients. Distributing services to multiple locations increases availability and resilience.
There are also other less technology-driven motivations. An application represents certain business responsibilities. In Domain-Driven Design language they...