कई वेब सर्वरों में सत्र चिपचिपाहट कैसे प्राप्त की जाती है?


23

StackOverflow / ServerFault में कितने वेब सर्वर हैं?

यदि उत्तर 'एक से अधिक' है, तो क्या यह डीएनएस मतदान करते समय सत्र चिपचिपाहट को प्राप्त करता है ?


वास्तव में नहीं, लेकिन अगर इसे अलग तरह से चित्रित किया गया तो यह एक दिलचस्प सवाल बन सकता है।

आपको प्रश्न को फिर से लिखना चाहिए। शीर्षक को "कई वेब सर्वर पर सत्र चिपचिपाहट कैसे प्राप्त किया जाता है" में बदलें। या ऐसा ही कुछ ...
विलियम ब्रेंडेल

क्या आप मुझे सही वाक्यांश दिखाने के लिए एक एहसान कर सकते हैं?

1
यह धारणा कि एकाधिक सर्वर होने से चिपचिपा सत्र होता है - जो एक घृणा है - मुझे पीड़ा देता है।
Womble

जवाबों:


42

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

चुना गया तरीका नियोजित लोड संतुलन की शैली पर निर्भर करेगा, साथ ही बैकएंड भंडारण की उपलब्धता / क्षमता:

केवल कुकीज़ में संग्रहीत सत्र जानकारी : सत्र जानकारी (न केवल एक सत्र पहचानकर्ता) उपयोगकर्ता की कुकी में संग्रहीत होती है। उदाहरण के लिए, उपयोगकर्ता की कुकी में उनकी खरीदारी टोकरी की सामग्री हो सकती है। सत्र डेटा के साथ छेड़छाड़ करने वाले उपयोगकर्ताओं को रोकने के लिए, कुकी के साथ एक HMAC प्रदान किया जा सकता है। यह विधि संभवतः अधिकांश अनुप्रयोगों के लिए कम से कम उपयुक्त है:

  • बैकएंड स्टोरेज की आवश्यकता नहीं है
  • उपयोगकर्ता को हर बार एक ही मशीन को हिट करने की आवश्यकता नहीं होती है, इसलिए DNS लोड संतुलन को नियोजित किया जा सकता है
  • डेटाबेस मशीन से सत्र की जानकारी प्राप्त करने से जुड़ी कोई विलंबता नहीं है (क्योंकि यह HTTP अनुरोध के साथ प्रदान की गई है)। उपयोगी यदि आपकी साइट विभिन्न महाद्वीपों पर मशीनों द्वारा संतुलित लोड है।
  • सत्र में संग्रहीत किए जा सकने वाले डेटा की मात्रा सीमित है (4K कुकी आकार सीमा द्वारा)
  • यदि उपयोगकर्ता को अपने सत्र की सामग्री को देखने में सक्षम नहीं होना चाहिए, तो एन्क्रिप्शन को नियोजित करना होगा
  • सत्र डेटा की उपयोगकर्ता छेड़छाड़ को रोकने के लिए HMAC (या समान) को नियोजित किया जाना है
  • चूंकि सत्र डेटा सर्वर साइड संग्रहीत नहीं है, इसलिए डेवलपर्स के लिए डीबग करना अधिक कठिन है

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

  • एक मौजूदा एप्लिकेशन के सेशन हैंडलिंग को मल्टीपल मशीन अवेयर होने के लिए बदलने की आवश्यकता नहीं हो सकती है
  • किसी भी साझा डेटाबेस सिस्टम (या समान) को सत्रों के भंडारण के लिए आवश्यक नहीं है, संभवतः बढ़ती विश्वसनीयता, लेकिन जटिलता की कीमत पर
  • एक बैकएंड मशीन नीचे जा रही है, इसके साथ शुरू किए गए किसी भी उपयोगकर्ता सत्र को नीचे ले जाएगी।
  • मशीनों को सेवा से बाहर ले जाना अधिक कठिन है। मशीन बंद होने से पहले रखरखाव के लिए ले जाने के लिए मशीन पर सत्र वाले उपयोगकर्ताओं को अपने कार्यों को पूरा करने की अनुमति दी जानी चाहिए। इसका समर्थन करने के लिए, वेब लोड बैलेंसरों में एक निश्चित बैकएंड मशीन के लिए "नाली" अनुरोध करने की सुविधा हो सकती है।

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

  • उपयोगकर्ता को संग्रहीत सत्र जानकारी के लिए कभी भी उजागर नहीं होना चाहिए।
  • उपयोगकर्ता को हर बार एक ही मशीन को हिट करने की आवश्यकता नहीं होती है, इसलिए DNS लोड संतुलन को नियोजित किया जा सकता है
  • एक नुकसान वह अड़चन है जिसे बैकएंड स्टोरेज सिस्टम पर रखा जा सकता है।
  • सत्र जानकारी की समय-सीमा समाप्त हो सकती है और लगातार बैकअप ली जा सकती है।

कुल मिलाकर, अधिकांश डायनेमिक वेब एप्लिकेशन कई डेटाबेस क्वेरी या की / वैल्यू स्टोर रिक्वेस्ट करते हैं, इसलिए डेटाबेस या की / वैल्यू स्टोर सेशन डेटा का लॉजिकल स्टोरेज लोकेशन है।


