Skip to content
About
Main content

Failure detection: liveness is a relation, not an attribute

Why does a failure detector trade completeness against accuracy, and why is its verdict about a link?

A emits suspicion when no message arrives within T. Two properties are in tension:

  • Completeness: every dead node is eventually suspected.
  • Accuracy: no live node is suspected.

In an asynchronous network you can have completeness always, and accuracy only eventually. The is the dial between them.

The arithmetic is unforgiving. Detection latency ≥ T + one-way delay. The false-suspicion rate = P(response time > T), which is of a distribution that is fat, not Gaussian: a GC pause, a page-cache miss storm, a rebalance on the same machine. So every fixed T is either slow or wrong, and there is no value that is neither. This is why this article has more timeouts than any other and trusts none of them for .

Phi-accrual and its interface. Phi-accrual's real contribution is not accuracy but interface. It emits a continuous suspicion level rather than a boolean, so the caller sets its own threshold. The caller knows whether a false positive costs a spurious election or a spurious re-replication of ten terabytes. The decision migrates to the party holding the cost information.

A correction is worth making. Phi is computed by fitting a distribution (classically a normal distribution) to the inter-arrival times of . Fitting a light-tailed model to heavy-tailed data makes a late heartbeat look far more improbable than it is. So phi overshoots under exactly the load that produces legitimate lateness. The mechanism is sound; the default distribution is optimistic.

The structural point: all-to-all heartbeats do not scale. All-to-all heartbeating costs O(N²) messages and O(N) detection work per node. It is a fixed rate meeting growth. SWIM (a membership protocol) answers with randomized probing at O(1) per node per period plus indirect probes: when A cannot reach B, A asks k random peers to try. That separates "I cannot reach B" from "nobody can reach B", and this is the distinction that matters, because a detector's output is a property of the (observer, target) pair, not of the target.

Asymmetric links, gray failure (a node that is partly broken), a node that answers its health check and nothing else: in all of them the node is simultaneously alive and dead depending on who is asking. Indirect probing is a cheap approximation of about , and the cheapness is the point. Full agreement on liveness is exactly the expensive thing the rest of this article buys.

Detection needs a stopwatch, not a calendar. It uses durations from a monotonic clock, never differences of wall-clock readings. That is why clocks can wait: only two mechanisms in this article need anything more than a stopwatch.

Compression: a failure detector trades completeness against accuracy with a timeout, and