What is the relationship between reliability, fault tolerance, and redundancy?
Reliability, fault tolerance, and redundancy are related but distinct concepts that together form the foundation of resilient system design. Conflating them leads to over-engineering in some areas and blind spots in others.
**Reliability** is the probability that a system performs its intended function correctly over a specified period under specified conditions. It is typically expressed as availability (e.g., 99.9% uptime = 8.7 hours downtime/year). Reliability is the outcome you're optimizing for.
**Fault tolerance** is the system's ability to continue operating correctly in the presence of one or more component failures. A fault-tolerant system degrades gracefully rather than failing catastrophically. Fault tolerance is a design property—it is achieved through specific techniques.
**Redundancy** is the duplication of critical components so that if one fails, another takes over. Redundancy is the primary mechanism for achieving fault tolerance. Types include: - **Active-active redundancy**: All redundant components handle traffic simultaneously. Capacity scales with node count; failover is instant. Requires all nodes to stay in sync. - **Active-passive (standby)**: One primary handles traffic; standby waits. Simpler state management, but failover takes time and the standby is wasted capacity until needed. - **N+M redundancy**: N components required to operate, M extra for failures. RAID 5 (N+1 parity), RAID 6 (N+2).
**The relationship**: Redundancy enables fault tolerance; fault tolerance is what makes the system reliable under adverse conditions. A system can have redundancy without being fault-tolerant (if failover is not automated) or be fault-tolerant in ways that don't require redundancy (graceful degradation—serving cached data when a dependency is down).
**Beyond redundancy—fault tolerance techniques**: - **Circuit breakers**: Prevent cascading failures by stopping calls to a failing dependency and returning a fallback response. - **Bulkheads**: Isolate failures to a subsystem—a slow database query pool does not exhaust thread pools for other services. - **Graceful degradation**: Serve reduced functionality rather than total failure (show cached product data when the inventory service is down). - **Retry with backoff and jitter**: Tolerate transient faults without overwhelming a recovering service.
Reliability targets (SLOs) drive the engineering trade-off: moving from 99.9% to 99.99% requires eliminating single points of failure and automating failover, which significantly increases infrastructure cost and operational complexity.
Correctly defines all three terms, explains the relationship (redundancy → fault tolerance → reliability), and gives two concrete fault tolerance techniques.
Covers definitions, relationship, active-active vs. active-passive redundancy, circuit breakers, bulkheads, graceful degradation, and the cost/complexity trade-off of increasing SLO targets.
Reading the answer is step one. Explaining it unprompted — under interview pressure — is what actually matters. Get AI-graded feedback on your answer with follow-up probes on your weak points.
Get Graded — Free Assessment