---
id: "read-replica-as-sole-scaling"
type: "rule"
severity: "warning"
url: "https://localhost:3000/catalogue/rules/read-replica-as-sole-scaling"
---

# Read replicas as the only scaling

An SQL database above 5000 rps relies on async replicas alone; it is neither sharded nor distributed, so writes still hit one primary.

| | |
|---|---|
| Severity | warning |
| Selects | every node of kind sql-database |
| Components in scope | 76 |

## Why

Asynchronous read replicas scale reads only. When the store is neither sharded nor distributed the writes still land on one primary, so the replicas add nothing at the declared peak.

## What it checks

It looks at every node of kind sql-database, and fires when:

- all of these hold:
  - the node's `replication` is "async"
  - the node's `sharded` is false
  - the node's `distributed` is false
  - the node's declared requests per second is more than 5000

Message template:

```
Database '{{node.id}}' relies on async read replicas as its only scaling above 5000 rps. Replicas do not scale writes.
```

## Applies to

- [SQL database](https://localhost:3000/catalogue/kinds/sql-database.md) `sql-database`

76 catalogue components fall under it.

## Tripped by

Reference designs whose broken twin names this rule in its header:

- [amazon-order](https://localhost:3000/d/zeema/amazon-order)
- [doordash-delivery](https://localhost:3000/d/zeema/doordash-delivery)
- [dropbox-sync](https://localhost:3000/d/zeema/dropbox-sync)
- [facebook-tao](https://localhost:3000/d/zeema/facebook-tao)
- [github-mysql](https://localhost:3000/d/zeema/github-mysql)
- [reddit-feed](https://localhost:3000/d/zeema/reddit-feed)
- [shopify-flash-sale](https://localhost:3000/d/zeema/shopify-flash-sale)
- [stack-overflow](https://localhost:3000/d/zeema/stack-overflow)
- [uber-dispatch](https://localhost:3000/d/zeema/uber-dispatch)
- [unique-id-generator](https://localhost:3000/d/zeema/unique-id-generator)
- [youtube-upload-playback](https://localhost:3000/d/zeema/youtube-upload-playback)
- [zerodha-kite](https://localhost:3000/d/zeema/zerodha-kite)

## Source (`rule` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../schema/rule.schema.json
# Async read replicas scale reads only. If the store is neither sharded nor distributed,
# the writes still land on one primary and the replicas add nothing at write peak.
# Tripped by: designs/doordash-delivery.broken.yaml
schemaVersion: "1"
type: "rule"
id: "read-replica-as-sole-scaling"
severity: "warning"
select:
  node:
    kind: "sql-database"
when:
  all:
    - prop: "replication"
      equals: "async"
    - prop: "sharded"
      equals: false
    - prop: "distributed"
      equals: false
    - nfr:
        rps:
          gt: 5000
message: "Database '{{node.id}}' relies on async read replicas as its only scaling above 5000 rps. Replicas do not scale writes."
```

Human page: https://localhost:3000/catalogue/rules/read-replica-as-sole-scaling
