What Is a Single Point of Failure?
A single point of failure (SPOF) is any component whose failure alone brings down your service. The tricky part: SPOFs aren't always obvious. A redundant app tier means nothing if everything still routes through one database or one DNS provider.
This post walks through the most common SPOF locations in a web stack and the concrete steps to remove them.
Layer-by-Layer: Where SPOFs Hide
DNS
DNS is the first thing users hit and one of the most overlooked failure points. Using a single DNS provider means a provider outage takes your domain offline regardless of how robust your infrastructure is behind it.
Fix: Use at least two authoritative DNS providers (also called secondary DNS or DNS failover). Most managed DNS services support zone transfers or API-based synchronization. Cloudflare, NS1, and Route 53 can all serve the same zone simultaneously.
Load Balancers
A single load balancer is a SPOF. If you're running one NGINX or HAProxy instance in front of your app servers, losing that instance means a full outage.
Fix:
- Run load balancers in an active-active or active-passive pair.
- Use a floating IP (like AWS Elastic IP, or
keepalivedwith VRRP on bare metal) so failover happens without a DNS change. - On managed platforms, use the provider's built-in load balancer service, which handles redundancy internally.
Application Servers
Any stateless app tier should already be horizontally scalable, but watch out for:
- Session state stored locally on one instance (pin sessions to one server = SPOF)
- Cron jobs or background workers running on a single app server
Fix: Externalize session state to Redis or a database. Use a distributed job scheduler (Sidekiq with Redis, Celery with a broker, etc.) and run multiple workers. Use leader election if exactly-once execution matters.
Databases
Databases are the hardest SPOF to eliminate because they hold mutable state.
Fix options by complexity:
- Read replicas β Offload read traffic; replicas can be promoted if the primary fails (manual or automatic).
- Managed HA clusters β Amazon RDS Multi-AZ, Google Cloud SQL with HA, PlanetScale, Neon, etc. Automated failover, usually under 60 seconds.
- Multi-primary / active-active β MySQL Group Replication, CockroachDB, or Vitess for write scalability and tolerance. Significantly more operational complexity.
Pick the simplest option that meets your RTO and RPO requirements.
Caches
If your application cannot function when the cache is unavailable (i.e., cache misses crash the app instead of hitting the DB), your cache has become a SPOF.
Fix: Write cache access defensively. On a cache miss or cache error, fall back to the database. Run Redis in cluster or Sentinel mode for HA if uptime of the cache itself matters.
Third-Party Dependencies
Payment processors, email providers, auth services, and CDNs are external SPOFs. You can't make them redundant in the traditional sense, but you can reduce blast radius:
- Implement timeouts and circuit breakers (Hystrix-pattern or a library like
resilience4j,pybreaker, or Go'ssony/gobreaker). - Queue writes to external services rather than making synchronous calls in the request path where possible.
- Have a documented fallback: what does your app do if Stripe is down? If SendGrid is down?
The Monitoring Piece
Redundancy only helps if you know when a component has actually failed. A few things worth doing:
- Monitor each layer independently, not just the public URL.
- Use multi-region monitoring to distinguish "our service is down" from "one network path is degraded." A probe from a single location can give false positives or miss regional outages. Tools like Pingy run checks from multiple locations so you can tell whether a failure is local or global.
- Set alert thresholds that page on sustained failures, not single-packet blips, to cut down on noise.
SPOF Audit Checklist
Run through this when reviewing a new or existing stack:
- Two or more authoritative DNS providers
- Load balancers in HA configuration with a floating IP or managed LB
- App servers are stateless; sessions and jobs externalized
- Database has automated failover (replica promotion or managed HA)
- Cache failures are handled gracefully without crashing the app
- Circuit breakers around all third-party API calls
- Monitoring runs from multiple regions and alerts on each critical layer
- Runbooks exist for each potential failure scenario
Key Takeaways
- Redundancy must be end-to-end. One unprotected layer can make all other redundancy irrelevant.
- Databases need the most attention. Stateless tiers are easy; mutable state requires deliberate HA design.
- Graceful degradation beats hard dependency. Design for the failure of every external service.
- Monitoring is part of the HA story. You need to know a failover happened and whether it worked.
- Audit regularly. New dependencies and infrastructure changes introduce new SPOFs over time.