open atlas
↑ Back to track
System Design Foundations SD · 02 · 02

Redundancy & single points of failure

A single point of failure is any component whose death takes the whole system down. Redundancy removes it — N+1, N+2, active-active, active-passive — but only if the copies fail independently. Shared dependencies turn 'redundant' designs into one big blast radius.

SD Middle ◷ 18 min
Level
FoundationsJuniorMiddleSenior

An engineering team ran three application servers behind a load balancer and called the tier “redundant.” It was — for the app servers. Then one quiet Tuesday the whole site went dark for forty minutes. The cause wasn’t an app server; it was the single PostgreSQL primary all three of them talked to, which had rebooted for a kernel patch. The redundancy was real but it was in the wrong place: the team had triplicated the cheap, stateless layer and left the one component that actually mattered standing alone. Redundancy you don’t have where the single point of failure lives is decoration.

What a single point of failure actually is

A single point of failure (SPOF) is any component whose individual failure takes down the entire system. It’s the load-bearing wall: knock it out and everything above it falls. The discipline of building for availability is, at its core, the discipline of hunting down SPOFs and eliminating them — one at a time, because there is usually more than one and they hide.

The way you find them is a thought experiment you run over every box and line in your architecture diagram: “If this one thing dies right now, does the system keep serving?” The database in the hook failed that test — kill it and everything stops. So does the single load balancer in front of a “redundant” fleet, the one NAT gateway all egress traffic flows through, the single DNS provider, the one CI server that holds the only copy of your deploy keys, the lone on-call engineer who knows how the legacy billing job works. SPOFs aren’t only machines; they’re any singular dependency — including a person or a vendor.

Redundancy: N, N+1, N+2

You eliminate a SPOF with redundancy — running more than one of the thing so the system survives losing one. The standard vocabulary is borrowed from data-center power engineering:

  • N — exactly the capacity you need to serve peak load, no spare. If demand is 4 units and each box serves 1, you run 4. Lose any one and you’re now under capacity. N is not redundant.
  • N+1 — one spare beyond the need. Run 5 boxes for a 4-unit demand; lose one and the remaining 4 still carry peak. This is the baseline for “redundant,” and it tolerates exactly one failure at a time.
  • N+2 — two spares, so you survive a failure while another node is already down (e.g. one out for maintenance and a second dies). Higher availability tiers and anything with slow replacement times want N+2.

The subtlety juniors miss: redundancy must be sized against peak load, not average. “We have two servers, so we’re redundant” is false if a single server can’t carry peak alone — losing one then overloads the survivor, which tips into the queueing collapse from the scalability unit, and your “redundant” pair fails as a unit. True N+1 means each surviving subset can still meet the SLO.

Active-active vs active-passive

There are two ways to arrange redundant copies, and the choice trades cost against recovery speed:

  • Active-active — all copies serve traffic simultaneously, behind a load balancer. Lose one and the others absorb its share instantly (you sized for that with N+1). No “switchover” delay, and you’re continuously exercising every replica, so you know they all work. The cost: every copy must be sized and paid for at all times, and stateful active-active needs conflict resolution because two copies can take writes at once.
  • Active-passive — one copy serves; the standby sits idle (or warm) and takes over only when the active dies. Cheaper for stateful systems (one writer, no conflicts) and simpler to reason about, but failover takes time, and a standby that’s never exercised may be silently broken when you finally need it — the classic “the backup didn’t work” outage.

The trap: fake redundancy through a shared dependency

Here is the failure mode that turns confident “redundant” architectures into outages: two copies that look independent but share a hidden dependency are not redundant at all. If your two database replicas live on the same physical host, the same storage array, the same rack, the same power circuit, or the same availability zone, then a single event — that host, that array, that rack, that power feed, that AZ — takes both down together. You have paid for two of everything and still have a single point of failure, just a less obvious one.

This is correlated failure, and it is the central reason availability math based on independence (“each replica is 99.9%, so two give 99.9999%”) is optimistic to the point of dangerous. The multiplication only holds if the failures are independent. The moment they share a cause, your real availability is governed by that shared thing, not by the count of replicas. The whole point of cloud availability zones (AZs) is to give you placement domains engineered to fail independently — separate power, cooling, and networking, far enough apart that one flooding/fire/power event can’t take two — so that spreading replicas across AZs makes their failures genuinely uncorrelated.

