A Beginner’s Guide to Learning About Distributed Systems
For those of us making the transition to full stack developers, particularly when designing applications for scale, there’s a critical topic we need to learn — distributed systems. As I was learning this topic, I realized there was no aggregated source of the the best resources online.
We need one of those!
So this post is for all of us — the below recommendations are the best I’ve found: clearly written and succinct, not overwhelming, and easy to understand.
Newbies: Start with learning about distributed systems conceptually and start simple. I love this piece from Stanislav Kozlovski hosted on freecodecamp.
Armed with the beginning level understanding of what a distributed system is, we can start thinking about what can go wrong with it. No shame: even talented developers don’t anticipate the common issues hit while running client/server architectures on a distributed system, and don’t plan for them in their application code.
First: We design distributed systems with the expectation of failure.
Second: If you’ve read just those things, you already know more about distributed systems than most developers in the world, so congratulations.
Next: As a former support leader, I can tell you that the most common failure scenarios for distributed systems are network related.
Any person who wants to understand/not fail at the entire distributed systems topic needs to get a little better (not great, just better) at networking. Pick your flavor, mine is Linux — and for that education I trust Julia Evans’ awesome zines. Here is one for Bitesize Networking that even a fool like me could follow. You’ll get familiar with tcpdump, netstat/ss, iptables, ip, arp, ngrep
etc. These are also just fun, and useful to have on hand.
Ok! You’re practically a wizard at distributed systems now. Are you ready to learn from a true expert? Look no further than this course from Kyle @ Jepsen. It’s more than 10 hours of short hand notes, but I believe in you.
We’re (basically) done, but maybe you want a little more? Your next stop is to just pick whatever is interesting from the awesome distributed systems repo on Github. You can handle anything you find.
For those prefer books, there are entire novels online on this topic. I’ve read and liked Distributed Systems Concepts and Design. It’s 1000+ pages long and if you have insomnia… check here. Specifically, and very relevantly, I usually ask folks to read chapter 18 regarding replication.
And if you’ve decided that what you really want is to work in distributed systems (welcome friend! isn’t this a strange and wonderful topic you wish you’d known about years ago?), then I recommend reading this book from cover to cover:
Reach out with feedback or comments.