|
1 | 1 | # System Design |
2 | 2 |
|
3 | | -## Resources |
| 3 | +## Books |
4 | 4 |
|
5 | | -* [Designing Data-Intensive Applications](https://amzn.to/2lKJMvU) (2017) by Martin Kleppmann (Book) |
6 | | -* [Domain-Driven Design: Tackling Complexity in the Heart of Software](https://amzn.to/2VTvGYS) (2003) by Eric Evans (Book) |
7 | | -* [Functional and Reactive Domain Modeling](https://www.manning.com/books/functional-and-reactive-domain-modeling) (2016) by Debasish Ghosh (Book) |
8 | | -* [Versioning in an Event Sourced System](https://leanpub.com/esversioning/read) (Book) |
9 | | -* [Exploring CQRS and Event Sourcing](https://docs.microsoft.com/en-us/previous-versions/msp-n-p/jj554200(v%3dpandp.10)) (Book) |
| 5 | +* [Designing Data-Intensive Applications](https://amzn.to/2lKJMvU) (2017) by Martin Kleppmann |
| 6 | +* [Domain-Driven Design: Tackling Complexity in the Heart of Software](https://amzn.to/2VTvGYS) (2003) by Eric Evans |
| 7 | +* [Functional and Reactive Domain Modeling](https://www.manning.com/books/functional-and-reactive-domain-modeling) (2016) by Debasish Ghosh |
| 8 | +* [Versioning in an Event Sourced System](https://leanpub.com/esversioning/read) |
| 9 | +* [Exploring CQRS and Event Sourcing](https://docs.microsoft.com/en-us/previous-versions/msp-n-p/jj554200(v%3dpandp.10)) |
10 | 10 | * [Database Internals - A Deep Dive into How Distributed Data Systems Work](https://www.databass.dev) |
| 11 | +* [The Architecture of Open Source Applications](http://aosabook.org/en/index.html) (free) |
| 12 | + |
| 13 | +## Resources |
| 14 | + |
| 15 | +* [6.824 Distributed Systems MIT](https://www.youtube.com/playlist?list=PLrw6a1wE39_tb2fErI4-WkMbsvGQk9_UB) (course) |
| 16 | +* [Distributed Systems lecture series](https://www.youtube.com/playlist?list=PLeKd45zvjcDFUEv_ohr_HdUFe97RItdiB) by Martin Kleppmann (course) |
| 17 | +* [Software Architecture Monday](https://www.youtube.com/playlist?list=PLdsOZAx8I5umhnn5LLTNJbFgwA3xbycar) (videos) |
11 | 18 | * [CQRS](https://www.martinfowler.com/bliki/CQRS.html) by Martin Fowler |
12 | 19 | * [Clarified CQRS](http://udidahan.com/2009/12/09/clarified-cqrs) |
13 | 20 | * [1 Year of Event Sourcing and CQRS](https://hackernoon.com/1-year-of-event-sourcing-and-cqrs-fb9033ccd1c6) |
14 | 21 | * [Eventually Consistent - Revisited](https://www.allthingsdistributed.com/2008/12/eventually_consistent.html) |
| 22 | +* [How do CRDTs solve distributed data consistency challenges?](https://ably.com/blog/crdts-distributed-data-consistency-challenges) |
| 23 | +* [Are CRDTs suitable for shared editing?](https://blog.kevinjahns.de/are-crdts-suitable-for-shared-editing) |
15 | 24 | * [On Designing and Deploying Internet-Scale Services](https://www.usenix.org/legacy/events/lisa07/tech/full_papers/hamilton/hamilton_html) |
16 | 25 | * [There is No Now](https://queue.acm.org/detail.cfm?id=2745385) |
17 | 26 | * [Online Event Processing](https://queue.acm.org/detail.cfm?id=3321612) |
18 | 27 | * [The world beyond batch: Streaming 101](https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-101) |
19 | 28 | * [Questioning the Lambda Architecture](https://www.oreilly.com/ideas/questioning-the-lambda-architecture) |
20 | 29 | * [The Difference between SLI, SLO, and SLA](https://enqueuezero.com/the-difference-between-sli-slo-and-sla.html) |
21 | | -* [Jepsen](https://aphyr.com/tags/Jepsen) (Blog) |
22 | | -* [The Paper Trail](https://www.the-paper-trail.org) (Blog) |
23 | | -* [The Architecture of Open Source Applications](http://aosabook.org/en/index.html) |
24 | 30 | * [A review of consensus protocols](https://thomasvilhena.com/2020/10/a-review-of-consensus-protocols) |
25 | 31 | * [How you could have come up with Paxos yourself](https://explain.yshui.dev/distributed%20system/2020/09/20/paxos.html) |
26 | 32 | * [Implementing Raft's Leader Election in Rust](https://blog.laurocaetano.com/programming/2021/01/23/raft-leader-election-rust) |
27 | 33 | * [Consensus Protocol](https://www.consul.io/docs/architecture/consensus) |
28 | 34 | * [Implementing Raft for Browsers with Rust and WebRTC](https://eevans.co/blog/wraft) |
29 | | -* [How do CRDTs solve distributed data consistency challenges?](https://ably.com/blog/crdts-distributed-data-consistency-challenges) |
| 35 | +* [HTTP Feeds](https://www.http-feeds.org) |
| 36 | +* [Autopilot Pattern Applications](http://autopilotpattern.io) |
| 37 | + |
| 38 | +## Blogs |
30 | 39 |
|
31 | | -**CAP Theorem** |
| 40 | +* [Jepsen](https://aphyr.com/tags/Jepsen) |
| 41 | +* [The Paper Trail](https://www.the-paper-trail.org) |
| 42 | +* [High Scalability](http://highscalability.com) |
| 43 | +* [InfoQ: Architecture & Design Content](https://www.infoq.com/architecture-design/presentations) |
| 44 | + |
| 45 | +## CAP |
32 | 46 |
|
33 | 47 | * [Brewer's CAP Theorem](http://www.julianbrowne.com/article/brewers-cap-theorem) |
34 | 48 | * [CAP Twelve Years Later: How the "Rules" Have Changed](https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed) |
35 | 49 | * [Please stop calling databases CP or AP](https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html) |
36 | 50 | * [The CAP FAQ](https://www.the-paper-trail.org/page/cap-faq) |
37 | 51 | * [You Can't Sacrifice Partition Tolerance](https://codahale.com/you-cant-sacrifice-partition-tolerance) |
38 | 52 |
|
39 | | -**Papers** |
| 53 | +## Papers |
40 | 54 |
|
41 | | -* [Foundational distributed systems papers](https://muratbuffalo.blogspot.com/2021/02/foundational-distributed-systems-papers.html) |
42 | | -* [Distributed Systems Reading List](https://dancres.github.io/Pages) |
43 | | -* [Best Paper Awards in Computer Science](https://jeffhuang.com/best_paper_awards) |
44 | | -* [MIT 6.824 Distributed Systems (Spring 2020)](https://m.youtube.com/playlist?list=PLrw6a1wE39_tb2fErI4-WkMbsvGQk9_UB) (course) |
45 | | -* [Distributed Systems lecture series](https://www.youtube.com/playlist?list=PLeKd45zvjcDFUEv_ohr_HdUFe97RItdiB) (course) |
46 | | -* [Ask HN: Recommended books and papers on distributed systems?](https://news.ycombinator.com/item?id=25987664) |
| 55 | +* [Foundational distributed systems papers](https://muratbuffalo.blogspot.com/2021/02/foundational-distributed-systems-papers.html) (collection) |
| 56 | +* [Distributed Systems Reading List](https://dancres.github.io/Pages) (collection) |
| 57 | +* [Best Paper Awards in Computer Science](https://jeffhuang.com/best_paper_awards) (collection) |
| 58 | +* [Ask HN: Recommended books and papers on distributed systems?](https://news.ycombinator.com/item?id=25987664) (collection) |
47 | 59 | * [The Google File System](https://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) |
48 | 60 | * [MapReduce: Simplified Data Processing on Large Clusters](https://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) |
49 | 61 | * [Raft: In Search of an Understandable Consensus Algorithm](https://raft.github.io/raft.pdf) |
|
57 | 69 | * [Large-scale cluster management at Google with Borg](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43438.pdf) |
58 | 70 | * [Linearizability: A Correctness Condition for Concurrent Objects](https://cs.brown.edu/~mph/HerlihyW90/p463-herlihy.pdf) |
59 | 71 | * [Harvest, Yield, and Scalable Tolerant Systems](https://s3.amazonaws.com/systemsandpapers/papers/FOX_Brewer_99-Harvest_Yield_and_Scalable_Tolerant_Systems.pdf) |
60 | | -* [Life beyond Distributed Transactions](http://www-db.cs.wisc.edu/cidr/cidr2007/papers/cidr07p15.pdf) |
61 | | -* [The ϕ Accrual Failure Detector](https://web.archive.org/web/20170517022242/http://fubica.lsd.ufcg.edu.br/hp/cursos/cfsc/papers/hayashibara04theaccrual.pdf) |
| 72 | +* [Life beyond Distributed Transactions](https://web.archive.org/web/20210303104924/https://www-db.cs.wisc.edu/cidr/cidr2007/papers/cidr07p15.pdf) (webarchive) |
| 73 | +* [The ϕ Accrual Failure Detector](https://web.archive.org/web/20170517022242/http://fubica.lsd.ufcg.edu.br/hp/cursos/cfsc/papers/hayashibara04theaccrual.pdf) (webarchive) |
62 | 74 | * [Conflict-free Replicated Data Types](https://hal.inria.fr/inria-00609399v1/document) |
63 | | -* [FLP - Impossibility of Distributed Consensus with One Faulty Process](http://macs.citadel.edu/rudolphg/csci604/ImpossibilityofConsensus.pdf) |
| 75 | +* [FLP - Impossibility of Distributed Consensus with One Faulty Process](https://web.archive.org/web/20210211213256/http://macs.citadel.edu/rudolphg/csci604/ImpossibilityofConsensus.pdf) (webarchive) |
64 | 76 | * [SEDA: An Architecture for Well-Conditioned, Scalable Internet Services](http://nms.lcs.mit.edu/~kandula/projects/killbots/killbots_files/seda-sosp01.pdf) |
65 | 77 | * [Pregel: A System for Large-Scale Graph Processing](https://kowshik.github.io/JPregel/pregel_paper.pdf) |
66 | 78 | * [Hashed and Hierarchical Timing Wheels](http://www.cs.columbia.edu/~nahum/w6998/papers/sosp87-timing-wheels.pdf) |
67 | 79 | * [Merkle Hash Tree based Techniques for Data Integrity of Outsourced Data](http://ceur-ws.org/Vol-1366/paper13.pdf) |
68 | 80 | * [What Every Programmer Should Know About Memory](https://www.akkadia.org/drepper/cpumemory.pdf) |
69 | | -* [Fallacies of Distributed Computing Explained](http://www.rgoarchitects.com/Files/fallacies.pdf) |
| 81 | +* [Fallacies of Distributed Computing Explained](https://web.archive.org/web/20201108163119/http://www.rgoarchitects.com/Files/fallacies.pdf) (webarchive) |
70 | 82 | * [The Dataflow Model: A Practical Approach to Balancing Correctness, Latency, and Cost in Massive-Scale, Unbounded, Out-of-Order Data Processing](https://www.vldb.org/pvldb/vol8/p1792-Akidau.pdf) |
71 | 83 | * [A Dataset of Dockerfiles](https://arxiv.org/pdf/2003.12912.pdf) |
72 | 84 |
|
| 85 | +<br> |
| 86 | + |
73 | 87 | <!-- |
74 | 88 | ## Notes |
75 | 89 |
|
|
0 commit comments