Introduction
Distributed Systems can be defined as “a number of independent computers linked by a network.” However, I am partial to how Leslie Lamport puts it: “A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable.”1
There are many resources on Distributed Systems. You are holding one of them. As the popular programming adage from Perl goes “there is more than one way to do it.” This applies to building Distributed Systems. Google is a great resource but given that this field was anticipated in the late-70s and practically implemented since early 2000s, the practice is still new, and it is easy to get carried away with conflicting information. There are many different groups of people and companies building systems with different parameters and requirements.
There is no such thing anymore in practical web technology as a “non-distributed system”. As soon as your browser connects to a web server, you are being served by a distributed system. Depending on where you find yourself in your career or the organization, you need to understand these concepts in different granularities. Here's what I am aiming to provide for the reader. Although I'm outlining these as titles, these are no way limited to what your title in the organization is. Often in a small high growth team (usually but not exclusive to startups), you may find yourself wearing one or more of these hats -- and sometimes all of them.
- Everyone: A basic glossary of topics you want to know -- think of this as a conversational guide to Distributed Systems
- Engineer: A starting point for understanding the basic concepts. I provide references and links to concepts.
- Architect: Pros and Cons for various tools and technologies so you can compose them together for the problem at hand
- DevOps: What is the tool that the engineers are raving about lately? What do you need to watch out for.
- Manager: Empower you to assign tasks accordingly and have a lot clearer idea on what's important to watch for in the systems
- Executive: Empower you to validate claims from database and distributed systems vendors