Redundancy in Software Systems
What redundancy means in engineering, when to add spare capacity vs duplication, and how it improves reliability without wasting cost.
By Pawan Bisht
Redundancy is having more than one way to perform a critical function so that a single failure does not take the whole system down. Search engines love clear definitions — this article explains redundancy for builders, not buzzwords.
Why redundancy matters
- Hardware fails silently (disks, NICs, power).
- Deployments introduce bugs — rolling back needs healthy instances.
- Traffic spikes need headroom, not perfect sizing.
- 99.9% Uptime target
- ~43m Allowed downtime / mo
- 1 node N+1 spare
- 2+ Regions (geo)
Common redundancy patterns
Active / active
All nodes serve traffic. Load balancers spread work. Fast failover but needs careful data consistency.
Active / passive
Standby waits until health checks fail. Cheaper, but failover time depends on detection + promotion.
N+1 capacity
Run N nodes worth of load on N+1 machines. One failure still leaves enough capacity for peak.
Without redundancy
- Single AZ
- One DB primary
- Blast radius = entire app
With redundancy
- Multi-AZ replicas
- Read replicas + failover
- Isolated failure domains
| Pattern | Cost | Failover speed |
|---|---|---|
| Multi-instance behind LB | Medium | Seconds |
| Hot standby DB | High | Minutes |
| Cross-region active-active | Very high | Sub-second (with tradeoffs) |
Minimal health-check loop
const backends = ['10.0.0.1', '10.0.0.2', '10.0.0.3'];
const healthy = new Set(backends);
async function ping(host) {
try {
const res = await fetch(`http://${host}/health`, { signal: AbortSignal.timeout(800) });
return res.ok;
} catch {
return false;
}
}
setInterval(async () => {
for (const host of backends) {
(await ping(host) ? healthy.add(host) : healthy.delete(host));
}
}, 5000);
export function pickBackend() {
const pool = backends.filter((h) => healthy.has(h));
if (!pool.length) throw new Error('no redundant path left');
return pool[Math.floor(Math.random() * pool.length)];
}
Everything fails all the time.
- RTO
- Recovery Time Objective — how long you can be down.
- RPO
- Recovery Point Objective — how much data loss is acceptable.
- Blast radius
- How much of the system one failure can affect.
- Health checks on every redundant tier
- Automated failover tested quarterly
- Runbooks for manual promotion
Is redundancy the same as backup?
Backups recover past data; redundancy keeps live service available during failure. You usually want both.
When is redundancy overkill?
For low-criticality internal tools with tolerant users, a single region and good backups may be enough.
What do you redundant first in a greenfield API?
- Stateless app instances
- Database replicas
- Cache layer
- Second region
- Instance fails LB stops routing; clients retry.
- Auto-scale replaces node Capacity restored if pool was N+1.
- Postmortem Verify monitoring caught the failure.
Google SRE Book — Chapter on HA Classic reference on reliability patterns.
#redundancy, #ha, #sre, #fault-tolerance
Share what you studied
Add your own engineering topic as JSON — copy article.template.json, use the block types from BLOG_CONTENT.md, and open a PR.