Availability dan Reliability
Memahami konsep availability dan reliability serta cara membangun sistem yang tahan gangguan
Definisi
Availability
- Persentase waktu sistem bisa diakses dan berfungsi
- Diukur: (total waktu - downtime) / total waktu × 100%
- Contoh: 99.9% availability = maksimal 43.8 menit downtime per bulan
Reliability
- Kemampuan sistem untuk menjalankan fungsinya secara konsisten dan benar selama periode tertentu
- Lebih luas dari availability — sistem bisa "available" tapi tidak reliable jika hasilnya salah atau tidak konsisten
- Contoh: sistem yang merespons tapi memberikan data yang salah = available tapi tidak reliable
Fault Tolerance
- Kemampuan sistem untuk terus beroperasi meskipun ada komponen yang gagal
- Berbeda dari "tidak pernah gagal" — melainkan "tetap berjalan meski ada yang gagal"
Penyebab Downtime
- Hardware failure: server, storage, atau network yang rusak
- Software bugs: code yang menyebabkan crash atau infinite loop
- Deployment issues: deploy yang memperkenalkan regression
- External dependencies: API atau service pihak ketiga yang down
- Overload: traffic melebihi kapasitas sistem
- Human error: konfigurasi yang salah atau perintah yang tidak sengaja
Strategi Meningkatkan Availability
Redundancy
- Tidak ada single point of failure — setiap komponen kritis punya backup
- Active-Active: dua instance berjalan bersamaan, traffic dibagi
- Active-Passive: satu instance aktif, satu standby siap mengambil alih
Geographic Distribution
- Deploy di beberapa region untuk tahan terhadap bencana regional
- Multi-AZ (Availability Zone): protection terhadap data center failure
- Multi-region: protection terhadap kegagalan seluruh region
Health Checks dan Auto-healing
- Monitor status setiap instance secara otomatis
- Restart atau replace instance yang tidak sehat tanpa intervensi manual
- Kubernetes liveness dan readiness probes adalah contoh mekanisme ini
Circuit Breaker Pattern
- Mencegah cascade failure saat dependency eksternal gagal
- Jika dependency gagal X kali berturut-turut, "buka" circuit — stop kirim request ke sana
- Setelah cooldown period, coba lagi secara perlahan (half-open state)
- Mencegah sistem utama collapse karena menunggu dependency yang down
Graceful Degradation
- Sistem tetap berfungsi sebagian meski ada komponen yang gagal
- Contoh: rekomendasi produk gagal → tampilkan produk popular sebagai fallback
- Contoh: search lambat → kembalikan hasil yang sudah di-cache
- Desain dengan mempertimbangkan: "Jika komponen X gagal, apa yang masih bisa ditampilkan?"
Retry dengan Exponential Backoff
- Coba ulang request yang gagal dengan jeda yang semakin lama
- Mencegah thundering herd (semua retry bersamaan saat service recovery)
- Selalu tambahkan jitter (randomisasi) pada retry delay
Failure Modes yang Perlu Didesain
Timeout
- Selalu set timeout untuk semua external calls
- Tanpa timeout, satu dependency lambat bisa block seluruh sistem
- Set timeout yang realistis, bukan terlalu pendek atau terlalu panjang
Rate Limiting
- Batasi jumlah request yang bisa diterima dalam periode tertentu
- Mencegah satu user atau client menghabiskan seluruh kapasitas sistem
- Implementasikan di API gateway atau application layer
Bulkhead Pattern
- Isolasikan resource untuk komponen berbeda agar kegagalan tidak menyebar
- Contoh: connection pool terpisah untuk service A dan B
- Jika service A overload, tidak akan menghabiskan resource untuk service B
Measuring Reliability
MTBF (Mean Time Between Failures)
- Rata-rata waktu antara dua kegagalan
- Semakin tinggi = semakin reliable
MTTR (Mean Time to Recovery)
- Rata-rata waktu untuk memulihkan sistem setelah gagal
- Semakin rendah = semakin baik kemampuan recovery
Error Rate
- Persentase request yang gagal
- Biasanya diukur per endpoint atau per service
Praktik Terbaik
- Desain untuk failure — asumsikan setiap komponen akan gagal suatu saat
- Test failure scenarios secara aktif (chaos engineering, game day)
- Monitor availability dan reliability secara real-time
- Dokumentasikan runbook untuk setiap failure mode yang diketahui
- Recovery yang cepat sering lebih valuable dari prevention yang sempurna