Scale เป็นขั้น: read replica + caching สำหรับการอ่านก่อน จากนั้น sharding (Vitess) สำหรับการเขียน — และเพิ่ม connection pooling ก่อนสิ่งอื่นใด เพราะมันคือ 10x ที่ถูกที่สุด การอ่านและการเขียน scale ต่างกัน ดังนั้นอย่าไขว่คว้าหา sharding ตั้งแต่วันแรก
┌─▶ 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: connection pooling
ทุก MySQL connection กิน memory และ thread ที่ traffic 100x คุณจะใช้ หมดก่อน CPU นานมาก pooler อย่าง หรือ multiplex app connection หลายพันลงบน DB connection ไม่กี่ร้อย มันเป็นการเปลี่ยน config ไม่ใช่การ rearchitecture — ทำก่อนเลย
