Patterns of Distributed Systems (2020)
> What does it mean for a system to be distributed? There are two aspects:
> 1. They run on multiple servers. The number of servers in a cluster can vary from as few as three servers to a few thousand servers.
> 2. They manage data. So these are inherently 'stateful' systems.It's a pity that they don't get to the crux of distributed systems because it's very well defined and described for ~40 years now. Instead they describe the key characteristics of a distributed system in a very hand-wavy manner.The two fundamental ways in which distributed computing differs from single-server/machine computing are.1. No shared memory.
2. No shared clock.Almost every problem faced in distributed systems could be traced to one of these aspects.Because there's no shared memory it's impossible for any one server to know the global state. And so you need consensus algorithms.And due to lack of shared clock it's impossible to order the events. To overcome this software logical clock has to be overlaid on top of distributed systems.Added to this is the failure modes that are peculiar to distributed systems, be it transient/permanent link failures and transient/permaent server failures.This[1] is a decent description of what I've just described here.I also recommend to read up on some key impossibility results in distributed system. The most famous one being the impossibility of achiving common knowledge.I'm surprised that someone as reputed as Thoughtworks don't describe the topic in more precise terms.[1] https://www.geeksforgeeks.org/limitation-of-distributed-syst...