Multi-AZ is for availability. A read replica is for scaling reads.
A Multi-AZ instance deployment keeps a standby copy of the database in another AZ (Availability Zone: a separate data centre in the same Region). Replication is synchronous: every write reaches the standby before it is confirmed. If the primary or its AZ fails, RDS fails over automatically. The same DNS endpoint then points to the new primary, so the app only needs to reconnect. The standby does not serve reads. It is for high availability. It also reduces the impact of maintenance and backups.
A read replica uses asynchronous replication: writes are copied to it a little later. It has its own endpoint and serves read-only queries.
- It scales reads.
- It can live in another Region, for DR (disaster recovery) or lower latency.
- It can lag behind the primary.
- You must promote it to a standalone database by hand.
You often use both. There is also a Multi-AZ DB cluster deployment option, which has two standbys that can serve reads.
- Multi-AZ has a synchronous standby, automatic failover and keeps the same endpoint.
- The standby in a classic Multi-AZ instance deployment does not serve reads.
- Read replicas are asynchronous, have their own endpoint, serve reads and can lag.
- Replicas can be in another Region, and you promote them by hand.
- Use both to get high availability and read scaling.