dissected.io
Lesson 17 of 23
Advancedadvancedmulti-regiondisaster-recoveryreplicationlatency10 min read

Multi-Region Architecture

Multi-region architecture is the most expensive decision you can make in cloud, and it's usually premature. Before you commit to running in multiple regions, you need to be honest about whether you actually need it — because multi-AZ handles the vast majority of availability requirements at a fraction of the complexity and cost.

Multi-Region — RPO Data Loss

Route 53UsersUsersus-east-1ALBECSAuroraeu-west-1ALBECSAurora Read Replica

Two regions with full stacks, database replication between them

Why Multi-Region

There are exactly three legitimate reasons to go multi-region. Regional outage survival — a full region goes offline and your application must keep serving traffic. This is rarer than people think; AWS, GCP, and Azure have all had regional outages, but they're measured in hours, not days. Data residency — regulations require data to live in specific geographies, and your users span those geographies. Global latency — your users are distributed worldwide and need sub-100ms response times that a single region can't deliver.

If none of these apply to you, stop here. Multi-AZ within a single region gives you datacenter-level fault isolation with negligible latency overhead and no data consistency headaches.

The DR Spectrum: RTO and RPO

Every disaster recovery strategy lives on a spectrum defined by two numbers. Recovery Time Objective (RTO) is how long you can be down. Recovery Point Objective (RPO) is how much data you can lose. Lower numbers cost exponentially more.

Backup/restore is the cheapest option. You take periodic backups to another region and restore them when disaster strikes. RTO is hours (spinning up infrastructure from scratch), RPO depends on backup frequency (possibly hours of data loss). Good enough for many workloads.

Pilot light keeps a minimal version of your environment running in the secondary region — the database is replicating, but compute is scaled to zero or near-zero. On failover, you scale up compute. RTO is minutes to an hour; RPO is near-zero if replication is healthy.

Warm standby runs a scaled-down but functional copy of your entire stack in the secondary region. Failover means routing traffic and scaling up. RTO is minutes; RPO is near-zero.

Active-active runs full production in both regions simultaneously, serving traffic from whichever is closest. RTO is effectively zero (traffic just stops going to the failed region). RPO depends on your data strategy — and that's where everything gets complicated.

The Data Problem Is the Whole Problem

Here's the uncomfortable truth: stateless compute in three regions is trivial. You deploy containers, put a global load balancer in front, and you're done in an afternoon. The database is what makes multi-region hard.

Single-region primary with cross-region read replicas is the simplest approach. Writes go to the primary region, reads can be served from replicas anywhere. Replication is asynchronous, which means there's lag — typically seconds, sometimes more under load. If the primary fails, you promote a replica, but any writes that hadn't replicated yet are lost. This is fine for most read-heavy workloads.

Multi-primary (multi-master) lets you write in any region. The catch is conflict resolution. Two users update the same row in different regions simultaneously — who wins? Last-writer-wins is simple but lossy. Application-level conflict resolution is correct but enormously complex. CRDTs work for specific data structures but aren't general-purpose.

Globally consistent databases solve this at the infrastructure level. Google Spanner uses synchronized atomic clocks (TrueTime) to provide strong consistency across regions with single-digit millisecond overhead. DynamoDB Global Tables give you multi-region, multi-active with last-writer-wins. Cosmos DB offers tunable consistency levels from strong to eventual. These work, but they're expensive and lock you into a specific database.

AWS Implementation

AWS gives you several building blocks. Route 53 provides DNS-based routing with latency-based, failover, and geolocation policies. Global Accelerator uses AWS's backbone network with anycast IPs for more deterministic routing than DNS. Aurora Global Database replicates across regions with sub-second lag and supports managed failover. DynamoDB Global Tables replicate tables across regions with last-writer-wins conflict resolution. S3 Cross-Region Replication handles object storage.

Failover can be automated through Route 53 health checks, but automated failover carries split-brain risk — both regions think they're primary. Many teams keep failover manual for writes and automatic only for reads.

GCP Implementation

GCP's global networking is a genuine advantage here. The global HTTP(S) load balancer routes traffic to the nearest healthy backend using Google's backbone — no DNS propagation delays. Cloud Spanner provides the strongest multi-region consistency story of any provider, with real globally consistent transactions. Cloud SQL supports cross-region read replicas. Firestore offers multi-region replication natively.

GCP's global VPC means your network spans regions without peering or transit gateways, simplifying the networking layer considerably.

Azure Implementation

Azure's Front Door provides global HTTP routing with built-in health probes and instant failover. Traffic Manager handles DNS-based routing for non-HTTP traffic. Cosmos DB offers five consistency levels (strong, bounded staleness, session, consistent prefix, eventual) — giving you the most granular consistency control of any provider. Azure SQL supports active geo-replication and auto-failover groups. Region pairs provide a built-in pairing concept for DR.

Side-by-Side Comparison

AspectAWSGCPAzure
Global traffic routingRoute 53 + Global AcceleratorGlobal HTTP(S) LB (anycast)Front Door + Traffic Manager
Globally consistent DBDynamoDB Global Tables (eventual)Cloud Spanner (strong)Cosmos DB (tunable)
Cross-region DB replicationAurora Global DatabaseCloud SQL replicasSQL active geo-replication
Failover mechanismRoute 53 health checks, manual promotionGlobal LB auto-routingAuto-failover groups
Object replicationS3 Cross-Region ReplicationDual/multi-region bucketsGRS/GZRS storage
Network modelRegional VPCs + Transit GatewayGlobal VPCRegional VNets + Global VNet Peering

When to Use Which and Key Differences

GCP has the strongest multi-region primitives — the global load balancer and Spanner are architecturally ahead of the competition. If you're building a new globally distributed system, GCP's networking model is the least friction.

AWS has the broadest ecosystem and the most battle-tested patterns for multi-region DR, even if the individual primitives require more assembly.

Azure's Cosmos DB consistency model is the most flexible if you need to tune consistency per-operation rather than per-database.

Testing is non-negotiable. An untested failover does not work. Run game days. Actually kill a region. Do it during business hours so you find the problems when your team is awake. If your runbook is "we'll figure it out when it happens," you don't have a DR strategy.

The honest recommendation: get multi-AZ right first. Use health checks, auto-scaling, and multi-AZ databases. Be absolutely certain you need multi-region before you pay for it in money, complexity, and engineering time. Most companies that think they need active-active multi-region actually need multi-AZ with cross-region backups.

Key Takeaways

  • Multi-region is the most expensive architectural decision in cloud — start with multi-AZ and only add regions when you have a concrete requirement
  • The data layer is the entire problem; stateless compute across regions is trivial, but database replication and consistency are not
  • The DR spectrum (backup/restore → pilot light → warm standby → active-active) trades cost and complexity for lower RTO/RPO
  • Globally consistent databases (Spanner, DynamoDB Global Tables, Cosmos DB) solve the hardest problem but lock you into a provider
  • Automated failover carries split-brain risk — many teams keep write failover manual deliberately
  • An untested failover does not work; run game days that actually kill a region

Next, we'll look at how to secure everything you've built across your cloud environment.

Enjoyed this breakdown?

Get notified when new lessons go live.