“maxmemory-policy noeviction” güvenli görünüyordu. Veri kaybı yok, değil mi?

Ne oldu:

  • Redis maxmemory limitine ulaştı
  • noeviction politikası: Redis ayakta kaldı ama her yazmayı “OOM command not allowed when used memory > 'maxmemory'” hatasıyla reddetti — çökme yok, yalnızca retler
  • Uygulama yeni cache kayıtları yazamadı
  • Ama oturum verisini de yazamadı
  • Kullanıcılar işlemin ortasında oturumdan düştü
  • Ödeme hataları %400 arttı

Asıl sorun:

Harcanabilir cache'i VE kritik oturum verisini aynı Redis instance'ında, aynı eviction politikasıyla saklıyorduk. Her iki politika seçimi de iş yüklerinden birini feda eder: eviction canlı oturumları çöpe atar, noeviction cache'i bloklar. (Redis'teki oturumların kendi operasyonel kurallarına ihtiyaç duyduğunu zaten acı yoldan öğrenmiştik.)

Çözüm:

  • Cache ve oturumlar için ayrı Redis instance'ları
  • Cache: allkeys-lru (dolunca en eskiyi tahliye et)
  • Oturumlar: noeviction + agresif TTL'ler + izleme
  • Bellek %80'e ulaştığında alarm

Ders: Eviction politikanız verinizin önemiyle eşleşmeli. Harcanabilir cache ve kritik oturumlar farklı stratejiler gerektirir.


← Çıkarılan Dersler'e dön

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.