2009-07-29 23 views
16

Ölçeklendirilebilir http oturum yönetimi için en iyi uygulama var mı?Ölçeklenebilir http oturum yönetimi (java, linux)

Sorun alanı: senaryosunun

  • Alışveriş sepeti tür. Sitenin etrafındaki kullanıcı mağazaları, sonuçta check out; oturum korunmalıdır. Her bir veri merkezi
  • Java içinde
  • Çoklu veri merkezleri
  • Çoklu web sunucuları, Linux bunu yapmanın yollarından ton olduğunu biliyorum ve ben her zaman kendi özgül çözüm ile gelebilir

,

    : ama kalabalık StackOverflow'daki bilgeliği birkaç yaklaşım var gibi görünüyor bana en iyi uygulamaları Genelde

    odaklanmasına yardımcı olup olmadığını merak

  • Oturumları tutmayın; Her zaman vatansız olarak çalıştırın, dini olarak [benim için çalışmaz ...]
  • Oturumları kaydetmek için j2ee, ejb ve bu çetenin geri kalanını kullanın
  • . Bunu daha kolay hale getirmek için araçlar var, bu yüzden tek başıma el yapmak zorunda değilim.
  • Oturumları kaydetmek için memcached kullanın (veya başka bir tür ara, yarı kalıcı depolama alanı)
  • Anahtar değer DB'sini kullanın. memcached'den daha kalıcı "
  • " Oturum tarafı oturumları "nı kullanın, yani tüm oturum bilgileri gizli form alanlarında yaşar ve istemciden sunucuya iletilir. Sunucuda hiçbir şey saklanmaz.

Herhangi bir öneriniz var mı? Teşekkürler

cevap

5

Ben bazı standart dağıtılan önbellek çözümü ile gider. Sağlanan uygulama sunucunuz, memcached olabilir, terracotta olabilir Yeterince popüler bir şey kullandığınız sürece, hangisini seçtiğinizden çok önemli değil (bu yüzden hataların çoğunun zaten avlandığını biliyorsunuz) .Diğer fikirler gelince

:

  • oturumu bırakmayın
      - Mümkün değil dediğim gibi
    • İstemci Tarafı Oturum - çok güvensiz - Birisi alışveriş sepetindeki indirim fiyatları koymak için çerez kesmek varsayalım
    • Veritabanını kullan - veritabanları genellikle çözmek için en zor darboğazdır, kesinlikle daha fazla yere koymazsınız.

    olanlar

  • çoklu veri merkezleri ile ilgili olarak benim 2 sent :)

    vardır - Bunun üzerine başlatılan veri merkezine oturumun afinitesi olan isteyecektir. Farklı veri merkezleri arasında çalışabilen dağıtılmış önbellek için herhangi bir çözüm olduğunu düşünmüyorum.

    +0

    Bu çözüme yöneliyorum, bence. Sadece doğru yönde ilerliyorum doğrulamak istedim;) – Ran

    5

    Listenizden vanilla çoğaltılmış http oturumlarını kaçırmış görünüyorsunuz. Tuzuna değen herhangi bir sunucu kabı, kümedeki oturumların çoğaltılmasını destekler. Seansa koyduğunuz öğeler çok büyük olmadığından ve serileştirilebildiği sürece, çalışmasını sağlamak çok kolaydır.

    http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html

    düzenleme: Ancak, bu erkek kedi oturumu çoğaltma büyük kümeler için iyi ölçek değildir görünüyor. Bunun için, ben "dostum çoğaltma" fikrini verir JBoss + Tomcat kullanarak öneririm:

    http://www.jboss.org/community/wiki/BuddyReplicationandSessionData

    +0

    Tomcat 6.0, değil mi? – Ran

    +0

    Mevcut sürüm kadar, evet. JBoss, yerleşik bir Tomcat sürümü ile birlikte gelir. – skaffman

    1

    Ben şahsen bu tür kümeleri yönetmedim, ancak üniversitede bir J2EE dersi aldığımda, öğretim görevlisi bir veritabanında oturumları saklamak ve bunu önbelleğe almaya çalışmadığını söyledi. (Yine de dinamik sayfaları anlamlı bir şekilde önleyemezsiniz.) Http oturumları, tanım-tanımlama bir çerez olduğundan, tanımla istemci tarafıdır. Eğer müşteri çerezleri saklamayı reddederse (örneğin, izleme konusunda paranoyak), o zaman bir seansı olamaz. Bu kimliği HttpSession.getId() numaralı telefonu arayarak alabilirsiniz.

    Elbette veritabanı bir darboğazdır, bu yüzden iki küme ile sonuçlanırsınız: bir uygulama sunucusu kümesi ve bir veritabanı kümesi.

    olarak bildiğim kadarıyla, her iki durum bilgisi mesaj fasulye ve düzenli servlet http oturumları inşa yük dengeleme olmadan bellekte sadece mevcut. Btw

    . Gizli bir alanda e-posta adresi veya kullanıcı adları saklamıyordum, ancak belki de sepetin içeriği bu hassas veriler değil.

    1

    kullanıcı uygulama durumu'un bir HTTP oturumunda depolanmasından uzaklaşmayı tercih ederim, ancak uygulamanın nasıl çalıştığını ve RESTful durum bilgisi olmayan mimariyi nasıl kullandığını farklı bir şekilde düşünmek gerekir. Bu, normalde, istemci tarafında MVWW mimarilerini desteklemeyen tarayıcıların önceki sürümleri için desteğin kaldırılmasını içerir.

    alışveriş sepeti bunun bir veritabanında saklanan ve bu şekilde yönetilen olacağını anlamına gelir uygulama durumu bir kullanıcı uygulama durumu değildir. Arabayı paylaşmanın mümkün olduğunu varsayarak, kullanıcıyı bir veya birçok alışveriş sepetine bağlayan bir ilişki tablosu olabilir.

    En büyük engeliniz, eğer vatansız olursa, her istek için kullanıcının nasıl doğrulanacağı olacaktır. BASIC auth, oturumları içermeyen en basit yaklaşımdır, FORM-auth oturumları gerektirmeksizin gerektirir. JASPIC uygulaması (HTTP Başlıkları veya OAuth gibi) kimlik doğrulama sorunlarınızı başka bir yerde hafifletebilir, bu durumda kimlik doğrulama belirtecinizi (FORM-auth gibi) veya SiteMinder gibi HTTP üstbilgisini veya Apache ile İstemci Taraf Sertifikalarını yönetmek için bir çerez kullanılabilir .

    DB2 gibi daha pahalı veritabanları, birden fazla veri merkezinde çalışan Yüksek Kullanılabilirlik ve Olağanüstü Durum Kurtarma özelliklerine sahiptir. Ağ trafiği nedeniyle büyük bir etki yaratacağından, veritabanının yük dengelemesi için kullanılmadığını unutmayın.