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.<p>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.<p>The two <i>fundamental</i> ways in which distributed computing differs from single-server/machine computing are.<p>1. No shared memory.
2. No shared clock.<p>Almost every problem faced in distributed systems could be traced to one of these aspects.<p>Because there's no shared memory it's impossible for any one server to <i>know</i> the global state. And so you need consensus algorithms.<p>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.<p>Added to this is the failure modes that are peculiar to distributed systems, be it transient/permanent link failures and transient/permaent server failures.<p>This[1] is a decent description of what I've just described here.<p>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.<p>I'm surprised that someone as reputed as Thoughtworks don't describe the topic in more precise terms.<p>[1] <a href="https://www.geeksforgeeks.org/limitation-of-distributed-system/" rel="nofollow">https://www.geeksforgeeks.org/limitation-of-distributed-syst...</a>