# Distributed System Learning Path ## Metadata **Status**:: #x **Zettel**:: #zettel/index **Created**:: [[2024-08-02]] ## Preparation - [x] Link [Learning about distributed systems: where to start? | Readwise](https://read.readwise.io/later/read/01j446bgcjxseqmn612kf7tpwc) - [[Murat Demirbas - Learning about distributed systems where to start (Highlights)]] - [x] List steps in [Learning about distributed systems: where to start? | Readwise](https://read.readwise.io/later/read/01j446bgcjxseqmn612kf7tpwc) ## Syllabus - Read [Distributed systems for fun and profit](https://book.mixu.net/distsys/single-page.html) - Read the book [Introduction to Distributed Systems](https://cse.buffalo.edu/~demirbas/CSE586/book.pdf) by ⁠⁠Paul Sivilotti. - [Learn TLA+](https://learntla.com/) - Read [Practical TLA+](https://link.springer.com/book/10.1007/978-1-4842-3829-5) - Read [Distributed Systems 3rd edition (2017)](https://www.distributed-systems.net/index.php/books/ds3/) - Read the article [Two-Phase Commit and Beyond](https://muratbuffalo.blogspot.com/2018/12/2-phase-commit-and-beyond.html) - [Model Paxos in TLA+](https://muratbuffalo.blogspot.com/2016/11/modeling-paxos-and-flexible-paxos-in.html) - Read [Hybrid Logical Clocks](https://muratbuffalo.blogspot.com/2014/07/hybrid-logical-clocks.html) - Read [Logical clocks and Vector clocks modeling in TLA+/PlusCal](https://muratbuffalo.blogspot.com/2018/01/logical-clocks-and-vector-clocks.html) - Read [There is No Now](https://queue.acm.org/detail.cfm?id=2745385) - Read Designing Data-Intensive Applications ## AI Supplementary Materials > [!bot] Perspective > > That's a great learning path you've put together for distributed systems! Here are some suggestions to improve it and fill in some gaps for a smoother learning experience: > > 1. Start with fundamentals: > - Before diving into the Sivilotti book, consider reading an introduction to operating systems concepts, as distributed systems build on many OS principles. > - Add "Distributed Systems for Fun and Profit" by Mikito Takada - it's a free online book that provides a concise overview of key distributed systems concepts. > > 2. Practical experience: > - After reading the Sivilotti book, implement some basic distributed algorithms like leader election or consensus in a language of your choice. > - Consider adding a hands-on course like MIT's 6.824 Distributed Systems, which has lectures and labs available online. > > 3. Formal methods: > - Before jumping into TLA+, introduce yourself to formal specification and verification concepts. > - Add "Specifying Systems" by Leslie Lamport as a precursor to the TLA+ resources you've listed. > > 4. Advanced topics: > - After reading about Two-Phase Commit, explore other consensus protocols like Raft and Zab. > - Add "Impossibility of Distributed Consensus with One Faulty Process" (FLP impossibility result) to understand fundamental limitations in distributed systems. > > 5. Real-world systems: > - After reading about Paxos, study how it's used in real systems like Chubby (Google) and Zookeeper (Apache). > - Add case studies of large-scale distributed systems like Amazon's Dynamo, Google's Spanner, etc. > > 6. Consistency models: > - Add readings on different consistency models (strong consistency, eventual consistency, causal consistency) before diving into logical clocks. > > 7. Distributed databases: > - Before reading "Designing Data-Intensive Applications", add some introductory material on distributed databases and NoSQL systems. > > 8. Networking fundamentals: > - Ensure you have a solid understanding of computer networking concepts, as they're crucial for distributed systems. > > 9. Security in distributed systems: > - Add readings on security challenges and solutions specific to distributed systems. > > 10. Emerging topics: > - Consider adding material on blockchain technology and decentralized systems. > - Explore serverless computing and its impact on distributed system design. > > This enhanced path provides a more comprehensive and gradual approach to learning distributed systems, balancing theory with practical experience and covering both foundational and advanced topics. > > Citations: > \[1] https://cse.buffalo.edu/~demirbas/CSE586/book.pdf > \[2] https://learntla.com