GO TO A SECTION

↑ ↓ to navigate · Enter to openExplore all sections →
FDEInterviews logo
Communications of the ACM

The Tail at Scale

When a request waits on many servers, rare slow responses become the common case. Google's ways to live with latency variability: hedged and tied requests, micro-partitions, good-enough answers.

Breakdown by FDE Interviews · 11 min read · Updated

About the original · 2013
AUTHORS
Dean, Barroso
FROM
Google
PUBLISHED
Feb 2013 · Communications of the ACM
CITED BY
2,164Semantic Scholar · Oct 2026
IN THIS BREAKDOWN · 10 SECTIONS

You can read 21% of this breakdown.

01

The paper in one minute

Users feel a system is fluid when it responds within about 100 ms. Google's services answer interactively while consulting datasets spread across thousands of servers. Jeffrey Dean and Luiz André Barroso explain why keeping the slowest responses fast, the tail of the latency distribution, gets harder as systems grow, and what Google does about it.

Variability has many sources: machines shared among applications, background daemons, global resources such as network switches, maintenance work such as log compaction and garbage collection, multiple layers of queueing, CPUs throttling to stay within power limits, solid-state drives pausing for their own garbage collection (which can raise read latency a hundredfold), and power-saving modes.

Scale amplifies it. A request that fans out to many servers and must wait for all of them is as slow as the slowest. If each server answers in 10 ms but takes a second 1% of the time, a request touching one server is slow 1% of the time; touching 100 servers, 63% of the time. Even with one slow response in 10,000, a request touching 2,000 servers is slow almost one time in five.

Eliminating every source of variability is impractical, so the authors argue for tail-tolerant techniques, by analogy with fault tolerance. Hedged requests send a second copy to another replica if the first has not answered after a short delay, and use whichever answers first. Tied requests enqueue copies on two servers that cancel each other when one starts. Across requests, micro-partitions, selective replication of hot items and latency-induced probation of slow machines rebalance load. In search, good-enough results skip the slowest servers and canary requests try a query on one or two servers before sending it to thousands.

THE IDEA, VISUALLY
P(REQUEST TAKES > 1 S) AS FAN-OUT GROWS 0% 25% 50% 75% 100% 1 500 1,000 1,500 2,000 servers the request waits for 1 in 100 per server 1 in 1,000 1 in 10,000 63% 18% A REAL GOOGLE FAN-OUT (TABLE 1) p50 p95 p99 one random leaf 1ms 5ms 10ms 95% of leaves 12ms 32ms 70ms all leaves 40ms 87ms 140ms The slowest 5% of leaves cost half of the 99th-percentile time. WITHIN A REQUEST (TENS OF MS) Hedged requests second copy after the p95 delay: BigTable p99.9 1,800 ms → 74 ms for 2% more requests Tied requests queue on two servers that cancel each other: reads p99.9 98 → 61 ms (−38%), disk overhead under 1% ACROSS REQUESTS (SECONDS TO MINUTES) Micro-partitions about 20 per machine: shed load in 5% steps Selective replication extra copies of hot items Latency-induced probation drop a slow machine, keep probing it LARGE SEARCH SYSTEMS Good enough: answer once most leaves respond; any one leaf holds the best result in under 1 in 1,000 queries. Canary requests: try one or two leaves before thousands, so a query that crashes servers crashes only a couple. Hedging fails when replicas are slow for the same reason.
A request that waits for every server is slow whenever any one is, so a one-in-a-hundred hiccup per server slows most requests once they touch a hundred servers. The paper's answer is to tolerate variability rather than eliminate it: duplicate requests after a short delay, move small partitions, and accept good-enough results.
Research notes: the problem, approach and results
63%

of requests that wait on 100 servers exceed one second when each server is slow 1% of the time

1,800 → 74 ms

99.9th-percentile time to read 1,000 BigTable values across 100 servers, with hedged requests after 10 ms

2%

extra requests sent to get that reduction

THE PROBLEM

Interactive services fan a request out to hundreds or thousands of servers and must answer within tens of milliseconds. Each server has occasional slow responses from shared resources, background work, garbage collection, power management and queueing. At scale, these rare events dominate the user's experience, and they cannot all be eliminated.

THE IDEA

Build tail-tolerant systems, as fault-tolerant systems are built from unreliable parts: reduce variability where practical, then mask the rest. Within a request, send backup copies (hedged requests) or cross-cancelling copies (tied requests). Across requests, use micro-partitions, selective replication and probation for slow machines. In search, return good-enough results and test queries on canary servers first.

THE RESULT

With 1% slow responses per server, 63% of requests touching 100 servers are slow. Hedging after 10 ms cut a BigTable benchmark's 99.9th-percentile latency from 1,800 ms to 74 ms with 2% more requests; tied requests cut 99.9th-percentile reads by 38% with under 1% extra disk load.

02

Why it matters to an FDE

LLM systems are fan-out systems. A RAG answer waits on retrieval from several indexes, a reranker and a model; an agent step waits on several tool calls; a batch of model requests waits for the slowest one. The paper's arithmetic applies.

Measure percentiles, not averages. A system that is fast on average can be slow for most users once a request touches several services. Report p50, p95 and p99 per step and per request.

Each added dependency raises the tail. Ten parallel calls, each slow 1% of the time, make about one request in ten slow. Count dependencies before promising a latency target.

Hedge reads, not writes. Duplicating a retrieval or a cache lookup after its 95th-percentile time costs about 5% more calls. Duplicating model generations costs real money, and duplicating actions with side effects needs idempotency first.

Good enough often is. If one of five retrieval sources is slow, answering from four is usually better than making the user wait. Decide in advance which components are optional.

THE FULL BREAKDOWN

Understand the mechanism. Try it on a real problem.

Unlock this breakdown and 99 more papers.

Premium opens every paper in full, plus every answer, concept, course and guide on the site. One payment for six months of access.

6 months · One payment · No auto-renewal

Get Premium · ₹2,000 / $25
  • ◇1 architecture diagram
  • </>1 runnable code experiment
  • ▦1 results table
  • ?5 interview questions with answers
  1. 03Key takeaways

    Sources of variability, the fan-out arithmetic, each technique with its numbers, and misreadings

    Free account
  2. 04How it works

    Hedged and tied requests, cross-request adaptations, search-specific techniques, and mutations

    Premium
  3. 05The numbers that matter

    The fan-out curve, the Google measurements, and the cost of each technique

    Premium
  4. 06Try it yourself

    Reproduce the fan-out curve, then simulate hedging, good-enough answers and correlated slowness

    Premium
  5. 07Where it breaks

    Correlated slowness, extra load, side effects, Google-specific evidence and small slips

    Premium
  6. 08Using it on a deployment

    Applying tail-tolerant techniques to a RAG pipeline or agent

    Premium
  7. 09Interview angles

    Five questions this paper prepares you for, with answer hints

    Premium
Back to the paper library →