Availability in Numbers
A customer asks Hop for a contract promising "99.9% uptime". It sounds like almost perfect. It actually allows nearly nine hours of downtime a year. Before you sign, you need to read the nines — and to work out what your design can really deliver.
The rule
In a chain, multiply; side by side, multiply the failures.
Availability is the fraction of time a service works. It is quoted in "nines":
| Availability | Downtime per year | Downtime per 30 days |
|---|---|---|
| 99% (two nines) | about 3.65 days | about 7.2 hours |
| 99.9% (three nines) | about 8.8 hours | about 43 minutes |
| 99.99% (four nines) | about 53 minutes | about 4.3 minutes |
Each extra nine cuts the allowed downtime by ten times — and usually costs much more.
In a chain (in sequence), a request needs every part. Multiply the availabilities. A server at 99.9% in front of a database at 99.9%:
0.999 × 0.999 ≈ 0.998, so 99.8%. The chain is worse than either part.
Side by side (in parallel), the service works if any part works. Multiply the failure chances, then subtract from 1. Two copies, each 99.9%:
1 − (0.001 × 0.001) = 1 − 0.000001 = 99.9999%. Redundancy is better than either part.
The shortcut
Draw the request's path. Collapse each group of parallel copies into one number first, then multiply along the chain.
Draw it
Load balancer (99.99%) → two servers (99% each, either can serve) → one database (99.9%).
The trap is adding parts in a chain to "improve" things. Every extra box a request must pass through lowers the total unless that box is itself redundant.
Drills
Answer fast — trust the rule.
Roughly how much downtime per year does 99.9% availability allow?
Two parts in a chain are each 99% available. What is the total?
Two redundant copies are each 99% available, and either can serve alone. What is the total?
Going from 99.9% to 99.99% changes the allowed downtime how?
Hop adds a new logging service that every redirect must call before answering. What happens to availability?
Remember
- In a chain, multiply; side by side, multiply the failures and subtract from 1.
- Shortcut: collapse parallel groups first, then multiply along the path.
- Trap: every extra box on the request path lowers availability unless it is redundant.