2
+1 काफी व्यापक उत्तर और मुझे इसे लिखने से बचाता है। :) जहाँ तक db स्टोरेज जाता है, एक रिलेशनल डेटाबेस शायद गलत चीज़ है। लगातार याद किए गए कांटे में से एक की तरह कुछ बेहतर है। ज्ञापन उपयुक्त हो सकता है। आप सर्वर के बीच सत्र की जानकारी की नकल करने से भी चूक गए। यह सबसे अच्छा तरीका नहीं है, लेकिन टॉमकैट जैसी चीजें ऐसा करती हैं, इसलिए दस्तावेजीकरण के लायक है।
डेविड पशले

Google, Twitter या Facebook द्वारा किस दृष्टिकोण का उपयोग किया जाता है?
डैनीबॉय

1
Google, Twitter या Facebook के बारे में निश्चित नहीं है, लेकिन Redis एक सत्र की दुकान के लिए एक महान फिट है। इसकी मूल रूप से "लगातार याद" डेविड पशले 2009 में सिफारिश कर रहे थे, जब रेडिस भ्रूण था।
बेन आर

4

यदि आपका सवाल है कि कई फ्रंट-एंड वेब सर्वर पर सत्र कैसे बनाए रखा जाए, तो आमतौर पर उत्तर केंद्रीकृत डेटाबेस का उपयोग करना होता है। स्थानीय फ़ाइल सिस्टम पर सत्र फ़ाइलों को ट्रैक करने के लिए वेब सर्वर इंस्टेंसेस पर निर्भर होने के बजाय, आप सत्र आईडी और डेटा को केंद्रीय DB में लिखेंगे, और सभी वेब सर्वर इसके बजाय डेटा को पुनः प्राप्त करेंगे।


सेंटलाइज़ डेटाबेस का उल्लेख करने के लिए +1। बस उस विचार पर थोड़ा विस्तार / विस्तार करना। यदि आप किसी उपयोगकर्ता के पीसी पर एक कुकी सेट करते हैं, जैसे कि एक अद्वितीय उपयोगकर्ता आईडी, तो आप उस GUID को डेटाबेस में संग्रहीत कर सकते हैं। इससे कोई फर्क नहीं पड़ता कि कोई क्लाइंट किस सर्वर से जुड़ता है, जब तक उनके पास GUID / कुकी है, आप उन्हें डेटाबेस के खिलाफ देख पाएंगे और तदनुसार सत्र को ट्रैक कर सकते हैं।
KPWINC

2
एक रिलेशनल डेटाबेस में सत्रों को संग्रहीत करना हमेशा एक बुरा विचार है। आपको क्षणिक डेटा संग्रहीत करने के लिए डेटाबेस का उपयोग नहीं करना चाहिए।
डेविड पैस्ले

2

Nemcached का उपयोग करना एक अच्छा समाधान लगता है जैसा कि @David Pashley द्वारा उल्लेख नहीं किया गया है

इसका अर्थ है कि सभी सर्वरों द्वारा साझा किया गया रिमोट मेमकाटेड उदाहरण और मेकचे PECL एक्सटेंशन का उपयोग करके जो कि अपना सेशन हैंडलर प्रदान करता है।

यह केवल php विन्यास में दो मापदंडों को बदलने की आवश्यकता है!

यहाँ एक अच्छा ट्यूटोरियल है http://www.dotdeb.org/2008/08/25/storing-your-php-session-using-memcached/


लेकिन वहाँ कई datacenters क्या हैं?
डैनीबॉय


0

आप कुकी सेट कर सकते हैं।

आप दूरस्थ आईपी के एक हैश की गणना कर सकते हैं (इसके सरल, विषम संख्या वाले दूरस्थ होस्ट सर्वर ए पर जाते हैं, यहां तक ​​कि गिने हुए होस्ट सर्वर बी पर जाते हैं)।

ऐसा लगता है कि आप इसे कुछ मूल्यों के माध्यम से भी कर सकते हैं जो स्रोत प्रणाली के साथ रहते हैं यदि आप एक ssl सुरंग का उपयोग कर रहे हैं।

आमतौर पर उपरोक्त प्रत्येक तंत्र को "रिवर्स प्रॉक्सी" सर्वर या किसी प्रकार के लोड बैलेंसर की आवश्यकता होती है। वह लोड बैलेंसर ट्रैफ़िक को स्वीकार करता है और फिर इसे निर्देश देता है कि जो भी सर्वर शुरू में ऊपर के मानदंडों में से एक पर आधारित हो।

मुझे यकीन नहीं है, हालांकि, आप "डीएनएस मतदान" से क्या मतलब है


0

a) आप उपयोगकर्ता कुकी में सत्र जानकारी संग्रहीत कर सकते हैं। स्टेटलेस हार्ड कुकीज देखें, जो सर्वर साइड पर कोई डेटा संग्रहीत नहीं करता है, लेकिन सत्र स्थिति http://www.cl.cam.ac.uk/~sjm217/papers/protocols08cookies.pdf को संरक्षित करता है । बी) आप सत्र बैकएंड स्टोरेज को डेटाबेस या मेमकेच्ड में बदल सकते हैं। विफलता के एकल बिंदु को खत्म करने के लिए, आप डेटाबेस प्रतिकृति या कई मेमोडेड नोड्स सेट कर सकते हैं। ध्यान दें, इस तरह के सेटअप में मेमेकैच्ड की सिफारिश की जाती है, जहां सत्र में उपयोगकर्ता राज्य खोना बड़ी त्रुटि नहीं है और इससे वह बहुत दुखी नहीं होता है। ऐसे मामलों के लिए जहां संरक्षण महत्वपूर्ण है, डेटाबेस का उपयोग करें। दोनों PHP, Django और रेल डेवलपर को कस्टम सत्र बैकएंड लिखने की अनुमति देता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.