2012-11-03 25 views
15

मैं एरलांग का उपयोग करके क्लस्टर को लागू करने की कोशिश कर रहा हूं क्योंकि यह सब एक साथ रखता है। मुझे यह विचार पसंद है कि यह नोड्स का एक पूरी तरह से जुड़ा हुआ ग्राफ बनाता है, लेकिन ऑनलाइन विभिन्न लेख पढ़ने पर, ऐसा लगता है कि यह अच्छी तरह से स्केल नहीं करता है (अधिकतम 50 - 100 नोड्स)। क्या ओटीपी के डेवलपर्स ने इस सीमा को उद्देश्य पर लगाया? मुझे पता है कि आप नोड्स को केवल स्पष्ट कनेक्शन के साथ ही छुपा नोड्स आदि के लिए सेट अप कर सकते हैं, लेकिन ऐसा लगता है कि डिफॉल्ट आउट ऑफ़ द बॉक्स सेटअप बहुत स्केलेबल नहीं है।एरलांग क्लस्टर

तो सवाल:

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

  2. यदि कोई स्केलेबल और गलती सहनशील प्रणाली के लिए प्रयास करना और जाना था, तो आपके विकल्प क्या हैं? ऐसा लगता है कि, यदि आप पूरी तरह से जुड़े ग्राफ नहीं बना सकते हैं क्योंकि आपके पास बहुत सारे नोड्स हैं, तो अगली सबसे अच्छी बात किसी प्रकार का पेड़ बनाना होगा। लेकिन, यह बहुत गलती-सहनशील प्रतीत नहीं होता है क्योंकि अगर बच्चों या नोड्स के किसी भी माता-पिता की मृत्यु हो जाती है, तो आप अपने क्लस्टर का एक महत्वपूर्ण हिस्सा खो देंगे।

  3. पर्यवेक्षकों और श्रमिकों की तलाश में, मैंने देखा है कि सभी उदाहरण एक नोड पर प्रक्रियाओं पर लागू होते हैं। क्या यह गलती सहनशीलता को लागू करने में मदद के लिए नोड्स के समूह पर लागू किया जा सकता है?

  4. क्या नोड कई क्लस्टर का हिस्सा बन सकते हैं?

आपकी मदद के लिए धन्यवाद, अगर वहाँ एक अर्द्ध हाल वेबसाइट या ब्लॉग पोस्ट (लगभग 1 साल की उम्र) है कि मैं याद किया गया है, मैं उन को देखने के लिए खुशी होगी। लेकिन, मैंने इंटरनेट को बहुत अच्छी तरह से खराब कर दिया है।

+0

संबंधित प्रश्न: http://stackoverflow.com/questions/5044574/how-scalable-is-distributed-erlang? – Tilman

+0

क्या आपने क्लाउडआई में देखा है: http://cloudi.org/ – Tilman

उत्तर

11
  1. हाँ, आप संदेशों को एक प्रक्रिया के लिए किसी भी दूरस्थ नोड पर एक क्लस्टर में, उदाहरण के लिए, अपनी प्रक्रिया पहचानकर्ता (पीआईडी) का उपयोग करके भेज सकते हैं। इसे स्थान पारदर्शिता कहा जाता है। और हाँ, यह अच्छी तरह से स्केल करता है (Riak, CouchDB, RabbitMQ, आदि देखें)।

  2. ध्यान दें कि एक नोड सौ हजार प्रक्रियाएं चला सकता है। Erlang बहुत स्केलेबल साबित हुआ है और गलती सहनशीलता के लिए बनाया गया था। बड़ा बनाने के लिए अन्य दृष्टिकोण हैं, उदा। क्लाउडआई के एसओए दृष्टिकोण (टिप्पणियां देखें)। आप क्लस्टर भी बना सकते हैं जो hidden nodes का उपयोग करते हैं यदि आप वास्तव में वास्तव में की आवश्यकता है।

  3. नोड स्तर पर आप एक अलग दृष्टिकोण लेंगे, उदाहरण के लिए, समान नोड्स बनाएं जो कि विफल होने पर आसान हो जाएं और शेष नोड्स द्वारा कार्य किया जाता है। देखें कि रीक इसे कैसे संभालता है (riak_core देखें और ब्लॉग पोस्ट Introducing Riak Core देखें)।

  4. नोड्स एक क्लस्टर छोड़कर प्रवेश कर सकते हैं लेकिन एक ही समय में कई क्लस्टर का हिस्सा नहीं हो सकते हैं। कनेक्टेड नोड्स एक क्लस्टर कुकी साझा करते हैं जिसका उपयोग कनेक्टेड नोड्स की पहचान के लिए किया जाता है। वीएम चल रहा है, जबकि आप कुकी सेट कर सकते हैं (Distributed Erlang देखें)।

