한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Buku Putih Lag Game › L12 Database

Cache stampede Cache stampede / thundering herd

ID penyebab db-cache-stampede · Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur DB (Tim Infrastruktur)

Buka kartu interaktif dengan gambar dan simulasi →

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

Gejala
Input lag, Freeze, Tidak bisa masuk / loading tanpa henti
Faktor
Stall, Latensi
Siapa yang mengalami
Seluruh server
Kapan
Secara berkala, Saat banyak pemain berkumpul
Penanggung jawab
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

  1. 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
  2. Optimal Probabilistic Cache Stampede Prevention VLDB Endowment
    Cache stampede: saat item populer kedaluwarsa, banyak request membuatnya ulang bersamaan; dicegah dengan memperbarui lebih awal secara probabilistik sebelum kedaluwarsa
  3. High availability with Redis Sentinel Redis
    Failover otomatis yang mempromosikan replika saat server primer mati
  4. INFO Redis
    keyspace_hits dan keyspace_misses (jumlah lookup key yang berhasil dan gagal), expired_keys (jumlah key yang kedaluwarsa), uptime_in_seconds (waktu sejak dijalankan)
  5. SHOW PROCESSLIST Statement MySQL
    Statement yang sedang dijalankan (Info) dan lama berada di status saat ini (Time, dalam detik) untuk setiap sesi
  6. The Cumulative Statistics System (PostgreSQL Documentation) PostgreSQL
    pg_stat_activity: query yang sedang berjalan (query) untuk setiap sesi

Lihat juga

Lapisan yang sama: L12 Database

Penyebab di lapisan lain dengan gejala yang sama (Input lag)

Lihat kartu interaktif dengan gambar dan simulasi