Reliability, Fault Tolerance, 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