Why Go Multi-Region
three drivers, three different designsMulti-region is expensive and complex, so the first question is why โ because each reason implies a different design.
| Driver | What it demands |
|---|---|
| Latency to global users | Serve each user from a nearby region โ active-active |
| Disaster recovery | A standby that survives losing a region โ active-passive |
| Data residency law | Keep certain data in certain jurisdictions โ regional partitioning |
Active-Passive
a standby that waits for disasterOne region serves all traffic; a second stands by, kept current by replication. If the primary dies, you promote the standby. Simpler than active-active because only one region takes writes โ no conflicts. The two numbers that define it are RTO and RPO.
โโโโโโโโโโโโโโ async replication โโโโโโโโโโโโโโ
โ PRIMARY โ โโโโโโโโโโโโโโโโโโโโโโถ โ STANDBY โ
โ all trafficโ โ idle, warm โ
โโโโโโโโโโโโโโ โโโ failover โโโถ โโโโโโโโโโโโโโ
RTO โ Recovery Time Objective: how long until you're back up (failover speed)
RPO โ Recovery Point Objective: how much data you can lose (replication lag)
the async lag IS your data-loss window
Active-Active
every region serves โ and the write problemEvery region serves live traffic, each user hitting the nearest one. Reads are easy โ a local replica in each region. Writes are the whole difficulty, and there are three ways to handle them.
| Write approach | How | Cost |
|---|---|---|
| Single global write region | All writes route to one region; others read local | Distant users pay latency on every write |
| Region-local writes | Each region takes writes, replicates to others | Write conflicts โ needs resolution (multi-leader) |
| Partition by home region | Each user's data lives in their home region | Cross-region access is slow / complex |
Partitioning users by home region is often the cleanest: a user's writes always go to their own region, so there's no conflict, and only the rare cross-region interaction pays the price. It sidesteps the conflict problem instead of solving it โ which is usually the better trade (Tradeoffs).
Data Residency
the law decides where bytes liveRegulations like GDPR can require that data about EU users physically stays in the EU. That forces regional partitioning: each user's personal data is pinned to their jurisdiction, with only non-personal or aggregated metadata replicated globally.
Routing Users to Regions
getting them to the right one, and off a dead oneTwo mechanisms send users to a region. GeoDNS resolves the domain to the nearest region's address; anycast advertises one IP from many locations and lets the network route to the closest, reacting faster than DNS with no TTL wait (Discovery).
The Cost: Cross-Region Latency
regions are islandsThe physics is unforgiving: a round trip between regions is ~100ms or more, bounded by the speed of light. Any design where serving a request means a synchronous call to another region is poisoned โ that 100ms lands on every request, defeating the reason you went multi-region.
Quick Reference
active-passive vs active-active| Active-passive | Active-active | |
|---|---|---|
| Traffic | Primary only; standby idle | All regions serve |
| Writes | One region โ no conflicts | The hard part โ needs a strategy |
| RTO / RPO | Failover time / replication lag | Near-zero if partitioned right |
| Cost | Lower โ standby mostly idle | Higher โ full capacity everywhere |
| Complexity | Moderate; test the failover | High; conflict + residency |
| Best for | Disaster recovery | Low global latency |
| Region checklist |
|---|
| Pin down the driver: latency, DR, or residency? |
| Where do writes go, and how are conflicts handled? |
| No synchronous cross-region calls on the request path |
| Session state in a store, not on a regional server |
| Is the failover actually tested? |