Mengatasi Thundering Herd
Pelajari bagaimana cache stampede terjadi saat kunci populer kedaluwarsa, serta teknik untuk mencegahnya: penggabungan permintaan, kunci, penghitungan ulang lebih awal, dan TTL dengan jeda acak.
Mengatasi Thundering Herd adalah pelajaran Caching Strategies: Redis + CDN + Edge Computing gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Caching Strategies: Redis + CDN + Edge Computing, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Caching Strategies: Redis + CDN + Edge Computing mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
The Thundering Herd Problem
When a hot cache key expires, every concurrent request misses at once and rushes the origin together. This cache stampede (or thundering herd) can overwhelm the database in an instant.
Why It Is Dangerous
A single popular item serving 10,000 requests/second normally hits the cache. The moment it expires, those 10,000 requests all hit the database simultaneously, often causing a spike that takes the origin down.
Cause: Synchronized Expiry
The root cause is many keys (or many requests on one key) expiring at the same moment. The fix strategies all aim to spread or serialize the resulting recomputation.
Fix 1: Request Coalescing
Let only the first request recompute the value; everyone else waits for that result. This is also called single-flight.
in_flight = {}
def get(key, compute):
if key in in_flight:
return 'waiting for in-flight result'
in_flight[key] = True
return compute()
print(get('hot', lambda: 'computed once'))Fix 2: Mutex Lock
Use a distributed lock (e.g. a Redis key with NX) so only one process recomputes. Others briefly serve stale data or retry after a short wait.
lock = None
def acquire_lock(holder):
global lock
if lock is None:
lock = holder
return True
return False
print(acquire_lock('worker-1'))
print(acquire_lock('worker-2'))Fix 3: Jittered TTL
Add randomness to each entry's TTL so they do not all expire together. A base TTL plus random jitter spreads recomputation over time.
import random
base_ttl = 300
jitter = random.randint(0, 60)
print('TTL for this entry:', base_ttl + jitter, 'seconds')Fix 4: Early Recomputation
Refresh a value before it expires. When an entry is close to its TTL, a background task (or a probabilistic check) recomputes it so it never actually goes cold for users.
Probabilistic Early Expiration
A clever trick: as a key nears expiry, give each request a small, growing probability of recomputing early. One lucky request refreshes the value while others still serve the cached copy.
import random
time_left = 5
beta = 1.0
should_refresh = random.random() < (1 / max(time_left, 1)) * beta
print('Refresh early?', should_refresh)Fix 5: Serve Stale While Revalidating
Return the expired value immediately while a background job fetches fresh data. Users get a fast (slightly stale) response and the origin sees only one refresh request.
Combining Defenses
Real systems layer these: jittered TTLs to avoid synchronized expiry, plus coalescing or a lock to serialize the inevitable misses, plus stale-while-revalidate for the best user experience.
Watch for Cache Penetration Too
A related issue is penetration: requests for keys that never exist always miss and hit the origin. Cache negative results (or use a bloom filter) so missing keys are also absorbed.
Quick Check
Which technique prevents a cache stampede by ensuring only one request recomputes the value while the rest wait for that result?
Recap
You learned to defend against the thundering herd:
- Stampedes happen when hot keys expire and many requests miss at once.
- Coalescing and locks serialize recomputation.
- Jittered TTLs and early recomputation spread the load.
- Stale-while-revalidate keeps responses fast.
Combine these to keep your origin safe under load.
Belajar Caching Strategies: Redis + CDN + Edge Computing dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengatasi Thundering Herd” gratis?
Ya — teks lengkap “Mengatasi Thundering Herd” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Caching Strategies: Redis + CDN + Edge Computing, upgrade ke CoddyKit PRO. Kursus Caching Strategies: Redis + CDN + Edge Computing mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengatasi Thundering Herd”?
Pelajari bagaimana cache stampede terjadi saat kunci populer kedaluwarsa, serta teknik untuk mencegahnya: penggabungan permintaan, kunci, penghitungan ulang lebih awal, dan TTL dengan jeda acak. Kamu berlatih Caching Strategies: Redis + CDN + Edge Computing dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Caching Strategies: Redis + CDN + Edge Computing?
Tidak diperlukan pengalaman sebelumnya. Caching Strategies: Redis + CDN + Edge Computing di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Mengatasi Thundering Herd” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Caching Strategies: Redis + CDN + Edge Computing ini?
Ya. Setiap pelajaran Caching Strategies: Redis + CDN + Edge Computing menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pola Caching Umum
- Strategi Invalidasi Cache
- Kebijakan Penghapusan Cache
- Mengatasi Thundering Herd