Çok Katmanlı Cache Arızası
“Daha iyi performans” için L1, L2 ve L3 cache ekledik. Artık verinin yanlış olabileceği 1 yerine 3 yerimiz var.
Muhteşem mimarimiz:
- L1: Süreç içi cache (Guava)
- L2: Yerel Redis
- L3: Dağıtık Redis cluster'ı
- Gerçek kaynak: PostgreSQL
Ne ters gitti:
- L3 cache doğru şekilde geçersiz kılındı
- L2 cache'te hâlâ eski veri vardı (farklı TTL)
- A sunucusundaki L1 cache'te eski veri vardı
- B sunucusundaki L1 cache'te yeni veri vardı
- Kullanıcılar her yenilemede farklı veri gördü
Debugging cehennemi:
“Hatalı veri hangi cache katmanında?” sorusu her seferinde 2 saatlik bir soruşturmaya dönüştü.
Öğrendiklerimiz:
- Her cache katmanı invalidation karmaşıklığını katlar
- TTL'ler koordine edilmeli (iç cache < dış cache)
- Her katmana gözlemlenebilirlik gerekir
- Bazen tek cache yeterlidir
Ders: Daha fazla cache katmanı ≠ daha iyi performans. İşler ters gittiğinde debug edilecek daha fazla yer demektir. Bir katman daha eklemeden önce izleme ve gözlemlenebilirlik yığınınızın hâlihazırda sahip olduklarınızın içini görebildiğinden emin olun.
Bu tür olaylar önlenebilir. AWS Yönetilen Hizmetler ekibimiz müşteri ortamlarını yapay zekâ destekli izleme ve nöbetteki kıdemli mühendislerle 7/24 gözetir — böylece bu tür hikâyeler arşivde kalır.