BAB 63. SCALABILITY STRATEGY
63.1 Tujuan
Strategi skalabilitas dirancang agar TemuBelajar mampu berkembang dari 100 pengguna menjadi jutaan pengguna tanpa perlu melakukan redesign arsitektur secara menyeluruh, hanya dengan menambahkan sumber daya komputasi.
63.2 Tahapan Skalabilitas
Tahap 1 — Single School
| Parameter | Nilai |
|---|---|
| Pengguna | ~1.000 |
| Meeting/tahun | ~20.000 |
| Infrastruktur | 1 VM (4 vCPU, 8GB RAM) |
| Database | 1 MySQL Instance |
| Queue Worker | 1 Instance |
| Cache | File-based |
Tahap 2 — Multi School
| Parameter | Nilai |
|---|---|
| Pengguna | ~10.000 |
| Meeting/tahun | ~200.000 |
| Infrastruktur | 1 VM (8 vCPU, 16GB RAM) |
| Database | MySQL + Redis |
| Queue Worker | 3 Instances |
| Cache | Redis |
Tahap 3 — District Scale
| Parameter | Nilai |
|---|---|
| Pengguna | ~100.000 |
| Meeting/tahun | ~2.000.000 |
| Infrastruktur | Load Balancer + 3 App Servers |
| Database | Primary + 1 Read Replica |
| Queue Worker | 10 Instances (Horizon) |
| Cache | Redis Sentinel |
Tahap 4 — National Scale
| Parameter | Nilai |
|---|---|
| Pengguna | ~1.000.000+ |
| Meeting/tahun | ~20.000.000+ |
| Infrastruktur | Kubernetes Cluster |
| Database | Sharding + Multi-Region Replica |
| Queue Worker | Auto-scaling |
| Cache | Redis Cluster |
| CDN | Global CDN |
63.3 Arsitektur Skalabel
flowchart TD
U["👥 Users"] --> LB["⚖️ Load Balancer\n(Nginx / HAProxy)"]
LB --> A1["🟥 App Server 1"]
LB --> A2["🟥 App Server 2"]
LB --> A3["🟥 App Server 3"]
A1 & A2 & A3 --> REDIS[("🔴 Redis Cluster\n(Cache + Queue)")]
A1 & A2 & A3 --> DBP[("💾 MySQL Primary")]
DBP --> DBR[("💾 MySQL Read\nReplica")]
REDIS --> Q["⏳ Queue Workers\n(Horizon)"]
Q --> DBP
style LB fill:#059669,color:#fff
style REDIS fill:#dc2626,color:#fff
63.4 Strategi Per Komponen
| Komponen | Strategi Skalabilitas |
|---|---|
| API Server | Stateless — dapat di-scale horizontal tanpa state sharing |
| Autentikasi | Sanctum token (stateless, tidak perlu sticky session) |
| Cache | Redis Cluster dengan consistent hashing |
| Queue | Redis Queue + multiple worker + auto-scaling |
| File Storage | Object Storage (S3-compatible) — dapat di-scale tanpa batas |
| Chat (WebSocket) | Reverb Cluster dengan channel broadcast terdistribusi |
| Database | Primary untuk write, Read Replica untuk query berat |
| Search | Dedicated search engine (Meilisearch/Elasticsearch) di Tahap 4 |
63.5 Prinsip Skalabilitas
flowchart LR
P1["📦 Stateless\nApp Server"] --> S["✅ Scalable"]
P2["🔴 Redis\nCentral Cache"] --> S
P3["⏳ Async\nQueue Processing"] --> S
P4["💾 DB Separation\n(Read/Write)"] --> S
P5["☁️ Object\nStorage"] --> S
style S fill:#059669,color:#fff
:::tip Prinsip Utama Skalabilitas horizontal (menambah server) jauh lebih murah dan mudah daripada skalabilitas vertikal (upgrade server yang ada). Arsitektur TemuBelajar dirancang stateless untuk mendukung ini. :::