Jika satu layanan melambat, server yang memanggilnya ikut tertahan menunggu respons, dan fitur yang tidak berhubungan pun ikut berhenti.
Mengapa Satu layanan, seperti DB atau autentikasi, melambat → Akibatnya Thread dan koneksi server pemanggil tertahan menunggu respons, dan retry dari permintaan yang gagal menambah beban → Di layar Fitur yang tampak tidak berhubungan pun ikut melambat atau berhenti
Saat banyak pemain berkumpul, Sesekali secara acak
Penanggung jawab
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur jaringan (Tim Infrastruktur)
Tugas Tim Pengembang Game
Pasang timeout di setiap pemanggilan, circuit breaker, isolasi per fitur (bulkhead), retry dengan interval yang makin panjang dan jumlah yang dibatasi, pisahkan respons health check dari pekerjaan yang berat.
Tugas Tim Infrastruktur
Beri kelonggaran pada jumlah kegagalan dan interval health check load balancer agar server yang lambat sesaat tidak langsung dikeluarkan, batasi jumlah server yang dikeluarkan sekaligus.
Di grafik
Mendatar di batas · Waktu respons dan tingkat error per layanan, jumlah thread dan koneksi yang terpakai
Yang diperiksa
Tampilkan waktu respons, tingkat error, dan jumlah retry per layanan dalam satu layar dengan sumbu waktu yang disamakan, lalu cari bagian yang paling dulu melambat. Jika di belakang load balancer, periksa waktu respons target (di AWS ALB: TargetResponseTime), jumlah 5xx dari target (HTTPCode_Target_5XX_Count), dan jumlah target yang dikeluarkan karena tidak sehat (UnHealthyHostCount)
Cocok jika
Latensi satu layanan naik lebih dulu, lalu jumlah thread dan koneksi yang terpakai di pihak pemanggil layanan itu menempel di batas, error merambat ke layanan lain, dan jumlah retry serta jumlah target yang dikeluarkan ikut naik
Tidak cocok jika
Beberapa layanan melambat bersamaan pada saat yang sama: periksa dulu gangguan pada sumber daya bersama (DB, jaringan, host)
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
Health check (pemeriksaan apakah server masih hidup) juga memperbesar efek berantai. Jika server yang sibuk terlambat menjawab pemeriksaan, load balancer mengeluarkan server yang sebenarnya normal, trafiknya membanjiri server yang tersisa, dan server berikutnya pun ikut terlambat.
Site Reliability Engineering, Chapter 22: Addressing Cascading FailuresGoogle Jika server yang kelebihan beban gagal health check dan dikeluarkan, beban menumpuk di server yang tersisa dan retry memperbesar beban; disarankan membatasi jumlah retry, exponential backoff acak, dan deadline
Circuit Breaker PatternMicrosoft Azure Permintaan yang tertahan sampai timeout menahan thread dan koneksi DB sehingga fitur yang tidak berhubungan pun gagal; jika kegagalan menumpuk dalam waktu tertentu, pemanggilan langsung ditolak
Timeouts, retries, and backoff with jitterAWS Amazon Builders' Library. Pada rantai pemanggilan 5 tingkat, jika setiap tingkat melakukan retry 3 kali, beban DB menjadi 243 kali lipat; lakukan retry di satu tempat saja dan batasi dengan token bucket
CloudWatch metrics for your Application Load BalancerAWS TargetResponseTime (waktu sejak permintaan meninggalkan load balancer sampai target mulai merespons), HTTPCode_Target_5XX_Count (jumlah 5xx yang dihasilkan target), UnHealthyHostCount (jumlah target yang tidak sehat)
Lihat juga
Lapisan yang sama: L13 Arsitektur dan operasional server