Scala per fasi: prima read replica + caching per le letture, poi sharding (Vitess) per le scritture — e aggiungi il connection pooling prima di ogni altra cosa, perché è il 10x più economico. Letture e scritture scalano in modo diverso, quindi non ricorrere allo sharding il primo giorno.
┌─▶ 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
Fase 0: connection pooling
Ogni connessione MySQL costa memoria e un thread. A 100x di traffico esaurirai molto prima della CPU. Un pooler come o multiplexa migliaia di connessioni applicative su poche centinaia di connessioni DB. È un cambio di configurazione, non una riarchitettura — fallo per primo.
