Three database instances, and the reads all land on one
A reporting-heavy application on RDS is running out of read capacity. Writes are latency-sensitive — they sit in a checkout path — and the business wants a failure in one Availability Zone to be survived automatically, without anyone being paged to run a procedure.
Both plans below put three database instances in three Availability Zones in one Region, and both cost about the same. One of them serves reads from one instance.
Boundaries, outermost first: us-east-1b: Standby (no reads) us-east-1a: App (the caller), Primary (all reads) us-east-1c: Replica (async) Connections: App calls Primary — writes and reads Primary calls Standby — synchronous — and the failover target Primary publishes to Replica — asynchronous — promoted by hand App calls Replica — reporting reads App controls Standby — same endpoint after failover
Boundaries, outermost first: us-east-1b: Reader 1 (readable) us-east-1a: App (the caller), Writer (one ack) us-east-1c: Reader 2 (readable) Connections: App calls Writer — writes Writer publishes to Reader 1 — semisynchronous — a failover target Writer publishes to Reader 2 — semisynchronous — a failover target App calls Reader 1 — reads App calls Reader 2 — reads