Articles

Active-Active vs Active-Passive Architecture

Active-active runs every region live and load-balanced; active-passive keeps a standby idle until failover. How each affects cost, consistency, and recovery.

Chisato Chisato · · 4 min read
Server racks with networking cables

Active-active architecture runs multiple identical instances of a system — often in different regions — simultaneously serving live traffic, while active-passive keeps one instance serving traffic and one or more standbys idle, ready to take over only if the active instance fails. Both exist to survive the failure of a single region or data center; they differ in whether the backup capacity is doing useful work while it waits.

The choice shapes everything downstream: how much you pay for idle capacity, how hard data consistency is, and how long users notice an outage.

How active-passive works

In an active-passive setup, one deployment — call it the primary — handles all reads and writes. A secondary deployment stays provisioned and kept in sync (via database replication, continuous backups, or standby VMs), but sends zero live traffic. If the primary fails, a health check or operator triggers a failover: DNS or a load balancer redirects traffic to the secondary, which is promoted to primary.

The gap between the primary failing and the secondary taking over is real downtime, however brief — this is the tradeoff active-passive makes explicitly. Recovery time depends on how fast failure is detected and how fast the standby can be promoted, which is exactly what a well-defined SLA, SLO, and SLI framework is meant to bound and measure.

How active-active works

In active-active, every region runs a live copy of the system, and a load balancer or global traffic manager distributes real requests across all of them continuously — not just during a failure. If one region goes down, the others simply absorb its share of traffic; there’s no promotion step, because every remaining node was already serving live requests before the failure.

This is also a form of horizontal scaling: active-active regions add both capacity and redundancy at once, since the standby capacity in active-passive contributes nothing to throughput until it’s needed.

The comparison

Active-passiveActive-active
Standby capacityIdle until failoverAlways serving live traffic
Cost efficiencyLower — pays for unused capacityHigher — every node earns its keep
Failover timeSeconds to minutes (detection + promotion)Near-zero — no promotion step
Data consistencySimpler — one writer at a timeHarder — concurrent writers across regions
Operational complexityLowerHigher
Best forSystems where brief downtime is acceptableSystems requiring near-continuous availability

Some teams run a variant sometimes called “hot standby,” where the passive instance is fully provisioned and kept warm with continuously replicated data, but still receives zero production traffic. That shortens the failover window considerably compared to a cold standby that has to be provisioned from scratch, without taking on the multi-writer consistency problems of true active-active — it’s a middle point on the spectrum between the two extremes, not a third category.

Why active-active is harder than it sounds

The catch with active-active is data. If two regions can both accept writes to the same logical data, you now have a distributed consistency problem: what happens when the same record is updated in two regions within the same second? Resolving that requires either routing all writes for a given piece of data to one region (partial active-active, where reads are distributed but writes aren’t), conflict-resolution logic, or accepting the tradeoffs described by the CAP theorem — you can’t have perfect consistency, availability, and partition tolerance simultaneously, so an active-active system has to choose which one it bends on during a network partition.

This is closely related to how database sharding and partitioning split data across nodes: an active-active system frequently ends up partitioning its data by region for writes, even while serving reads from anywhere, to sidestep the hardest version of the consistency problem.

Choosing between them

Active-passive is the right default when:

  • Downtime measured in seconds to low minutes is acceptable under your actual SLA.
  • The system has a single, easily identified source of truth and multi-region writes would add more risk than they remove.
  • Cost matters more than shaving the last bit of failover time — idle standby capacity is real spend for a scenario that, hopefully, rarely triggers.

Active-active makes sense when:

  • Even brief unavailability has a real cost — payment processing, real-time bidding, anything user-facing at global scale.
  • Traffic volume is high enough that spreading load across regions is valuable on its own, independent of failover.
  • The team is prepared to handle the consistency questions multi-region writes raise, rather than backing into them accidentally.

A middle ground: active-active reads, active-passive writes

Many systems don’t fully commit to either extreme. A common pattern serves reads from every region (active-active for read traffic, which is usually the majority of load) while routing all writes to a single primary region (active-passive for writes). This gets most of the latency and availability benefit of active-active without inheriting the hardest part of multi-writer consistency — it’s a deliberate simplification, not a compromise born of indecision.

The takeaway

Active-passive keeps standby capacity idle until a failure forces a promotion, trading some failover latency for a simpler consistency model and lower cost. Active-active keeps every region live and serving traffic continuously, cutting failover time to near zero at the cost of a genuinely harder data-consistency problem. Most systems don’t need full active-active — the read-active, write-passive middle ground covers a large share of the availability benefit without the multi-writer complexity, and it’s worth ruling that out before reaching for full active-active.

Chisato Chisato · · 5 min read

Exponential Backoff and Retry Strategies Explained

Exponential backoff spaces retries further apart after each failure so clients stop hammering a struggling service. How it works, and why it needs jitter.

#DevOps #Cloud #Distributed Systems
Chisato Chisato · · 3 min read

What Is a Runbook? Incident Response Playbooks

A runbook is a step-by-step document for handling a specific operational task or incident, turning tribal knowledge into a repeatable procedure.

#DevOps #Cloud #Observability