Deciding a server is dead
How production systems decide a peer is dead (health checks, probes, gossip failure detectors), and why the verdict-and-action loop keeps causing the outage it exists to prevent.
Reconstructs the failure-detection plane behind health checks from six published incidents, five production codebases, four papers and the Kubernetes and gRPC design records. Shows that mature systems independently converged on one guardrail, a cap on what the detector may do before its verdicts are trusted, and gives the reader the decision table, defaults and failure classes to apply that rule to their own fleet.
At least five teams independently invented the same guardrail under five names (self-preservation, panic threshold, panic mode, fail open, velocity control), and the most widely deployed health checker, the kubelet, still has none; the 2018 issue proposing one is frozen.
What you get out of it
- Cap what the failure detector may do before you trust what it says: Envoy ejects at most 10% and ignores health below 50% availability, Eureka stops expiries below 85% renewals, AWS is adding NLB velocity control after October 2025.
- Correlated false positives, not missed deaths, dominate the published incident record; no postmortem in this corpus blames an undetected dead server.
- A check whose failure gates a kill must never touch dependencies: the deep-check cascade (Encore, k8s issue #66230, Breck) removes the whole fleet in one probe window.
- A correct verdict can still be the outage when the action is irreversible: GitHub's 43-second partition triggered an automated failover that took 24 hours to unwind.
- The detector should suspect itself: Lifeguard's self-health scoring cut false dead verdicts by more than 50x, and the AWS October 2025 flapping was a degraded checker, not degraded targets.
Scope
Why this, now. AWS's October 2025 us-east-1 postmortem made the pattern current again: its NLB remediation adds in 2025 the same removal budget Envoy has shipped as a default for years and Eureka has carried since 2012.
What it does not cover. Human-facing monitoring and alerting, consensus-protocol correctness, and client-side reaction to failure (retries, backoff, metastable overload), which has its own dig in this collection.
Other field guides
Evacuating the region: who can actually leave, and what it costs
Reconstructs regional evacuation from GitLab's public DR blueprints, runbooks and gameday timing ledger, Meta's Maelstrom and Taiji papers, Netflix's…
26 sources · 15 organisations · 6 postmortemsComing back from cold: the restart is a harder load case than the crash
Reconstructs, from the Kubernetes project's own design records, the fixes HashiCorp shipped after October 2021, the Chubby and Physalia papers, Netfl…
20 sources · 10 organisations · 4 postmortemsThe way back is also a deploy
Reconstructs rollback as it actually works in production: a forward deploy of an old artifact, underwritten by a compatibility contract fixed weeks b…
28 sources · 25 organisations · 6 postmortems