Yatay ölçekleme için oturum deposunu Redis'e taşıdık. Redis'in her restart'ında tüm kullanıcıların oturumunun kapandığını unuttuk.

Öncesi:

  • Oturumlar her sunucuda bellek-içi tutuluyordu
  • Load balancer üzerinden sticky session
  • Küçük ölçekte sorunsuz çalışıyor

Migrasyon:

  • Oturumlar Redis'te merkezileştirildi
  • Artık sticky session'a gerek yok
  • Yatay ölçekleme mümkün

Unuttuğumuz şey:

  • Redis varsayılan olarak bellek-içidir
  • Restart = tüm oturumlar gitti
  • 50.000 kullanıcının oturumu aynı anda kapandı
  • Destek talepleri: “Neden oturumum kapandı?”

Çözüm:

  • Redis kalıcılığı (RDB snapshot'ları + appendfsync everysec ile AOF) — bu, kayıp penceresini yaklaşık bir saniyelik yazmaya indirir; oturum kapanma olayını hafifletir, ortadan kaldırmaz
  • Otomatik failover'lı replikasyon (Redis Sentinel); böylece tek bir düğümün restart'ı artık oturum deposunun gitmesi anlamına gelmiyor
  • Login'de Redis oturumunun yanında imzalı bir JWT de üretmek — uygulamanın Redis'e erişilemediğinde stateless auth'a düşebilmesi, ancak her iki kimlik bilgisinin baştan var olmasıyla mümkün
  • Bakım pencerelerinde replica'lara karşı rolling restart; tek düğümün cold restart'ı asla

Oturum durumunun nerede yaşayacağına — ve o depo yeniden başladığında ne olacağına — karar vermek, bulut migrasyon projelerinde ele aldığımız ilk sorulardan biridir.

Ders: Bellek-içi depolama geçicidir. Verinin kaybı kullanıcıyı etkiliyorsa kalıcılığa ve yedekliliğe ihtiyacınız var.


← Çı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.