Redis ile oturumları saklamak ne kadar güvenli?


95

Şu anda oturumlarımı saklamak için MySql kullanıyorum. Harika çalışıyor, ama biraz yavaş.

Redis'i kullanmam istendi, ancak bunun iyi bir fikir olup olmadığını merak ediyorum çünkü Redis'in yazma işlemlerini geciktirdiğini duydum. Biraz korkuyorum çünkü seansların gerçek zamanlı olması gerekiyor.

Böyle sorunlar yaşayan var mı?


1
Redis, isteğe bağlı dayanıklılığa sahip olduğunu söylediği için, HDD'de kalıcılığı seçerseniz kullanmanın güvenli olduğunu söyleyebilirim. Ancak, oturum verileri için - onları kesinlikle RAM'e kaydederdim (bu, tüm sıkıntıların dayanıklılık kısmı hakkında endişelenmeyeceğim anlamına gelir). Oturum verilerini kaybetmeniz durumunda olması gereken en kötü şey, kullanıcılarınızın oturumu kapatmasıdır.
NB

1
evet, ancak bu gereksinimin bir parçası, kullanıcıların oturum açmadıkları halde (konuk kullanıcılar) oturum boyunca bazı kullanıcı verilerinin saklanması bu şekilde kullanıcıların tekrar oturum açması gerekmemelidir. Redis RAM'e gidecekler, ancak günlük kaydı ve / veya yedekleme etkinken. Bazı seansları kaybedersek kabul edilebilir.
Trent

1
Benim asıl endişelerim, gecikmeli yazma, bir kullanıcı oturum açarsa ve oturum gecikmeli olarak yazılırsa ne olacağı, yönlendirilecek ancak oturum
Trent

2
Bir e-ticaret sitesi hayal edin, oturum kaybedilirse, mevcut alışveriş sepeti de kaybolur, bu korkunç değildir, ancak bu kullanıcılar için tuhaf olabilir. Misafir kullanıcılar yalnızca bir oturumla tanımlanır, bu nedenle sepetlerini kurtarmanın bir yolu yoktur.
Boris Guéry

1
@ BorisGuéry - buna katılmadığımdan değil, ancak performansı artırmak gerekirse - bir şeyler ters gittiğinde tavizler verilmelidir. Evet, kullanıcıların aniden çıkış yapması garip olacak, bu kesin - ama soru bunun ne sıklıkla gerçekleşmesi bekleniyor? Yılda bir veya iki kez tüm Redis düğümlerinin devre dışı kalması durumunda, kümenin tamamı kullanılamadığında birkaç izole durumda performansı düşürmek için bir neden göremiyorum. Ama bu sadece benim.
NB

Yanıtlar:


150

Redis, oturumları saklamak için mükemmeldir. Tüm işlemler bellekte gerçekleştirilir ve bu nedenle okuma ve yazma işlemleri hızlı olacaktır.

İkinci yön, oturum durumunun sürekliliğidir. Redis, sabit diskinizde oturum durumunu nasıl sürdürmek istediğiniz konusunda size büyük bir esneklik sağlar. Daha fazla bilgi edinmek için http://redis.io/topics/persistence sayfasından geçebilirsiniz , ancak yüksek düzeyde seçenekleriniz aşağıdadır -

  1. Herhangi bir oturumu kaybetmeyi göze alamazsanız appendfsync always, yapılandırma dosyanızda ayarlayın. Bununla Redis, herhangi bir yazma işleminin diske kaydedilmesini garanti eder. Dezavantajı, yazma işlemlerinin daha yavaş olmasıdır.
  2. Yaklaşık 1 saniyelik veriyi kaybetmekte sorun yaşamıyorsanız, kullanın appendfsync everysec. Bu, makul veri garantileriyle mükemmel performans sağlayacaktır.

14

Temel olarak iki ana tür mevcuttur: eşzamansız anlık notlar ve fsync(). Sırasıyla RDB ve AOF olarak adlandırılırlar. Kalıcılık modları hakkında daha fazla bilgiyi resmi sayfada bulabilirsiniz .

Daemonize edilmiş işlemin sinyal işleme, örneğin bir SIGTERM aldığında disk ile senkronize olur, böylece veriler yeniden başlatıldıktan sonra hala orada olacaktır. Varsayılan ayarlarla (RDB anlık görüntüleri) bile bir bütünlük bozulması görmeden önce arka plan programının veya işletim sisteminin çökmesi gerektiğini düşünüyorum.

AOF ayarı, sunucunun aldığı komutları günlüğe kaydeden ve kaydedilen dosyadan soğuk başlatma sırasında DB'yi sıfırdan yeniden oluşturan bir Yalnızca Ekleme Dosyası kullanır. Varsayılan disk senkronizasyon politikası, saniyede bir yıkamaktır (IIRC), ancak her komutu kilitlemek ve yazmak üzere ayarlanabilir.

Hem anlık görüntülerin hem de artımlı günlüğün kullanılması, hem daha güvenli, ancak maliyetli artımlı bir günlükle birkaç saniye veri kaçırırsam aldırmama yaklaşımı sunuyor gibi görünüyor . Redis, kutunun dışında kümelemeyi destekler, bu nedenle çoğaltma da yapılabilir gibi görünüyor.

Varsayılan RDB ayarını kendim kullanıyorum ve anlık görüntüleri uzak FTP'ye kaydediyorum. Henüz veri kaybına neden olan bir arıza görmedim. Akut donanım arızası veya elektrik kesintileri büyük olasılıkla olurdu, ancak bir VPS'de barındırılıyorum. Bunun olma ihtimali çok düşük :)


13

Bu soru gerçekten gerçek zamanlı oturumlarla ilgilidir ve kısmen 'gecikmeli yazma işlemleri' ifadesinin yanlış anlaşılmasından kaynaklanmış gibi görünüyor. Ayrıntılar sonunda yorumlarda alay edilirken, ben sadece onu daha net hale getirmek istedim. ..

Gerçek zamanlı oturumları uygularken hiçbir sorun yaşamayacaksınız.

Redis, isteğe bağlı disk kalıcılığına sahip bir bellek içi anahtar-değer deposudur. 'Gecikmeli yazma işlemleri' , bellekte bulunan genel olarak veritabanına değil, diske yazma işlemlerini ifade eder . Bir anahtar / değer çifti ayarlarsanız, hemen (yani gerçek zamanlı olarak) ALABİLİRSİNİZ. Kalıcılıkla ilgili olarak seçtiğiniz politika (yazma işlemlerini ne kadar geciktirdiğiniz), bir çökme durumunda ne kadar veri kaybedilebileceğinin üst sınırını belirleyecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.