2009-07-29 10 views
16

क्या स्केलेबल http सत्र प्रबंधन के लिए सबसे अच्छा अभ्यास है?स्केलेबल http सत्र प्रबंधन (जावा, लिनक्स)

समस्या अंतरिक्ष: उपयोग के मामले का

  • शॉपिंग कार्ट तरह। साइट के आसपास उपयोगकर्ता की दुकानें, अंततः जांच कर; सत्र संरक्षित किया जाना चाहिए।
  • प्रत्येक डाटा सेंटर
  • जावा में एकाधिक डेटा केंद्रों
  • एकाधिक वेब सर्वर, लिनक्स

मुझे पता है कि कर कई तरीके हैं, और मैं हमेशा अपने स्वयं के विशिष्ट समाधान के साथ आ सकते हैं, लेकिन मैं सोच रहा था कि क्या भीड़ के stackoverflow का ज्ञान कुछ दृष्टिकोण होने लगते मदद कर सकते हैं मुझे सर्वोत्तम प्रथाओं

सामान्य में पर ध्यान केंद्रित:

  • सत्र न रखें; हमेशा स्टेटलेस, धार्मिक रूप से चलाएं [मेरे लिए काम नहीं करता ...]
  • j2ee, ejb और शेष गैंग
  • सत्रों को संग्रहीत करने के लिए डेटाबेस का उपयोग करें। मैं वहाँ बनाने के लिए है कि आसान इसलिए मैं सभी अपने आप से भंडारण सत्र (या मध्यवर्ती, अर्द्ध स्थायी भंडारण के अन्य प्रकार)
  • उपयोग मुख्य मान DB के लिए memcached
  • उपयोग शिल्प के लिए की जरूरत नहीं है उपकरण हैं लगता है। "और अधिक लगातार" से memcached
  • उपयोग "ग्राहक के पक्ष सत्र", सभी सत्र की जानकारी अर्थ छिपा प्रपत्र फ़ील्ड्स में रहता है, और आगे और पीछे क्लाइंट से सर्वर से पारित कर दिया। सर्वर पर कुछ भी संग्रहीत नहीं है।

कोई सुझाव? धन्यवाद

उत्तर

5

मैं कुछ मानक वितरित कैश समाधान के साथ जाना होगा। आपके आवेदन प्रदान की सर्वर, memcached किया जा सकता है हो सकता है, हो सकता है terracotta शायद बात बहुत ज्यादा है जो एक आप चुनते हैं, जब तक आप कुछ पर्याप्त रूप से लोकप्रिय प्रयोग कर रहे हैं के रूप में नहीं है (ताकि आप जानते हैं कि कीड़े के सबसे पहले से ही शिकार कर रहे हैं) ।

अपने अन्य विचारों के लिए के रूप में:

  • सत्र न होने दें - के रूप में आप संभव नहीं कहा
  • क्लाइंट साइड सत्र - भी असुरक्षित - मान लीजिए किसी कुकी हैक करता खरीदारी की टोकरी में छूट की कीमतों डाल करने के लिए
  • उपयोग डेटाबेस - डेटाबेस आमतौर पर हल करने के लिए सबसे मुश्किल टोंटी हैं, वहाँ किसी भी अधिक डाल नहीं की तुलना में आप पूरी तरह करना है।

उन मेरी 2 सेंट :)

एकाधिक डेटा केंद्रों के बारे में कर रहे हैं - आप डेटा सेंटर उस पर शुरू करने के लिए सत्र के कुछ संबंध चाहते हैं। मुझे नहीं लगता कि वितरित कैश के लिए कोई समाधान है जो विभिन्न डेटा केंद्रों के बीच काम कर सकता है।

+0

मैं इस समाधान की ओर झुका रहा हूं, मुझे लगता है। बस सत्यापित करना चाहता था कि मैं सही दिशा में जा रहा हूं;) – Ran

5

आप अपनी सूची में से वेनिला दोहराया http सत्र में चूक गए लगते हैं। इसके नमक के किसी भी सर्वलेट कंटेनर क्लस्टर में सत्रों की प्रतिकृति का समर्थन करता है। जब तक आइटम आप सत्र में डाल बड़ा नहीं हैं, और serializable हैं, तो यह यह काम करने के लिए बहुत आसान है।

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

संपादित करें: ऐसा लगता है, तथापि, कि बिल्ला सत्र प्रतिकृति अच्छी तरह से बड़े समूहों के लिए पैमाने पर नहीं है। उसके लिए, मैं JBoss + बिलाव, जो "साथी प्रतिकृति" का विचार देता है का उपयोग करते हुए सुझाव है:

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

