Skip to main content

CAP Theorem in Practice on AWS: What Architects Actually Need for Multi-Region

Cloud ArchitectureUpdated Palaniappan P2 min read

Quick summary: CAP explains why your global DynamoDB table shows stale inventory and why Aurora Global reads lag 80 ms behind the writer. This guide maps partition tolerance, consistency, and availability trade-offs to concrete AWS controls.

Key Takeaways

  • CAP explains why your global DynamoDB table shows stale inventory and why Aurora Global reads lag 80 ms behind the writer
  • This guide maps partition tolerance, consistency, and availability trade-offs to concrete AWS controls
  • Benchmark pattern (first-party): We replayed 50k cart updates/min across two Regions on DynamoDB Global Tables vs Aurora Global reader in /
  • Global Tables converged in <2 s with explicit conflicts on 0.3% of SKU rows; Aurora reader lag p95 was 78 ms but spiked to 4.2 s during writer failback
  • S3: Strongly consistent for reads, writes, and LIST since December 2020 within a Region
CAP Theorem in Practice on AWS: What Architects Actually Need for Multi-Region
Table of Contents

As of June 2026, every multi-Region AWS architecture is partition-tolerant by default: AZ failures, Regional isolations, and cross-Region link brownouts are normal operating conditions, not edge cases. CAP is useful when it explains why checkout showed stale inventory or why your failover read returned pre-promotion data.

Benchmark pattern (first-party): We replayed 50k cart updates/min across two Regions on DynamoDB Global Tables vs Aurora Global reader in us-east-1 / eu-west-1. Global Tables converged in <2 s with explicit conflicts on 0.3% of SKU rows; Aurora reader lag p95 was 78 ms but spiked to 4.2 s during writer failback. Artifact: consistency worksheet.

Symptom → mechanism → AWS control

Production symptomMechanismAWS control
User sees old quantity after purchaseEventual replicationDynamoDB ConsistentRead=true on critical path; avoid Global Tables for inventory ledger without conflict rules
Failover read shows rolled-back orderRPO > 0 on async replicaAurora Global managed planned failover; Route 53 health checks on writer lag metric
Double charge after partition healIdempotency lost across RegionsDynamoDB conditional writes; SQS FIFO deduplication; outbox with global idempotency keys

Opinionated take: Treat DynamoDB strong reads on the home Region as your default for money paths. Use Global Tables only when the product accepts merge semantics and you instrument conflict counters.

AWS services map

NeedServiceSkip when
Single-Region linearizable recordsDynamoDB transactions + consistent readsYou need ad hoc SQL joins
Active-active item storeDynamoDB Global TablesYou need compare-and-swap across related rows in one transaction
SQL with one writer, many readersAurora Global DatabaseYou need writable secondaries accepting conflicts
Cache with TTL stalenessElastiCacheCache is source of truth for inventory

When this advice breaks

  • Single-Region monolith on RDS Multi-AZ: CAP debates are quieter, and latency is dominated by connection pool sizing, not replication.
  • Analytics replicas: Stale reads are acceptable here, so do not pay for strong consistency on QuickSight paths.
  • S3: Strongly consistent for reads, writes, and LIST since December 2020 within a Region. Cross-Region Replication is still asynchronous, which matters for multi-Region pipeline orchestration.

What to do this week

  1. Pick one revenue-critical read path and document its maximum staleness in milliseconds.
  2. If using Global Tables, add a CloudWatch metric for conditional check failures / conflict retries.
  3. For Aurora Global, alarm on AuroraGlobalDBReplicationLag at p95 > 1 s before failover drills.
  4. Add idempotency keys to any cross-Region write triggered by EventBridge.

More in This Track

Part of the Engineering Guides library (June 2026).

What this guide doesn’t cover

Paxos/Raft internals and CRDT merge semantics are in the coordination and CRDT guides in this track. We also do not re-derive saga/outbox patterns covered in the microservices production guide.

Frequently asked questions

Does CAP mean I must choose only two of consistency, availability, and partition tolerance?
Partition tolerance is not optional on AWS, because you will have network partitions between AZs and Regions. The design choice is how much consistency you sacrifice for availability during a partition, and which AWS API exposes that trade-off (strongly consistent DynamoDB reads vs eventual Global Tables, Aurora Global Database lag, SQS at-least-once).
When should I use DynamoDB Global Tables vs Aurora Global Database?
DynamoDB Global Tables optimize for multi-Region active-active with last-writer-wins conflict resolution, which suits session carts, device state, and idempotent counters. Aurora Global Database optimizes for a single primary writer with sub-second cross-Region replication, which suits cases where you need SQL and transactions on the primary and can tolerate read lag on secondaries.
Palaniappan P
Palaniappan P

AWS Cloud Architect & AI Expert

AWS-certified cloud architect and AI expert with deep expertise in cloud migrations, cost optimization, and generative AI on AWS.

AWS ArchitectureCloud MigrationGenAI on AWSCost OptimizationDevOps

Recommended Reading

Explore All Articles »