2010-12-30 6 views
19

मेरे पास 3 टोमकैट सर्वर और लोड बैलेंसर होगा जो 'sticky sessions' का उपयोग किए बिना अनुरोध भेजता है।

मैं सर्वर के बीच सत्र का डेटा साझा करना चाहता हूं और मैं उन्हें डीबी में रखने में सोच रहा हूं। अनुरोधों को तेजी से और don't put my db under heavy load पर सेवा देने के लिए मैं अपने डीबी के सामने एक परत के रूप में memcached का उपयोग करना चाहता हूं।

मैं अपना कस्टमाइज्ड टॉमकैट प्रबंधक प्रदान करने में सोच रहा हूं जो डीबी को सत्र डेटा प्राप्त करने/जारी रखने से पहले memcached का उपयोग करता है, इस समय मुझे इसे करने का पारदर्शी तरीका नहीं दिखता है (इसका मतलब है कि मुझे इसे प्रबंधित करना होगा फिर मामले में मैं एक और ऐप सर्वर पर स्विच)।

क्या यह एक अच्छा समाधान है या आप बेहतर दृष्टिकोण देखते हैं?टॉमकैट उदाहरणों के बीच शेयर सत्र (चिपचिपा सत्रों का उपयोग किए बिना)

उत्तर

0

हम अपने आवेदन में एक समान काम करते हैं (वेबलॉगिक, लेकिन इससे कोई फर्क नहीं पड़ता), जहां हमारे पास ब्राउज़र में एक कुकी के रूप में संग्रहीत एक अद्वितीय सत्र कुंजी है। तब उस कुंजी का उपयोग प्रत्येक अनुरोध पर डेटाबेस से प्रासंगिक सत्र डेटा को पुनर्स्थापित करने के लिए किया जाएगा।

इस सिद्धांत का उपयोग करके, हम लोड बैलेंसर का उपयोग कर किसी भी सर्वर पर कुछ भी ध्यान देने के बिना हमेशा किसी अन्य सर्वर पर स्विच कर सकते हैं। इसके अलावा, हम उपयोगकर्ता के सत्र में कुछ भी प्रासंगिक रूप से स्टोर नहीं करते हैं और ब्राउज़र में बहुत से छिपे हुए फ़ील्ड के साथ काम करते हैं (लोड बैलेंसर यूआरएल एन्क्रिप्शन और फॉर्म-वैल्यू सुरक्षा का समर्थन करता है, इसलिए हम सुरक्षित तरफ हैं ...) ।

+0

@ लुकास एडर हमारे पास समान सेटअप है, अंतर यह है कि हम सत्र स्टोर के लिए मेमकैच का उपयोग करते हैं। – Nishant

+0

कुछ अनुप्रयोगों के लिए यह "कोई फर्क नहीं पड़ता" (यानी सत्र डेटा को तब तक संवेदनशील नहीं माना जा सकता है जब तक कि प्रमाणीकृत उपयोगकर्ता का संबंध नहीं है), लेकिन सैद्धांतिक रूप से शिपिंग "सत्र" डेटा को आगे और आगे - चाहे "छुपा" फ़ील्ड पाठ्यक्रम एचटीएमएल पेज पर कोई फ़ील्ड उपयोगकर्ता से वास्तव में छिपा हुआ नहीं है) या कुकीज़ के रूप में, जो इस उद्देश्य के लिए बने हैं - खराब अभ्यास है। जब तक ऐप के क्लाइंट साइड को इस डेटा की आवश्यकता न हो, तब तक इसे ब्राउज़र से अवगत नहीं किया जाना चाहिए। –

+1

@DanFarrell: छुपे हुए फ़ील्ड संवेदनशील डेटा नहीं थे, और फॉर्म-वैल्यू सुरक्षा ने इसे tweaked से रखा था। इसलिए मैं नहीं देखता कि यह कैसे खराब अभ्यास होगा, सुरक्षा-वार। बहुत सारे डाटा ट्रांसफर ओवरहेड थे, बेशक ... –

6

