मेरी टीम वर्तमान में हमारी कंपनी (Amilia.com) के लिए एक नया सास एप्लिकेशन बना रही है। हम "अल्फा" रिलीज में हैं और एप्लिकेशन को वेब फार्म पर तैनात करने के लिए बनाया गया था।एएसपी.नेट एमवीसी सत्र राज्य राज्य विभाजन, मोंगोडीबी या मेमकैच या ... का उपयोग कर?
हमारे सत्र प्रदाता के लिए, हम एसक्यूएल सर्वर मोड (डीवी और टेस्ट में) का उपयोग कर रहे हैं और ऐसा लगता है कि यह "स्केलेबल" नहीं है, इसलिए हम एएसपीनेट में सत्रों को संभालने के लिए सबसे अच्छा समाधान ढूंढ रहे हैं (एमवीसी 3 हमारे मामला)। हम वर्तमान में एसक्यूएल सर्वर का उपयोग कर रहे हैं लेकिन हम लाइसेंस लागत के कारण किसी अन्य प्रणाली पर स्विच करना चाहते हैं।
हम समवर्ती उपयोगकर्ताओं के 20 000 [संपादित, 100k पहले] लक्षित करते हैं। सत्र में, हम एक GUID, एक स्ट्रिंग और कार्ट ऑब्जेक्ट स्टोर करते हैं (हम इसे जितना संभव हो उतना छोटा रखने की कोशिश करते हैं, यह ऑब्जेक्ट हमें प्रत्येक अनुरोध पर 3 प्रश्नों को सहेजने की अनुमति देता है)। हमारे मामले (सफाया)
में प्रोक मोड में असंभव:
ASP.NET में निर्मित समाधान:
कोई सत्र
यहां विभिन्न समाधान मैंने पाया हैं कर सकते हैं एक वेबफर्म में इस्तेमाल नहीं किया जाएगा। (समाप्त)
स्टेटसर्वर मोड: वेबफर्म में उपयोग किया जा सकता है लेकिन यदि सर्वर नीचे चला जाता है, तो मैं अपने सभी सत्र खो देता हूं। (हटाया गया)
एकाधिक सर्वर (http://msdn.microsoft.com/en-ca/magazine/cc163730.aspx#S8) का उपयोग करके विभाजन सर्वर के साथ स्टेटसर्वर मोड (यदि मैं इन सर्वरों में से कोई एक नीचे जाता हूं, तो मेरे उपयोगकर्ताओं का केवल एक हिस्सा ही अपना सत्र खो देगा।
एसक्यूएल सर्वर मोड: यदि सर्वर नीचे चला जाता है, तो वेबफर्म में उपयोग किया जा सकता है, मैं अपने सत्र पुनर्प्राप्त कर सकता हूं लेकिन प्रक्रिया काफी धीमी है। इसके अलावा, भारी भार के मामले में वह डेटाबेस एक बाधा बन जाता है।
एकाधिक सर्वर (http://www.bulletproofideas.net/2011/01/true-scale-out-model-for-aspnet-session.html) का उपयोग करके विभाजन विभाजन के साथ एसक्यूएल सर्वर मोड: यदि इनमें से कोई एक सर्वर नीचे चला जाता है, तो मेरे उपयोगकर्ताओं का केवल एक हिस्सा ही अपना सत्र खो देगा। यदि उपयोगकर्ता डाउनटाइम के बीच कुछ भी नहीं कर रहा था, तो वह अपने पिछले सत्र को पुनर्प्राप्त करेगा अन्यथा उसे साइनइन स्क्रीन पर रीडायरेक्ट कर दिया जाएगा।
कस्टम समाधान:
उपयोग सत्र भंडारण (http://www.adathedev.co.uk/2011/05/mongodb-aspnet-session-state-store.html) के रूप में MongoDB यह एक अच्छा तालमेल हो रहा है लेकिन NoSQL में मेरी जानकारी काफी अल्पविकसित है तो मैं विपक्ष नहीं देख सकता।
मेमकैड का उपयोग करें: समस्या स्टेटसर्वर मोड के समान होगी और यदि memcached सर्वर नीचे चला जाता है, तो मेरे सभी सत्र खो जाते हैं। इसके अलावा, मुझे लगता है कि मेमकैड सत्र सत्र को स्टोर करने के लिए समर्पित नहीं है?
स्केलऑट (http://highscalability.com/product-scaleout-stateserver-memcached-steroids) जैसे वितरित memcached का उपयोग करें: सबसे अच्छा समाधान प्रतीत होता है लेकिन यह पैसे खर्च करता है।
repcached और memcached (http://repcached.lab.klab.org/) का उपयोग करें, मैंने कभी भी उस समाधान के कार्यान्वयन को नहीं देखा है।
हम आसानी से एमएस एज़ूर में जा सकते हैं और इसके द्वारा प्रदान किए गए टूल का उपयोग कर सकते हैं, लेकिन हमारे पास केवल एक ही एप्लीकेशन है, इसलिए यदि माइक्रोसॉफ्ट कीमत को दोगुना करता है, तो हम तुरंत अपनी बुनियादी ढांचा लागत को दोगुना करते हैं (लेकिन यह एक और विषय है)।
तो, सबसे अच्छा तरीका क्या है या कम से कम इस बारे में आपकी राय क्या है?
उत्तर के लिए धन्यवाद, बहुत रोचक। वास्तव में, हम अगले 2 वर्षों के लिए हमारे प्लेटफार्म के लिए 5000 ग्राहकों को लक्षित करते हैं, प्रत्येक ग्राहक के पास लगभग 300 उपयोगकर्ता हैं। प्रत्येक ग्राहक के लिए, हम एक पंजीकरण मंच प्रदान करते हैं, पंजीकरण अवधि आम तौर पर हमारे सभी ग्राहकों (=> peeks) के लिए एक ही समय में होती है।चूंकि बेची गई वस्तुओं को 5 मिनट से भी कम समय में चलाया जाता है, इसलिए "समवर्ती उपयोगकर्ताओं" की संख्या का आकलन करना मुश्किल होता है। आपको पढ़कर, शायद मैंने अपने लक्ष्य को अधिक महत्व दिया। 20K समवर्ती उपयोगकर्ताओं को लक्षित करना अधिक उचित लगता है। सत्रों के लिए, मेमकैड के साथ सत्र स्टोर करना बुरा लगता है। – dervlap
बहुत विस्तृत और सूचनात्मक उत्तर! – ljubomir