http://learnyousomeerlang.com/ अधिक अच्छे के लिए पढ़ें।

+0

क्यों डाउनवोट? कृपया टिप्पणी करें। – Tilman

7

वितरण प्रोटोकॉल मजबूती प्रदान करने के बारे में है, स्केलेबिलिटी नहीं। आप अपने क्लस्टर को छोटे क्षेत्रों में समूहित करना चाहते हैं और फिर कनेक्शन का उपयोग करना चाहते हैं, जो एरलांग में वितरण नहीं कर रहे हैं, लेकिन कहें, टीसीपी सत्र। आप प्रत्येक 10 मशीनों के 5 समूह चला सकते हैं। इसका मतलब है कि 10 मशीनों में निर्बाध पिड वितरण है: आप किसी अन्य मशीन पर एक पिड को कॉल कर सकते हैं। लेकिन किसी अन्य समूह को वितरित करने का मतलब है कि आप इस तरह के समूह को सहजता से संबोधित नहीं कर सकते हैं।

आप आमतौर पर बीजीपी में कुछ प्रकार के "मार्ग प्रतिबिंब" चाहते हैं।

1

1) मुझे लगता है कि प्रक्रियाओं के बीच संवाद करने के लिए आपको नोड्स के बीच सीधा संबंध चाहिए। हालांकि, इसका मतलब यह है कि यदि आप कभी संवाद नहीं करेंगे (कहें कि वे केवल श्रमिक हैं, समन्वयक नहीं हैं) तो सभी नोड्स के बीच लगातार कनेक्शन की आवश्यकता नहीं है।

2) आप एरलांग नोड्स का एक पूरी तरह से कनेक्ट ग्राफ नहीं बना सकते हैं। दस्तावेज ढूंढना मुश्किल है, और समस्याओं के साथ आता है - आप global सिस्टम को अक्षम करते हैं जो क्लस्टर में वैश्विक नामों को संभालता है, इसलिए आपको स्थानीय रूप से पंजीकृत नामों या दूरस्थ नोड्स पर स्थानीय रूप से पंजीकृत नामों से सबकुछ करना होगा। या सिर्फ पिड्स का उपयोग करें, क्योंकि वे भी काम करते हैं। इस तरह एक एरलांग नोड शुरू करने के लिए, erl ... -connect_all false ... का उपयोग करें। मुझे उम्मीद है कि आप जानते हैं कि आप क्या कर रहे हैं, क्योंकि मैं ऐसा करने के लिए खुद पर भरोसा नहीं कर सका।

यह भी पता चला है कि एरलांग नोड्स का एक पूरी तरह से जुड़े ग्राफ एक वर्तमान शोध विषय है। RELEASE Project वर्तमान में इस पर काम कर रहा है, और एस-ग्रुप की अवधारणा के साथ आया है, जो अनिवार्य रूप से पूरी तरह से जुड़े समूह हैं। हालांकि, नोड्स एक से अधिक एस-ग्रुप के सदस्य हो सकते हैं और अलग-अलग एस-समूहों में नोड्स को पूरी तरह से कनेक्ट नहीं किया जाना चाहिए, लेकिन प्रत्यक्ष नोड-टू-नोड संचार करने के लिए मांग पर आवश्यक कनेक्शन स्थापित कर सकते हैं। उनके प्रस्तुतियों को खोजने लायक है क्योंकि शोध वास्तव में दिलचस्प है।

इंगित करने के लायक एक और बात यह है कि कई लोगों ने पाया है कि आप पूरी तरह से जुड़े क्लस्टर में 150-200 नोड्स तक पहुंच सकते हैं। क्या आपके पास वास्तव में अधिक नोड्स के लिए उपयोग-केस है? निश्चित रूप से 150-200 अविश्वसनीय रूप से बीफ़ी कंप्यूटर उन चीजों को करेंगे जो आप उन्हें फेंक सकते हैं, जब तक कि आपके पास हास्यास्पद प्रोजेक्ट न हो।

