2009-10-12 18 views
42

Yüksek ölçeklendirilebilirliğe yönelik bir yaklaşım, birkaç sunucu arasında işlem yükünü bölmek için ağ yük dengelemesini kullanmaktır.Sabit Oturum/Oturum Affinity yük boşaltma stratejisi Artıları ve Eksileri?

Bu yaklaşımın sunduğu bir meydan okuma, sunucuların durumlarının farkında olmalarıdır - kullanıcı durumunu bir "oturumda" saklamaktır.

Bu soruna bir çözüm, her kullanıcının tek bir sunucuya atanmış olduğu "yapışkan oturum" (aka "oturum yakınlığı") ve durum verileri yalnızca sunucu süresince yalnızca o sunucuda bulunur.

"Yapışkan oturum" yaklaşımının artıları ve eksileri nelerdir? Kullanıyor musunuz ve eğer memnun iseniz?

cevap

60

Artıları:

  • hiçbir uygulama değişikliğine gerek easy-- bu kadar.
  • daha iyi yerel RAM önbelleklerini kullanır (örneğin bir kez kullanıcı profili, önbellek onu aramak ve aynı kullanıcıdan sonraki ziyaretlerde yeniden kullanabilirsiniz)

Eksileri:

  • eğer Sunucu azalır, oturum kaybolur. (Bu, oturum bilgisini web sunucusunda yerel olarak saklamak için bir konudur). Oturumda ne varsa kullanıcı için gerçekten önemli (örneğin bir taslak e-posta) veya siteye (örneğin bir alışveriş sepeti) sahipseniz, sunucularınızdan birini kaybetmek çok acı verebilir. Yük dengeleyicinizdeki "yapışkan" uygulamalara bağlı olarak,
  • yeni bir sunucuyu çevrimiçi duruma getirme, yeni sunucuyu çok sayıda yüke göndermez. Sivri uçlarla başa çıkmak için yük dengeleme sistemi, yapışkanlık hızlı bir şekilde başa çıkma yeteneğinizi yavaşlatabilir. Bununla birlikte, bu bir köşe davasıdır ve gerçekten sadece çok geniş ve sofistike siteler için geçerlidir.
  • göreceli olarak az kullanıcınız varsa, ancak tek bir kullanıcının trafiği bir sunucuyu (örneğin, SSL, AJAX, dinamik olarak oluşturulmuş görüntüler, dinamik sıkıştırma, vb. Karmaşık sayfalar) taklit edebilir, bu durumda yapışkanlar son kullanıcı yanıt süresine zarar verebilir. Tek bir kullanıcının yükünü sunucular arasında eşit olarak yaymıyoruz. Çok sayıda eşzamanlı kullanıcınız varsa, tüm sunucularınız bataklı olacağından bu bir sorun değil!

Ancak, sunucu yerel oturum durumunu kullanmanız gerekiyorsa, yapışkan oturumlar kesinlikle gitmek için bir yoldur - ve sunucu yerel oturum durumunu kullanmasanız bile, yapışkanlık önbellek kullanımı söz konusu olduğunda yarar sağlar (yukarıyı görmek). Yük dengeleyiciniz, yapışkanlığı belirlemek için HTTP tanımlama bilgilerine (yalnızca IP adresini değil) bakabilmelidir; çünkü IP adresleri tek bir oturum sırasında değişebilir (örn. Kablolu ve kablosuz ağ arasında bir dizüstü bilgisayarın takılması).

Daha da iyisi, web sunucusundaki oturum durumunu hiç kullanmayın! Oturum durumu kaybedecek kadar çok acı veriyorsa (ör. Alışveriş arabaları), merkezi bir veritabanında saklayın ve periyodik olarak eski oturumları temizleyin. Oturum durumu kritik değilse (ör. Kullanıcı adı/avatar URL'si), o zaman bunu bir çerez içine yapıştırın - sadece cookieye fazla veri yüklemediğinizden emin olun.

Rails'in modern sürümleri, varsayılan olarak, yukarıdaki nedenlerden dolayı oturum değişkenlerini bir çerezde saklar. Diğer web çerçeveleri bir "çerezde saklamak" ve/veya "DB'de sakla" seçeneğine sahip olabilir.

+1

İyi anwsers! Ayrıca, "Yük dengeleyiciniz HTTP çerezlerine bakabilmeli (sadece IP adresi değil)", daha ne demek istiyorsunuz? Yük dengeleyici aynı kullanıcı olup olmadığını nasıl anlayabilir? – Jaskey

+0

Web uygulamaları genellikle tanımlama bilgilerini istemciye gönderir, böylece istemci başka bir HTTP isteği için döndüğünde, sunucu aynı kullanıcıyı veya oturumu tanıyabilir. Bazı yük dengeleyicileri, kullanıcıyı tanımlamak için HTTP tanımlama bilgisi başlıklarının içine bakar ve hangi sunucunun bu isteği alması gerektiğini belirlemek için IP adresi yerine bu tanımlama bilgisi değerini kullanabilir. –

+0

Eğer durumu db/memcache'de saklarsam, uygulamanın vatansız olduğunu düşünebilirim, bazı insanlar vatansız bir uygulama yapmak için şunu söyleyecektir, müşteriyi devlette tutmak zorundayız. – Jaskey

İlgili konular