§ 78
Static Stability
A system that has to take new action to survive a failure depends on that action succeeding at the moment things are going wrong.
Keep in mind
Don't make recovery depend on acting during the failure
What to do
List what your service must do to recover from losing a zone or a dependency. For every step that calls a control plane or launches something, decide whether to have it in place beforehand instead: spare capacity in every zone, the last good configuration cached locally, serving that continues while the control plane is down. Reserve this for paths whose failure you cannot afford; elsewhere, scale on demand.
Why it happens
Recovering from a failure usually means doing something the system does not do in normal operation: launching replacement instances, calling a control plane, changing routes. Control planes have more moving parts than data planes and so are more likely to be impaired, which means recovery leans on the weaker half of the system at the moment it is needed most. A statically stable design keeps working when a dependency is impaired, because the capacity and state it needs are already in place. Amazon runs its stateless services across three Availability Zones overprovisioned by 50 percent, so losing one leaves the other two able to carry the load without launching anything.
In practice
On December 7, 2021, an internal network problem in AWS's us-east-1 region impaired the EC2 APIs that launch and describe instances for hours, and new launches did not fully recover until 2:40 PM PST. AWS's summary noted that "running EC2 instances were unaffected by this event": workloads already running kept serving because the data plane did not need the impaired control plane, while anything that depended on launching new capacity to recover was stuck.
Read the accountWhen it stops applying
Cost of Idle Capacity: capacity held for a failure that rarely happens is paid for every day, and scaling to demand is cheaper wherever a slow recovery is acceptable; the source itself concedes that building services zone by zone rather than regionally adds complexity.
Source
Becky Weiss & Mike Furr, Static stability using Availability Zones (Amazon Builders' Library, 2019) — "In a statically stable design, the overall system keeps working even when a dependency becomes impaired", with EC2's control-plane/data-plane split and the 50 percent overprovisioning across three zones.
Read the sourceCite this
Hammurabi, § 78, “Static Stability.” https://kanywst.github.io/hammurabi/laws/static-stability/
BibTeX
@misc{hammurabi-static-stability,
title = {Static Stability},
author = {{Hammurabi contributors}},
note = {Hammurabi, § 78},
url = {https://kanywst.github.io/hammurabi/laws/static-stability/}
}Related laws
- 79Avoid FallbackA fallback path runs only after something has already failed, so the least-tested code in the system runs under the worst conditions.
- 80Constant WorkA system whose work grows with the number of changes or failures does the most work exactly when it has the least headroom.
- 47Fallacies of Distributed ComputingNetworked code quietly assumes eight things about the network that are false in production.