काम पर हम जावा और पर्ल में लगभग हर चीज करते हैं, लेकिन मैं PHP और सत्रों का उपयोग करके एक सुविधा बनाना चाहता था। कुछ झुंडों ने सोचा कि हमारे सिस्टम पर PHP सत्र करने का प्रयास करना एक बुरा विचार था, क्योंकि यह कई सर्वरों को वितरित किया गया है। विशिष्ट समस्या क्या होगी?क्या PHP सत्र एक वितरित सिस्टम में स्केल करना कठिन है?
उत्तर
आपके विशिष्ट प्रश्न का उत्तर, समस्या क्या होगी, इस तथ्य में निहित है कि डिफ़ॉल्ट रूप से PHP फाइलों को फाइल सिस्टम पर फाइलों में संग्रहीत करता है। एक वेबसर्वर सेवारत अनुरोधों के लिए, यह कोई समस्या नहीं है क्योंकि आपका सत्र डेटा हमेशा उपलब्ध रहेगा। लेकिन क्या होगा यदि आपके पास दो लोड-संतुलित वेबसर्वर अनुरोधों की सेवा कर रहे हों?
कल्पना के साथ पहला वेबसर्वर मारने की कल्पना करें, जो आपकी फ़ाइल फ़ाइल पर अपनी सत्र फ़ाइल बनाता है। फिर, आपका अगला अनुरोध दूसरे वेबसर्वर को हिट करता है। दूसरा वेबसर्वर निश्चित रूप से सत्र फ़ाइल नहीं देखेगा। उपयोगकर्ता के लिए, आप किसी वेबसाइट पर लॉग इन कर सकते हैं, और फिर अचानक लॉग आउट हो जाएं।
यह PHP के लिए विशिष्ट समस्या नहीं है, और यह बहुत आम है। समाधान कुछ सामान्य क्षेत्र में सत्र डेटा स्टोर करना है। इसके लिए सबसे आम तरीका सत्र डेटा को सभी वेब सर्वरों के लिए सुलभ डेटाबेस में संग्रहीत करना है, या कुछ साझा मेमोरी कैश सर्वर जैसे memcached।
कई सर्वरों (जिसे सत्र क्लस्टरिंग के रूप में भी जाना जाता है) में सत्र सत्र वेब अनुप्रयोगों को स्केल करने के लिए एक आम समस्या है, और यह PHP के लिए विशिष्ट नहीं है। PHP इसे संभालने के लिए कई समाधान प्रदान करता है, जैसे Zend Platform (वाणिज्यिक एप्लिकेशन सर्वर), और Msession (एक्सटेंशन)।
http://www.php.net/manual/en/function.session-set-save-handler.php
मैंने कभी यह प्रयास नहीं किया है, लेकिन इसके साथ आप को परिभाषित अपने खुद के बचाने के लिए, कार्यों पढ़ने/ताकि आप एक डेटाबेस लागू कर सकते हैं या:
तुम भी हैंडलर बचाने के लिए एक कस्टम सत्र इस्तेमाल कर सकते हैं किसी भी एक्सटेंशन को स्थापित करने की आवश्यकता के बिना एक साझा nfs बैकएंड।
इसके अलावा, @Eran Galperin द्वारा सुझाए गए मसेशन, मैंने पहले उल्लेख किए गए विकल्प के रूप में बहुत ही रोचक लग रहा है।
यह एक बढ़िया जवाब है, और मैं इस दृष्टिकोण का उपयोग किया जाएगा। धन्यवाद! – woody121
काफी अस्पष्ट सवाल है, लेकिन मैं कहूंगा कि समस्या उत्तर में उल्लिखित से बड़ी है। निश्चित रूप से आप कुकीज़ को लोड और सहेजने के तरीके को ओवरराइड कर सकते हैं, लेकिन इसके लिए भी एक लागत है। उदाहरण के लिए, आपको निम्नलिखित परिदृश्य/प्रश्नों पर विचार करना होगा:
- यदि आप कुकीज़ को किसी अन्य होस्ट पर डाल रहे हैं, तो यह आपकी कुकीज़ की गति को कैसे प्रभावित करेगा? यह स्पष्ट रूप से इस बात पर निर्भर करता है कि आप कितने लिखते हैं/पढ़ते हैं।
- क्या आप गति बढ़ाने या विफलता पाने के लिए ऐसा कर रहे हैं? जवाब निश्चित रूप से विभिन्न समाधानों का कारण बन जाएगा:
- यदि आप विफलता के लिए ऐसा कर रहे हैं, तो आप कैसे प्रबंधित करेंगे यदि आपका वेबसर्वर आपके सत्र स्टोर तक नहीं पहुंच सकता है क्योंकि नेटवर्क लिंक डाउन हो जाता है? क्या होगा यदि आपका सत्र स्टोर नीचे चला जाता है? आपको किसी भी प्रकार के मास्टर-मास्टर प्रतिकृति का उपयोग करके इसे हल करना होगा, संभवतः उसी मशीन पर वितरित सत्र स्टोर को अतिरिक्त उच्च उपलब्धता के लिए वेबसर्वर के रूप में चलाया जाना चाहिए (यदि सभी सत्र स्मृति में फिट हो सकते हैं)। Riak पर एक नज़र डालें या मास्टर-मास्टर प्रतिकृति के लिए समान देखें।
- यदि आप बस इसे गति के लिए कर रहे हैं, तो मैं क्लाइंट आईपी पते के आधार पर लोड संतुलन करने के लिए अपाचे, nginx या (सबसे तेज़) haproxy का उपयोग करूंगा। इस तरह आपको वितरित सत्र स्टोर स्थापित करने से परेशान नहीं होना पड़ेगा। निश्चित रूप से, यदि आपके PHP-उदाहरणों में से एक नीचे चला जाता है तो आपके उपयोगकर्ता अपनी कुकीज़ खो देंगे, लेकिन हो सकता है कि यह कोई समस्या न हो। यह आप पर निर्भर करता है।
सबसे आसान memcached या redis है।
यहाँकैसे redis में यह करने के लिए है - हम इसे इस समय का उपयोग कर रहे हैं: http://redis4you.com/articles.php?id=001&name=Redis+as+session+handler+in+PHP
- 1. क्लस्टर पर स्केल वितरित करना?
- 2. क्षैतिज रूप से स्केल किए गए वितरित सिस्टम
- 3. वितरित स्रोत नियंत्रण क्यों कठिन माना जाता है?
- 4. वितरित सिस्टम, सर्वोत्तम ढांचा?
- 5. लॉगिन सिस्टम (PHP) कुकीज़ और सत्र
- 6. जावा वितरित सिस्टम
- 7. किसी सत्र में स्टोर करना क्या है?
- 8. एक वितरित कुंजी-मूल्य लुकअप सिस्टम
- 9. क्या एक PHP सत्र उपनिर्देशिकाओं में काम करता है?
- 10. क्या मुझे अपने सिस्टम को शराब तैयार करने के रूप में वितरित करना शुरू करना चाहिए?
- 11. वितरित सिस्टम में सेमेन्टिक वेब का तर्क
- 12. 2 धागे या 1000 धागे सिंक्रनाइज़ करना क्या कठिन है?
- 13. PHP बिल्ड सिस्टम
- 14. कार्यात्मक भाषाओं में कौन सा एल्गोरिदम लागू करना कठिन है?
- 15. कुकीज़/सत्र लॉगिन सिस्टम
- 16. php में कुछ अच्छे वितरित कतार प्रबंधक क्या हैं?
- 17. PHP: सत्र
- 18. क्या यूआरएल में सत्र आईडी प्रदर्शित करना अच्छा अभ्यास है?
- 19. क्या कोई उपयोगकर्ता एक PHP सत्र संशोधित कर सकता है?
- 20. सुरक्षित PHP लॉगिन सिस्टम?
- 21. एक परियोजना बहुत कठिन है? आप क्या करते हैं?
- 22. मल्टीकोर या वितरित सिस्टम पर संकलन कार्यक्रम
- 23. एक वितरित node.js वेब सर्वर
- 24. PHP Jquery: चैट सिस्टम, इसके लिए आदर्श ढांचा क्या है?
- 25. PHP में सत्र और कुकी के बीच क्या अंतर है?
- 26. PHP लॉगिन सिस्टम
- 27. कितना कठिन एक मैट्रिक्स पूर्णांक [] []
- 28. एक ऐरे में सत्र $ डेटा कनवर्ट करना?
- 29. बड़े पैमाने पर वितरित सिस्टम में लॉग फ़ाइलें
- 30. क्या PHP सत्र में उपयोगकर्ता पासवर्ड स्टोर करना आम बात है?
जैसा कि @azkotoki नीचे उल्लेखित है, NAS- समर्थित एनएफएस माउंट जैसे साझा विभाजन भी अच्छी तरह से काम करता है। इसके बारे में अच्छी बात यह है कि इसमें कोड परिवर्तन शामिल नहीं हैं। बस स्थानीय सत्र निर्देशिका को एनएफएस में सिमलिंक करें। – gerard
लेकिन क्या होगा यदि डोमेन अलग डेटासेंटर में हैं? – Dannyboy