What even is distributed systems - Notes on software development
Notes on software developmentDistributed systems is simply the study of interactions betweenprocesses. Every two interacting processes form a distributed system,whether they are on the same host or not. Distributed systems createnew challenges (compared to single-process systems) in terms ofcorrectness (i.e. consistency), reliability, and performance(i.e. latency and throughput).
The best way to learn about the principles and fundamentals ofdistributed systems is to 1) read Designing Data IntensiveApplications and 2) read through the papers and follow the notes inthe MIT Distributed Systemscourse.
For Designing Data Intensive Applications (DDIA), I strongly encourageyou to find buddies at work or online who will read it through withyou. You can also always join the Software InternalsDiscord's #distsys channel toask questions as you go. But it's still best if you have some partnersto go through the book with, even if they are as new to it as you.
I also used to think that you might want to wait a few years into yourcareer before reading DDIA but when you have friends to read it with Ithink you need not wait.
If you have only skimmed the book you should definitely go back andgive it a thorough read. I have read it three times already and I willread it again as part of the Software Internals BookClub next year after the 2ndEdition is published.
Keep in mind that every chapter of DDIA provides references to papersyou can keep reading should you end up memorizing DDIA itself.
When you've read parts of DDIA or the MIT Distributed Systems courseand you want practice, the Fly.io x Jepsen Distributed SystemsChallenge is one guided option. Otheroptions might include simply implementing (getting progressively morecomplex down the list):
- two-phase commit
- three-phase commit
- single-decree Paxos
- chain replication (or CRAQ), using a 3rd-party consensus library
- Raft
- epaxos
And if you get bored there you can see Alex Miller's Data ReplicationDesignSpectrumfor more ideas and variants.
If these projects and papers sound arcane or intimidating, know thatyou will see the problems these projects/papers solve whether or notyou know and understand these solutions. Developers often end upreinventing hacky versions of these which are more likely to havesubtle bugs, while instead you can recognize and use one of thesewell-known building blocks. Or at least have the background to betterreason about correctness should you be in a situation where you mustwork with a novel distributed system or you end up designing a new oneyourself.
And again, if you want folks to bounce ideas off of or ask questionsto, I strongly encourage you to join the Software Internals Discordand ask there!
I wrote a short post on learning the fundamentals of distributed systems, with a few suggested resources to read and a few suggested projects to try. pic.twitter.com/b0EhDP8K0t
— Phil Eaton (@eatonphil) August 9, 2025
本文章由 flowerss 抓取自RSS,版权归源站点所有。
查看原文:What even is distributed systems - Notes on software development