Scalează în etape: read replicas + caching pentru citiri mai întâi, apoi sharding (Vitess) pentru scrieri — și adaugă connection pooling înainte de orice altceva, pentru că este cel mai ieftin 10x. Citirile și scrierile scalează diferit, deci nu apela la sharding din prima zi.
┌─▶ 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
Pasul 0: connection pooling
Fiecare conexiune MySQL costă memorie și un thread. La trafic 100x vei epuiza cu mult înainte de CPU. Un pooler precum sau multiplexează mii de conexiuni de aplicație pe câteva sute de conexiuni de DB. Este o schimbare de config, nu o re-arhitecturare — fă-o prima.
