Jika cache data populer kedaluwarsa bersamaan, ribuan request menyerbu DB sekaligus.
Mengapa Data populer yang disimpan di Redis dan sejenisnya kedaluwarsa bersamaan → Akibatnya Request yang ingin membuat ulang data yang sama menyerbu DB sekaligus → Di layar DB kelebihan beban sehingga banyak fitur satu per satu melambat atau berhenti merespons
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur DB (Tim Infrastruktur)
Tugas Tim Pengembang Game
Sebar waktu kedaluwarsa secara acak, biarkan hanya satu request yang memperbarui cache sementara sisanya memakai nilai lama.
Tugas Tim Infrastruktur
Siapkan replika dan failover otomatis agar cache tidak kosong total saat Redis dimulai ulang atau mengalami gangguan, pastikan DB punya sisa kapasitas untuk bertahan walaupun cache kosong.
Di grafik
Melonjak secara berkala · Hit rate cache, jumlah query DB per detik
Yang diperiksa
Tumpangkan keyspace_hits dan keyspace_misses (hit rate), expired_keys, dan tanda restart (uptime_in_seconds) dari INFO Redis dengan jumlah query DB per detik, lalu hitung berapa banyak query yang sama berjalan bersamaan di DB pada saat itu (MySQL SHOW PROCESSLIST, PostgreSQL pg_stat_activity)
Cocok jika
Saat cache miss tiba-tiba melonjak, jumlah query DB ikut melonjak, dan sebagian besar query yang berjalan bersamaan adalah query yang sama yang membaca data yang sama. Waktunya bertepatan dengan periode kedaluwarsa key populer atau waktu restart Redis
Tidak cocok jika
Cache miss sama seperti biasa tetapi hanya query DB yang bertambah: lebih mungkin lonjakan login (db-login-storm) atau batch job (db-batch)
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
Hal yang sama terjadi jika cache kosong total karena Redis dimulai ulang atau mengalami gangguan. Risikonya makin besar pada arsitektur yang mengandalkan cache sehingga DB-nya disiapkan dengan kapasitas kecil.
Sumber
Scaling Memcache at Facebook (NSDI '13)USENIX Thundering herd: saat key yang sering dipakai diinvalidasi, banyak pembacaan menyerbu DB; dicegah dengan lease (hanya satu klien yang memperbarui) dan mengembalikan nilai lama; warm-up untuk cluster yang cache-nya kosong dilakukan terpisah
Optimal Probabilistic Cache Stampede PreventionVLDB Endowment Cache stampede: saat item populer kedaluwarsa, banyak request membuatnya ulang bersamaan; dicegah dengan memperbarui lebih awal secara probabilistik sebelum kedaluwarsa
INFORedis keyspace_hits dan keyspace_misses (jumlah lookup key yang berhasil dan gagal), expired_keys (jumlah key yang kedaluwarsa), uptime_in_seconds (waktu sejak dijalankan)
SHOW PROCESSLIST StatementMySQL Statement yang sedang dijalankan (Info) dan lama berada di status saat ini (Time, dalam detik) untuk setiap sesi