Why this works

Why is correlated failure the silent killer rather than an obvious bug? Because everything works perfectly in normal operation and in most tests — both replicas are up, traffic flows, the dashboard is green. The shared dependency only reveals itself during the rare event that hits it (a rack PDU trips, an AZ loses power), at which point both copies vanish at the same instant and your failover has nowhere to go. You can’t observe correlation by watching healthy traffic; you find it by tracing the physical and logical dependency graph of each replica — host, rack, power, network, region, control plane, even the deploy pipeline — and asking what single event is upstream of more than one “independent” copy. Anything shared is a correlation, and a correlation is a SPOF wearing a disguise.

Blast radius: containing the failure you can’t prevent

You will never eliminate every failure, so the second discipline is bounding how much a single failure can take out — its blast radius. The design question shifts from “will this fail?” (it will) to “when it fails, how much goes with it?” Partitioning helps: shard users across cells so one cell’s failure affects 1/N of users instead of everyone; isolate tenants so a noisy or broken one can’t starve the rest; deploy region by region so a bad release can be caught before it’s global. A system with small blast radii degrades in slices; a system with one giant shared everything fails all at once. Reducing blast radius doesn’t raise the probability of staying up for any single user, but it dramatically lowers the severity of the failures that do happen — and severity is what shows up in the postmortem.

Common mistake

A common and expensive mistake: adding redundancy to the component that’s easy to duplicate while leaving the hard one alone — exactly the hook’s team triplicating stateless app servers behind a single load balancer talking to a single database. Stateless tiers are trivial to make redundant (just add nodes), so teams pour effort there and feel safe, while the stateful tier and the shared infrastructure — the database primary, the one load balancer, the single message broker, the lone DNS or NAT path — quietly remain SPOFs. Always locate redundancy at the SPOF, not where it’s convenient. Triplicating the cheap layer while the expensive layer stands alone buys you a green dashboard and a forty-minute outage.

Quiz

A service needs 4 servers to carry peak load and runs exactly 4 ('we have multiple servers, so we're redundant'). One server dies during peak. What actually happens?

Quiz

You run two database replicas for redundancy, but both are in the same availability zone. The AZ loses power. What does this reveal about the design?

Complete the analogy

Two replicas that share a hidden dependency — same host, rack, power feed, or availability zone — fail together when that dependency dies. This is called _______ failure, and it makes independence-based availability math dangerously optimistic.

Recall before you leave
  1. 01
    What is a single point of failure, and how do you find them?
  2. 02
    Explain N, N+1, N+2 and active-active vs active-passive.
  3. 03
    Why is 'fake redundancy' through a shared dependency dangerous, and how do AZs help?
Recap

A single point of failure is any component whose individual loss takes down the whole system, and you hunt them by asking of every box and line: “if this dies now, do we keep serving?” — they include not just servers but the lone load balancer, DNS provider, database primary, and even a sole on-call person. You remove a SPOF with redundancy, sized against peak not average: N is no spare (not redundant), N+1 survives one loss, N+2 survives a loss while another node is already down. Arrange the copies active-active (all serving, instant failover, but pay for every copy and resolve write conflicts) or active-passive (one serving, a standby waiting — cheaper and write-simple, but switchover takes time and an unexercised standby may be silently broken). The deadly trap is fake redundancy: copies that share a hidden dependency — same host, rack, power, or availability zone — fail together as correlated failure, which makes independence-based availability math wildly optimistic. Availability zones exist precisely to give failure domains engineered to fail independently, so spread replicas across them. And because you can’t prevent every failure, bound the ones that get through by shrinking blast radius — partition users, isolate tenants, deploy region by region — so the system degrades in slices instead of going dark all at once, like the hook’s team that triplicated the cheap layer and left the one database standing alone. Now when you sketch an architecture diagram, ask of every box: “if this dies right now, do we keep serving?” — and then ask whether the replicas you’re counting on share a host, a rack, or an availability zone.

Practice

Start at the top. Tasks go easiest → hardest: recall a fact, apply it to a case, then a senior-level stretch. Open one, attempt it, then reveal.

recallapplystretch0 of 7 done
Connected lessons

Something unclear?

Ask a question about this lesson. Questions are anonymous and go straight to the author to make the lesson better.

shortcuts expand
search
K
prev piece
k
next piece
j
cycle tier
t
this menu
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.