2010-09-03 52 views
5

के भीतर सत्र प्रबंधित करें मैं वितरित वेब एप्लिकेशन पर काम कर रहा हूं और हमने इसे और अधिक स्केलेबल बनाने के लिए व्यावसायिक सेवाओं से वेब मॉड्यूल को अलग करने का निर्णय लिया है।वितरित अनुप्रयोग

यहां स्थिति है: हमारे पास एक सर्वर उदाहरण है जो वेब अनुप्रयोग (नियंत्रक, जेएसपी, आदि) और व्यावसायिक सेवाओं के साथ कई सर्वर उदाहरण रखता है। यदि वेब एप्लिकेशन को किसी भी डेटा की आवश्यकता है तो यह किसी भी मौजूदा व्यापार सर्वर से हेसियन के माध्यम से पूछता है, फिर प्रतिक्रिया प्राप्त होती है और डेटा प्रदर्शित करती है।

वर्तमान में हम लॉग इन उपयोगकर्ता के आधार पर डीबी से डेटा पुनर्प्राप्त कर रहे हैं और इसे बदला नहीं जा सकता है, इसलिए प्रत्येक सर्वर को यह पता होना चाहिए कि किस उपयोगकर्ता ने नौकरी करने के लिए कहा था।

मेरा प्रश्न है: क्या आप कई स्वतंत्र अनुप्रयोगों में उपयोगकर्ता सत्र रखने के लिए समाधान जानते हैं?

उदाहरण के लिए समाधानों में से एक को प्रत्येक अनुरोध के साथ उपयोगकर्ता नाम भेज दिया जा सकता है लेकिन यह हमारे लिए बहुत अच्छा विचार नहीं है।

धन्यवाद एक बहुत

+0

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

उत्तर

2

इस समस्या के 2 तरीके हैं:

1) केंद्रीय memcached सर्वर

2 में सभी सत्र की जानकारी स्टोर) का उपयोग सत्र अवगत लोड संतुलन है, जो निर्देशित करेंगे एक ही उपयोगकर्ता को एक ही नोड्स के लिए।

+0

3) सभी सत्रों को एक मास्टर-मास्टर प्रतिकृति डेटाबेस में स्टोर करें जो प्रत्येक सत्र की कई प्रतिकृतियों का समर्थन करता है। इस तरह, आप फेलओवर होगा। इसके अलावा, यहां मेरा उत्साही उत्तर देखें जो आपको कुछ अंतर्दृष्टि दे सकता है: http://stackoverflow.com/a/8443896/260805 – Ztyx

4

किसी भी सर्वर से अपने सत्रों को स्टोर और पुनर्प्राप्त करने के लिए वितरित हैशटेबल का उपयोग करें। उदाहरण के लिए Hazelcast आज़माएं। यह खुला स्रोत और सुपर सरल है; नीचे नमूना देखें।

Map<String, Session> mapSessions = Hazelcast.getMap("sessions"); 
// session is created or updated so put it into the sessions map 
mapSessions.put(sessionId, session); 
// any server needing to access a session should just retrieve 
// it from the map. 
// Map is distributed/shared so any JVM running Hazelcast can 
// read the sessions. 
Session session = mapSessions.get(sessionId); 

हैज़लकास्ट सहकर्मी-सहकर्मी है। बस एक जार शामिल करें और अपने सत्र साझा करना शुरू करें।

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