</> MAANG.io
system design · 301

Advanced

Master system design interviews with scalable architecture patterns, distributed systems, and real-world design challenges.

0/480 solved 0% complete

Section 7: One Row Against the World - Deep Dive: The Hot Row — Write Contention & Sharded Counters

Executive Summary: This section is the module's load-bearing wall. We derive the physics of why a single counter row saturates at a few thousand increments per second while the rest of the system idles, then put the two canonical cures side by side: sharded counters, taught honestly as the classic answer, and buffered aggregation, the path this design chooses and why it is safe. The Kafka question gets faced head-on rather than dodged. Every dive lands as mechanism, number, trade-off.

The interviewer's finger is still on the counter row from Section 6: "@astra posts. Walk me through this row's next ten minutes." You know those ten minutes from the workload analysis: a peak of ~50K likes/s on one post, roughly 30M likes before the storm passes. And you know the uncomfortable comparison — 50K/s on one row exceeds the ~35K/s peak write rate of the entire platform. Priya's double-tap on the subway is one drop in a firehose aimed at a single storage location. This is not a capacity problem; more machines cannot help, because every one of those writes is contractually obligated to touch the same bytes. It is a contention problem, and contention has physics.

The Physics: Anatomy of a Lock Convoy

Walk through what the baseline transaction from Section 6 — conditional ledger insert plus counter increment, one transaction — actually does when the row is hot. Each increment must read the current count, write the new one, and commit durably. To stay correct, the storage engine takes a lock (or an equivalent serialization point) on the counter row, and here is the detail candidates miss: the lock is held through the commit fsync. The transaction cannot release the row until its change is durable, and durability costs ~0.5–1ms of synchronous disk time. One row, one lock, ~1ms per holder: the row serializes at roughly 1–2K increments/s; group commit stretches the ceiling to perhaps ~1–5K/s. In a Dynamo-class store the same ceiling surfaces as per-item and per-partition write throttling and hot-partition backpressure rather than a visible lock queue — the physics of a single serialization point are identical. Our storm is 50K/s — 10–50× over the ceiling.

Being 10× over a lock's capacity does not mean "10× slower." It means the waiter queue grows without bound. Lock-wait times climb past client timeouts; clients retry; retries add load to a row already drowning in load; p99 latency on every operation sharing that partition degrades. The queue of blocked transactions is the lock convoy, and left alone it converts one popular post into a datastore incident.

Lock convoy anatomy: 50K likes/s on one post funnel into a single counter row lock held through each ~0.5-1ms fsync commit, capping throughput at ~1-5K increments/s, while the waiter queue grows 10-50x past the ceiling, lock waits exceed timeouts, blind client retries multiply the load, and one hot post becomes a partition-wide outage

Now the asymmetry that saves the whole design: the ledger inserts do not contend. Thirty million likes are thirty million distinct (post_id, user_id) rows — Priya's row, and 29,999,999 strangers' — spreading naturally across the partition. The source of truth absorbs the storm without noticing. The counter row — one derived integer — is the entire problem, which means we fix one tiny thing, not re-architect the write path.

Key Insight: Diagnose contention at the granularity of the row, not the system. The platform's global write peak is ~35K/s and healthy; one post demanding 50K/s on one row is a local overload. Candidates who hear "50K/s" and reach for horizontal scaling are solving a problem this system does not have.

Quick check before moving on:

Sign in to continue reading

The rest of this lesson is available with a free account. Signing in with Google or Microsoft is free.

Sign in to read the full lesson

Sign in to MAANG.io

Use your Google or Microsoft account — no password to remember.

Continue with Google Continue with Microsoft

Please accept the terms above to continue.