+0

बिलाव 6.0, है ना? – Ran

+0

जितना अधिक मौजूदा संस्करण है, हां। जेबॉस जहाजों को टॉमकैट के एक एम्बेडेड संस्करण के साथ। – skaffman

1

मैं व्यक्तिगत रूप से इस तरह के समूहों में कामयाब नहीं किया है, लेकिन जब मैं विश्वविद्यालय में एक J2EE पाठ्यक्रम ले लिया व्याख्याता एक डेटाबेस में दुकान सत्र से कहा और यह कैश करने के लिए कोशिश मत करो। (आप वैसे भी गतिशील पृष्ठों को कैश नहीं कर सकते हैं।) एचटीपी सत्र परिभाषा के अनुसार क्लाइंट-साइड हैं, क्योंकि सत्र-आईडी एक कुकी है। यदि ग्राहक कुकीज स्टोर करने से इंकार कर देता है (उदा। वह ट्रैकिंग के बारे में पागल है), तो उसके पास सत्र नहीं हो सकता है। आप HttpSession.getId() पर कॉल करके यह आईडी प्राप्त कर सकते हैं। एक आवेदन सर्वर क्लस्टर और एक डेटाबेस क्लस्टर: तो तुम दो समूहों के साथ खत्म हो जाएगा

पाठ्यक्रम डेटाबेस के

, एक टोंटी है।

जहाँ तक मुझे पता है, दोनों स्टेटफुल संदेश सेम और नियमित रूप से सर्वलेट http सत्र केवल स्मृति में में बनाया लोड संतुलन के बिना अस्तित्व।

Btw। मैं एक छिपे हुए क्षेत्र में ई-मेल पता या उपयोगकर्ता नाम स्टोर नहीं करता, लेकिन शायद कार्ट की सामग्री उस संवेदनशील डेटा नहीं है।

1

मैं HTTP सत्र में उपयोगकर्ता एप्लिकेशन स्थिति को संग्रहीत करने से दूर चलेगा, लेकिन इसके बारे में सोचने का एक अलग तरीका होगा कि एप्लिकेशन कैसे काम करता है और एक स्थाई स्टेटलेस आर्किटेक्चर का उपयोग करता है। इसमें आमतौर पर ब्राउज़र के पुराने संस्करणों के लिए समर्थन छोड़ना शामिल होता है जो क्लाइंट साइड पर एमवीडब्ल्यूडब्ल्यू आर्किटेक्चर का समर्थन नहीं करते हैं।

खरीदारी की टोकरी एक उपयोगकर्ता आवेदन राज्य यह एक आवेदन राज्य जो इसे एक डेटाबेस पर संग्रहीत और इस तरह के रूप में कामयाब हो जाएगा मतलब है नहीं है। एक एसोसिएशन टेबल हो सकती है जो उपयोगकर्ता को एक या कई शॉपिंग कार्ट से लिंक करेगी जो मानते हैं कि गाड़ियां साझा करना संभव है।

आपकी सबसे बड़ी बाधा होने की संभावना हर अनुरोध के लिए उपयोगकर्ता को प्रमाणित करने के लिए कैसे अगर यह राज्यविहीन है किया जाएगा। बेसिक ऑथ सबसे सरल दृष्टिकोण है जिसमें सत्र शामिल नहीं होते हैं, FORM-auth को बिना किसी सत्र की आवश्यकता होगी। एक जेएएसपीआईसी कार्यान्वयन (जैसे HTTP हेडर या ओएथ) आपकी प्रमाणीकरण चिंताओं को कहीं और कम करने में सक्षम होंगे, इस मामले में एक कुकी का उपयोग आपके प्रमाणीकरण टोकन (जैसे FORM-auth) या HTTP शीर्षलेख जैसे साइटमाइंडर या क्लाइंट साइड सर्टिफिकेट को अपाचे के साथ प्रबंधित करने के लिए किया जा सकता है ।

डीबी 2 की तरह और अधिक महंगा डेटाबेस उच्च उपलब्धता और आपदा राहत सुविधाओं है कि एकाधिक डेटा केंद्रों में काम किया है। ध्यान दें कि यह डेटाबेस को संतुलित करने के लिए नहीं है, क्योंकि नेटवर्क यातायात के कारण एक बड़ा प्रभाव होगा।