All laws

§ 78Distributed Systems

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.

Amazon Web Services

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 account

When 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 source

Mark: Public domain · Wikimedia Commons

Cite 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/}
}

Text under CC BY-SA 4.0: credit Hammurabi and link the article.

Related laws

Suggest a correction on GitHub