Gecikme Ekleyen Cache
İşleri hızlandırmak için bir Redis cache ekledik. Her isteği yavaşlattı.
Neyi cache'ledik:
- Kullanıcı profilleri (her istekte okunuyordu ama o kadar sık güncelleniyordu ki kayıtlar neredeyse anında bayatlıyordu)
- Alışveriş sepeti (kullanıcıya özel, uçucu)
- Gerçek zamanlı stok sayıları
Sorun:
- Cache hit rate: %3
- İsteklerin %97'si: cache miss + yine de DB sorgusu
- Her istek Redis'e ağ gidiş-dönüşünü ödedi: ~2ms
- Artı serileştirme/ters serileştirme: ~5ms
- Net sonuç: neredeyse her istekte ~7ms saf ek yük — cache'siz halinden daha yavaş
Neyi cache'lemeliydik:
- Ürün kataloğu (okuma ağırlıklı, nadiren değişir)
- Kategori ağacı (statik)
- Feature flag'ler (global, nadiren değişir)
- Hesaplanmış toplamlar (hesaplaması pahalı)
Cache matematiği:
Benefit per request = (hit_rate × db_latency_saved) - cache_overhead
The overhead applies to every request.
The saving applies only to hits.
If benefit < 0, the cache is hurting you.
Düzeltilmiş sürüm:
- Uçucu veriyi cache'ten çıkardık
- Statik içeriği uzun TTL ile ekledik
- Hit rate: %3 → %85
- P50 gecikme: 150ms → 40ms
Ders: Okuma ağırlıklı, nadiren değişen veriyi cache'leyin. Yazma ağırlıklı, uçucu veriyi değil. Altyapı eklemeden önce istek yolunu profillemek, DevOps çalışmalarımızda yaptığımız ilk iştir — en ucuz cache, hiç ihtiyaç duymadığınız cache'tir.
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.