3) जबकि आप gen_server:start_link/3,4 का उपयोग करके एक अलग नोड पर प्रक्रिया शुरू नहीं कर सकते हैं, तो आप निश्चित रूप से विदेशी नोड पर सर्वर को आसानी से कॉल कर सकते हैं। ऐसा लगता है कि उन्होंने विदेशी नोड्स पर सर्वर शुरू करने में सक्षम होने से अनदेखा किया है, लेकिन इसके लिए शायद एक अच्छा कारण है - जैसे कि हास्यास्पद त्रुटि मामलों के मामले।

4) छुपे हुए नोड्स को देखने का प्रयास करें, और पूरी तरह से कनेक्ट क्लस्टर होने पर। जब आप फिट देखते हैं तो उन्हें आपको नोड्स को समूहित करने की अनुमति देनी चाहिए।

टीएल; डीआर: स्केलिंग कठिन है, चलो खरीदारी करते हैं।

0

कुछ अच्छे उत्तर पहले से ही हैं, इसलिए मैं सरल होने की कोशिश कर रहा हूं।

1) नहीं, यदि A और E सीधे कनेक्ट नहीं हैं, AE से बात नहीं कर सकते हैं। वितरण प्रोटोकॉल प्रत्यक्ष टीसीपी कनेक्शन पर चलता है - कोई रूटिंग शामिल नहीं है।

2) मुझे लगता है कि एक वृक्ष संरचना पर्याप्त है - व्यापार-बंद हमेशा मौजूद है।

3) कोई 'पर्यवेक्षक नोड्स' नहीं है, लेकिन erlang:monitor_node आपका मित्र है।

4) हां। एक नोड अलग-अलग 'क्लस्टर' से नोड्स से बात कर सकता है। स्थानीय नोड में, एक अलग कुकी के साथ रिमोट नोड तक पहुंचने के लिए erlang:set_cookie(OtherNode, OtherCookie) का उपयोग करें।

0

1) हाँ। वे एक दूसरे के

2) 3) और 4) सामान्य शब्दों में, जब एक स्केलेबल और दोष सहिष्णु प्रणाली के निर्माण, तुम चाहते हो जाएगा, या पर अधिक, विभिन्न "क्षेत्रों" को कार्यभार विभाजित करने की आवश्यकता या से बात " समूहों "। सुपरवाइजर/वर्कर मॉडल ने इस प्रकार टोपोलॉजी को कल्पना की है। आपको जो चाहिए वह क्लस्टर के बीच काम समन्वय करने वाली कुछ प्रक्रियाओं और एक समूह के भीतर सभी श्रमिक समूह के भीतर संतुलन के लिए एक-दूसरे से बात करेंगे।

जैसा कि आप देख सकते हैं, इस टोपोलॉजी के साथ, "सीमा" वास्तव में एक सीमा नहीं है जब तक कि आप अपने कार्यों को ध्यान से और संतुलित फैशन में विभाजित न करें। व्यक्तिगत रूप से, मेरा मानना ​​है कि पर्यवेक्षक प्रक्रियाओं के लिए संरचना जैसे पेड़ बड़े पैमाने पर सिस्टम में टालने योग्य नहीं हैं, और यह वह अभ्यास है जिसका मैं अनुसरण कर रहा हूं। कारण भिन्न होते हैं लेकिन स्केलेबिलिटी, फोल्ड बैक पॉलिसी कार्यान्वयन, क्लस्टर की रखरखाव की आवश्यकता और पोर्टेबिलिटी के रूप में गलती सहनशीलता के लिए उबालते हैं।

तो निष्कर्ष में,

2) अपने पर्यवेक्षकों के लिए एक पेड़ की तरह टोपोलॉजी का उपयोग करें। श्रमिकों को स्पष्ट रूप से एक-दूसरे से जुड़ने दें और पर्यवेक्षकों के साथ अपने डोमेन के भीतर बात करें।

3) जबकि यह मूल डिजाइन किया गया वातावरण है, जैसा कि मुझे लगता है, मुझे पूरा यकीन है कि एक पर्यवेक्षक एक अलग मशीन पर किसी कार्यकर्ता से बात कर सकता है। मैं इसका सुझाव नहीं दूंगा क्योंकि रिमोट वर्कर परिदृश्य में गलती सहनशीलता नरक हो सकती है।

4) आपको एक ही पल में नोड को दो अलग-अलग क्लस्टर का हिस्सा नहीं बनना चाहिए। आप इसे एक क्लस्टर से दूसरे में स्विच कर सकते हैं।