System Design Thinking · in progress

System Design Thinking

Notes on breaking architecture problems into parts and choosing solutions for scale, reliability, latency, and cost.

73 of 73 chapters completed100%
Section 01

Theory

73 chapters
01

Introduction to system design

6 min read

Completed
02

System requirements

7 min read

Completed
03

Functional requirements

5 min read

Completed
04

High availability

9 min read

Completed
05

Fault tolerance, resilience, and reliability

7 min read

Completed
06

Scalability

5 min read

Completed
07

Performance

8 min read

Completed
08

Durability

7 min read

Completed
09

Consistency

8 min read

Completed
10

Maintainability, security, cost

8 min read

Completed
11

Summary of system requirements

2 min read

Completed
12

Regions, availability zones, data centers, servers

8 min read

Completed
13

Physical servers, virtual machines, containers, serverless

5 min read

Completed
14

Synchronous vs asynchronous communication

3 min read

Completed
15

Asynchronous messaging patterns

4 min read

Completed
16

Network protocols

6 min read

Completed
17

Blocking vs non-blocking IO

9 min read

Completed
18

Data encoding formats

6 min read

Completed
19

Message acknoledgement

3 min read

Completed
20

Deduplication cache

7 min read

Completed
21

Metadata cache

7 min read

Completed
22

Queue

3 min read

Completed
23

Full and empty queue problems

7 min read

Completed
24

Start with something simple

2 min read

Completed
25

Blocking queue and producer-consumer pattern

5 min read

Completed
26

Thread pool

5 min read

Completed
27

Big compute architecture

3 min read

Completed
28

Log

5 min read

Completed
29

Index

6 min read

Completed
30

Time series data

2 min read

Completed
31

Simple key-value database

5 min read

Completed
32

B-tree index

6 min read

Completed
33

Embedded database

4 min read

Completed
34

RocksDB

6 min read

Completed
35

LSM-tree and B-tree

6 min read

Completed
36

Page cache

6 min read

Completed
37

Push vs pull

5 min read

Completed
38

Host discovery

8 min read

Completed
39

Service discovery

6 min read

Completed
40

Peer discovery

9 min read

Completed
41

How to choose a network protocol

6 min read

Completed
42

Network protocols in real-life systems

8 min read

Completed
43

Video over HTTP

7 min read

Completed
44

CDN

4 min read

Completed
45

Push and pull technologies

8 min read

Completed
46

Push and pull technologies in real-life systems

5 min read

Completed
47

Large-scale push architectures

8 min read

Completed
48

What else to know to build reliable, scalable, and fast systems

5 min read

Completed
49

Timeouts

3 min read

Completed
50

What to do with failed requests

5 min read

Completed
51

When to retry

6 min read

Completed
52

How to retry

4 min read

Completed
53

Message delivery guarantees

6 min read

Completed
54

Consumer offsets

6 min read

Completed
55

Batching

6 min read

Completed
56

Compression

4 min read

Completed
57

How to scale message consumption

6 min read

Completed
58

Partitioning in real-life systems

3 min read

Completed
59

Partitioning strategies

5 min read

Completed
60

Request routing

6 min read

Completed
61

Rebalancing partitions

7 min read

Completed
62

Consistent hashing

7 min read

Completed
63

System overload

2 min read

Completed
64

Autoscaling

4 min read

Completed
65

Autoscaling system design

5 min read

Completed
66

Load shedding

7 min read

Completed
67

Rate limiting

9 min read

Completed
68

Synchronous and asynchronous clients

7 min read

Completed
69

Circuit breaker

3 min read

Completed
70

Fail-fast design principle

6 min read

Completed
71

Bulkhead

5 min read

Completed
72

Shuffle sharding

6 min read

Completed
73

The end (but not quite

2 min read

Completed