Skalinkite etapais: read replicas + kešavimas skaitymams pirma, tada sharding (Vitess) įrašymams — ir pridėkite connection pooling prieš viską, nes tai pigiausias 10x. Skaitymai ir įrašymai skalinasi skirtingai, tad negriebkite sharding pirmą dieną.
┌─▶ 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
0 žingsnis: connection pooling
Kiekvienas MySQL ryšys kainuoja atmintį ir giją. Esant 100x srautui išsemsite gerokai anksčiau nei CPU. Pooler kaip ar multipleksuoja tūkstančius aplikacijos ryšių į kelis šimtus DB ryšių. Tai konfigūracijos pakeitimas, o ne perprojektavimas — darykite tai pirma.
