CS PAPERS DEEP-READ · PAPER 56

Harvest, Yield, and Scalable Tolerant Systems

Fox & Brewer · UC Berkeley · HotOS-VII 1999

中文 →

What did this paper say?

In 1999, two Berkeley researchers, Fox and Brewer (Brewer would state the famous CAP theorem a year later), asked a question that still bites today. When a big website runs on thousands of machines and a few of them die, we habitually think it's either "up" or "down" — black and white. But real large services are never like that. Their claim: don't treat "available" as a switch — treat it as a dial you can turn.

First, an everyday scene

During a big sale you're trying to check out. The page is slow, or search returns only some of the results, or one small feature won't respond — yet the whole site doesn't crash, and you still buy your thing. That's not luck; it's "graceful degradation," by design. This paper is one of the first to turn "how to break down a little, gracefully" into a method.

What's new here?

People used to have only two black-and-white words: a system is "consistent" or not, "available" or not. This paper splits "available" into two things you can actually score:

A search that returns a few fewer results is "full yield, slightly discounted harvest." Split this way, "break down a little" suddenly offers two cheap ways to break.

How is it done?

The key insight: the amount of "data × requests" a machine can push per second has a physical ceiling. Lose a few machines and that total drops by a chunk. How you absorb the lost chunk is your choice — either put less data into each answer (lower harvest), or answer fewer requests but answer them fully (lower yield). Same failure, two very different experiences, decided by you in advance. One more move: break the system into non-interfering pieces, and pen the "must be exactly right" data into the smallest possible corner, so most of it can be "good enough for now, reconcile later" — and a failure only hits one small piece.

What did it lead to?

A year later Brewer distilled the trade-off here into CAP: consistency, availability, partition tolerance — you can't have all three. Nearly every large service's "degrade," "rate-limit to protect the core," "eventual consistency," and "success-rate SLO" traces its thinking to this. One honest cost: "half an answer is fine" only works for soft use cases like search and recommendation; when you check a bank balance, an incomplete or stale answer is simply wrong — better to answer nothing.

Remember one thing

Don't treat "available" as a switch. Split it into two dials — "how many got answered" (yield) and "how complete each answer is" (harvest) — so when failure comes, you choose how to break gracefully instead of toppling over whole.

Want the DQ principle, the replication-vs-partitioning diagram, and how CAP came out of this? → switch to the deep read