2013-03-19 12 views
19

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

मेरा प्रश्न है: क्या इस प्रकार का वितरित दृष्टिकोण नोड.जेएस में संभव है?

मैं पहले से ही "क्लस्टर" मॉड्यूल के बारे में पढ़ता हूं, लेकिन, जो मैंने समझा, उससे ही यह एक ही मशीन पर मल्टीप्रोसेसरों पर स्केल लगता है।

+0

कृपया अधिक सावधानी से टैग करें। यह [टैग: क्लस्टर-विश्लेषण] नहीं था (उर्फ: क्लस्टरिंग; डेटा खनन तकनीक)। –

+0

MongoDB में शेडिंग को देखो - https://docs.mongodb.com/manual/sharding/ आप स्थान या किसी अन्य गुण, समय क्षेत्र, सामाजिक समूह या चैट रूम द्वारा शेड कर सकते हैं। –

उत्तर

29

हां यह संभव है।

यह नोडजेएस की संपत्ति नहीं है बल्कि आपके द्वारा आपके आवेदन के लिए डिज़ाइन किया गया आर्किटेक्चर है जो यह निर्धारित करेगा कि आप इसे कर सकते हैं या नहीं।

आपकी मुख्य समस्या हमेशा आपके उदाहरणों में राज्य साझा करना होगा, इसलिए कहें कि आपके पास 4 चैट सर्वर एबीसीडी हैं, और आपके पास लोडबैलेंसर एल है जो 4 सर्वरों में कनेक्शन फैलता है, फिर जब कोई नीचे जाता है, और आप सभी को पुनः कनेक्ट करते हैं शेष मामलों के लिए ए कनेक्शन, आप कैसे सुनिश्चित करते हैं कि चैटरूम की स्थिति बीसी और डी पर समान है?

एक तरीका यह है कि एप्लिकेशन कोड पूरी तरह से स्टेटलेस हो, और सभी डेटा को मेमोरी डीबी या रेडिस जैसे मेमोरी डेटाबेस में वितरित करने के लिए दबाएं। डेटाबेस डेटाबेस में से किसी एक के मामले में आप डेटाबेस को वितरित करना चाहते हैं।

अब आप अंतिम समस्या लोडबैंसर है। यदि यह नीचे चला जाता है, तो आपकी पूरी प्रणाली नीचे है।

तो एक लंबी कहानी कम करने के लिए; हां आप इसे कर सकते हैं, लेकिन आपको कुछ कठिन निर्णय लेने की जरूरत है जहां विफलता के संभावित बिंदु होने जा रहे हैं। यदि आप विफलता का कोई भी बिंदु नहीं चाहते हैं, तो आपको एक जटिल और महंगे सेटअप की आवश्यकता होगी।

+0

एकाधिक सर्वरों के बीच राज्य साझा करने का दूसरा तरीका क्या है, यदि रेडिस बाधा बन जाती है तो क्या होगा? –

+0

MongoDB में शेडिंग को देखें - https://docs.mongodb.com/manual/sharding/ आप स्थान या किसी अन्य गुण, समय क्षेत्र, सामाजिक समूह या चैट रूम द्वारा शेड कर सकते हैं। –

5

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

चैट के लिए विशेष रूप से, यदि आप अपने ग्राहक के रूप में सॉकेट.आईओ के साथ रेडिस का उपयोग करते हैं, तो जब भी आप लॉबी में प्रसारित करते हैं, तो उस लॉबी को उस संदेश को प्रसारित करने के लिए दृश्यों के पीछे लाल रंग का उपयोग किया जाएगा, लॉबी सदस्यों के एकाधिक पर मौजूद सर्वर। इसके अतिरिक्त, यह किसी अन्य स्तर की गलती सहनशीलता बनाता है क्योंकि कोई भी सर्वर सॉकेट रिकनेक्शन प्रबंधित कर सकता है, और socket.io स्वचालित रूप से एपीआई क्लस्टर से फिर से कनेक्ट हो जाएगा यदि कनेक्शन टूट गया है, तो रेडिस के माध्यम से राज्य को बनाए रखने के दौरान।

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