Oturum Deposunun Redis'e Taşınması
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.
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.