Skalakan secara bertahap: read replica + caching untuk baca terlebih dahulu, lalu sharding (Vitess) untuk write — dan tambahkan connection pooling sebelum hal lain, karena itu 10x termurah. Baca dan write menskala berbeda, jadi jangan meraih sharding di hari pertama.
┌─▶ Cache (Redis) ── hit ──▶ return
App ─▶ Pool(PgBouncer/ProxySQL) miss ▼
│ ┌─▶ Read replica 1 ┐
├──── reads ─────────┼─▶ Read replica 2 ┼─ (async replication)
│ └─▶ Read replica N ┘
└──── writes ──▶ Primary ──▶ (later) Vitess shards ─▶ Primary A / Primary B
Langkah 0: connection pooling
Setiap koneksi MySQL memakan memori dan sebuah thread. Pada trafik 100x Anda akan menghabiskan jauh sebelum CPU. Sebuah pooler seperti atau memultipleks ribuan koneksi app ke beberapa ratus koneksi DB. Ini perubahan konfigurasi, bukan re-arsitektur — lakukan lebih dulu.