ऐप सर्वर (आपके मामले में टॉमकैट) के बाहर अपना सत्र स्थिति संग्रहीत करना, बड़े पैमाने पर वेबसाइटों के लिए एक बहुत ही आम और अनुशंसित कॉन्फ़िगरेशन है। यह आमतौर पर Shared Nothing नामक आर्किटेक्चर शैली की खोज में किया जाता है।

आप अपने राज्य को कई अलग-अलग स्थानों में स्टोर कर सकते हैं: डीबी, memcached, वाणिज्यिक प्रतिकृति कैश, आदि वे सभी व्यापार बंद के विभिन्न मिश्रणों के साथ काम करते हैं। व्यक्तिगत रूप से, मुझे memcached के साथ बड़ी सफलता मिली है। Memcached बेहद तेज़ और स्थिर है।

आम तौर पर, मैं सादगी का चयन करता हूं और एन memcache सर्वर का उपयोग करता हूं जहां एन> 1, कहते हैं 2. जैसे उपयोगकर्ता लॉग इन करते हैं, ऐप सर्वर यह तय करने के लिए एक सिक्का फ़्लिप करते हैं कि कौन सा सर्वर उपयोगकर्ता को संग्रहीत करता है। ब्राउजर को भेजी गई कुकी में यह जानने के लिए जानकारी शामिल है कि कौन से मेमकेचे सर्वर से आगे बढ़ने के लिए। ब्राउजर के बाद के अनुरोध प्रत्येक अनुरोध पर उपयुक्त memcache सर्वर से राज्य लाने के लिए। एक memcache सर्वर विफल होना चाहिए, उपयोगकर्ता को फिर से लॉगिन करना होगा क्योंकि ऐप सर्वर एक नए सर्वर को संशोधित करते हैं, लेकिन यह बेहद दुर्लभ है।

16

डेटाबेस में स्थायी सत्र आपकी स्केलेबिलिटी को सीमित करते हैं। यदि स्केलेबिलिटी आपके लिए यह महत्वपूर्ण नहीं है (डीबी + memcached) एक मान्य दृष्टिकोण है।

गैर-स्टिकी-सेशन का उपयोग करते समय आपको ध्यान में रखना एक बात है समवर्ती अनुरोध: जब आपके पास उदा। AJAX अनुरोध (समानांतर/समवर्ती रूप से निष्पादित) वे विभिन्न tomcats (गैर चिपचिपापन के कारण) द्वारा परोसा जाएगा और इसलिए समवर्ती सत्र का उपयोग करें। जब तक आपके समवर्ती अनुरोध हों, जो उस सत्र को संशोधित कर सकता है जिसे आपको किसी प्रकार के सिंक्रनाइज़ेशन/सत्र लॉकिंग को लागू करने की आवश्यकता है।

शायद यह आपके लिए रूचि है: मैंने memcached-session-manager दोनों इष्टतम प्रदर्शन और असीमित स्केलेबिलिटी के लक्ष्य के साथ बनाया है। यह किसी भी memcached- संगत बैकएंड (उदाहरण के लिए memcachedb, membase आदि या बस memcached) के साथ काम कर सकते हैं। हालांकि मूल रूप से चिपचिपा सत्र दृष्टिकोण के लिए बनाया गया था, लेकिन पहले से ही branch for nonsticky-sessions मौजूदा और sample app दिखा रहा है कि यह कैसे काम करता है। अभी thread on the mailing list on further improvements for nonsticky-sessions है (समवर्ती अनुरोधों को संभालने और एकल-बिंदु-विफलता को रोकने)।

+2

मैं सिर्फ एक नोट छोड़ना चाहता हूं कि मैं सिर्फ गैर-चिपचिपा सत्र समर्थन (और tomcat7 के लिए समर्थन) के साथ memcached-session-manager जारी करता हूं। गैर-चिपचिपा सत्रों के बारे में कुछ विवरणों के साथ घोषणा: http://groups.google.com/group/memcached-session-manager/t/612891b0ae10649d – MartinGrotzke

+0

AJAX अनुरोधों के बारे में बहुत अच्छी बात है। उसी प्रवाह के भीतर, सर्वर के लिए कई अनुरोध हो सकते हैं। – vsingh

संबंधित मुद्दे