Failure Domains and Reliability Calculations
Problem
You run two application servers so one can survive the other's failure. Both stop when their shared power supply fails. Later, both are healthy, but checkout still fails because the only payment dependency is unavailable.
Solution — Follow Shared Failures and Required Dependencies
A failure domain groups components that can fail together because of a shared cause. It might be a machine, power supply, network device, or deployment process. Two copies do not automatically mean independent failures.
Trace the complete user operation and identify everything it requires. In a simplified model, two required components with independent 99.9% availability give 0.999 × 0.999 = 99.8001% availability together. That calculation assumes matching measurement scopes and genuinely independent failures. Multiplying vendors' published SLAs does not establish your application's availability.
Separate replicas across the relevant failure domains, inspect shared dependencies, and test failover. The surviving system also needs enough capacity to carry the workload. A second server cannot help if the same faulty deployment breaks both.
Availability concerns whether the service can perform its required operation. Durability concerns whether stored data survives. A database can be temporarily unreachable while its data remains intact.
Core idea: reliability depends on which failures are shared, which dependencies are required, and whether recovery works under real load.