Skip to main content

5 docs tagged with "system-design"

View all tags

Availability and redundancy — designing for failure

This chapter covers how to find single points of failure and multiply out availability. Dependencies in series drag availability down; parallel redundancy pulls it up. It covers standby patterns, failover time, degraded operation, and designs that don't turn performance problems into availability problems.

Capacity estimation — design starts from the numbers

This chapter derives requests per second and data volume from user count. It covers how to place peak multipliers, how the read/write ratio affects the setup, thinking in orders of magnitude, and the conditions under which "one machine is enough" holds.

Data distribution — what breaks after you spread it out

This chapter covers what replication and sharding gain and break. It explains the difference between sync and async, why you can't read what you just wrote, skew in partition keys, when eventual consistency shows up, and reading CAP as "what to give up during a partition".

Scaling directions — deciding how to grow

This chapter covers vertical and horizontal — the two directions — and the steps to externalize state so horizontal is possible. It covers what load balancers distribute by and health checks, offloading reads to caches and writes to queues, and the order in which bottlenecks move.