Erlang 21 - 13. Distributed Erlang

13 वितरित एर्लांग




erlang

13 वितरित एर्लांग

13.1 वितरित एर्लांग प्रणाली

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

वितरण तंत्र टीसीपी / आईपी सॉकेट का उपयोग करके कार्यान्वित किया जाता है। कैसे एक वैकल्पिक वाहक को लागू करने के लिए ERTS User's Guide में वर्णित किया गया है।

चेतावनी

डिस्ट्रिब्यूट किए गए नोड को भी निर्दिष्ट किए बिना शुरू करना -proto_dist inet_tls उन हमलों को नोड को उजागर करेगा जो हमलावर को नोड तक पहुंच प्रदान कर सकते हैं और क्लस्टर का विस्तार कर सकते हैं। अन-सिक्योर डिस्ट्रिब्यूटेड नोड्स का उपयोग करते समय, सुनिश्चित करें कि संभावित हमलावरों को बाहर रखने के लिए नेटवर्क को कॉन्फ़िगर किया गया है। सुरक्षित वितरित नोड को सेटअप करने के तरीके के विवरण के Using SSL for Erlang Distribution उपयोगकर्ता की मार्गदर्शिका के लिए Using SSL for Erlang Distribution देखें।

13.2 नोड्स

एक नोड एक निष्पादित एर्लैंग रनटाइम सिस्टम है जिसे कमांड-लाइन फ्लैग -sname (लंबे नाम) या -sname (संक्षिप्त नाम) का उपयोग करके एक नाम दिया गया है।

नोड नाम का प्रारूप एक परमाणु [email protected] name उपयोगकर्ता द्वारा दिया गया name है। host पूर्ण होस्ट नाम है यदि लंबे नामों का उपयोग किया जाता है, या यदि संक्षिप्त नाम का उपयोग किया जाता है, तो होस्ट नाम का पहला भाग। node() का नाम लौटाता है।

उदाहरण:

% erl -name dilbert
([email protected])1> node().
'[email protected]'

% erl -sname dilbert
([email protected])1> node().
[email protected]ab
ध्यान दें

एक लंबे नोड नाम के साथ एक नोड एक लघु नोड नाम के साथ एक नोड के साथ संवाद नहीं कर सकता।

13.3 नोड कनेक्शन

एक वितरित एर्लांग प्रणाली में नोड्स शिथिल रूप से जुड़े हुए हैं। पहली बार किसी अन्य नोड के नाम का उपयोग किया जाता है, उदाहरण के लिए, यदि spawn(Node,M,F,A) या net_adm:ping(Node) कहा जाता है, तो उस नोड का एक कनेक्शन प्रयास किया जाता है।

कनेक्शन्स डिफ़ॉल्ट रूप से सकर्मक हैं। यदि नोड A नोड B से कनेक्ट होता है, और नोड B का नोड C से कनेक्शन होता है, तो नोड A नोड C से जुड़ने का भी प्रयास करता है। इस सुविधा को कमांड-लाइन फ्लैग का उपयोग करके बंद किया जा सकता है -connect_all false , erl(1) देखें erl(1) ईआरटीएस में मैनुअल पेज।

यदि कोई नोड नीचे जाता है, तो उस नोड के सभी कनेक्शन हटा दिए जाते हैं। कॉलिंग erlang:disconnect_node(Node) एक नोड के वियोग को मजबूर करता है।

वर्तमान में जुड़ा हुआ (दृश्यमान) नोड्स की सूची nodes() द्वारा लौटा दी गई है।

13.4 एपीएमडी

Erlang Port Mapper Daemon epmd स्वचालित रूप से हर उस होस्ट पर शुरू किया जाता है जहाँ एक Erlang नोड शुरू होता है। यह प्रतीकात्मक नोड नामों को मशीन के पते पर मैप करने के लिए जिम्मेदार है। epmd(1) में epmd(1) मैनुअल पेज देखें।

13.5 छिपा हुआ नोड्स

एक वितरित एर्लैंग प्रणाली में, कभी-कभी नोड से कनेक्ट करने के लिए भी उपयोगी होता है, अन्य सभी नोड्स से कनेक्ट किए बिना। एक उदाहरण किसी प्रकार की O & M कार्यक्षमता है जिसका उपयोग किसी सिस्टम की स्थिति का निरीक्षण करने के लिए किया जाता है, बिना उसे परेशान किए। इस उद्देश्य के लिए, एक छिपे हुए नोड का उपयोग किया जा सकता है।

एक छिपा हुआ नोड एक नोड है जिसे कमांड-लाइन फ्लैग के साथ शुरू किया गया है। छिपे हुए नोड्स और अन्य नोड्स के बीच कनेक्शन सकर्मक नहीं हैं, उन्हें स्पष्ट रूप से सेट किया जाना चाहिए। इसके अलावा, नोड्स द्वारा लौटाए गए nodes() की सूची में छिपे हुए नोड्स दिखाई नहीं देते हैं। इसके बजाय, nodes(hidden) या nodes(connected) का उपयोग किया जाना चाहिए। इसका अर्थ है, उदाहरण के लिए, छिपे हुए नोड को नोड्स के सेट में नहीं जोड़ा जाता है जो कि global ट्रैक कर रहा है।

इस फीचर को Erlang 5.0 / OTP R7 में जोड़ा गया था।

13.6 सी नोड्स

सी नोड एक सी प्रोग्राम है जो वितरित एर्लांग सिस्टम में छिपे नोड के रूप में कार्य करने के लिए लिखा जाता है। लाइब्रेरी Erl_Interface में इस उद्देश्य के लिए कार्य शामिल हैं। सी नोड्स के बारे में अधिक जानकारी के लिए, Erl_Interface एप्लिकेशन और Interoperability Tutorial.

13.7 सुरक्षा

प्रमाणीकरण यह निर्धारित करता है कि कौन से नोड्स को एक दूसरे के साथ संवाद करने की अनुमति है। विभिन्न एरलंग नोड्स के एक नेटवर्क में, यह सिस्टम में सबसे कम संभव स्तर पर बनाया गया है। प्रत्येक नोड का अपना जादू कुकी है , जो एक एरलंग परमाणु है।

जब एक नोड दूसरे नोड से जुड़ने की कोशिश करता है, तो मैजिक कुकीज की तुलना की जाती है। यदि वे मेल नहीं खाते हैं, तो कनेक्टेड नोड कनेक्शन को अस्वीकार कर देता है।

स्टार्ट-अप में, एक नोड के पास एक यादृच्छिक परमाणु होता है जिसे उसके जादू की कुकी के रूप में सौंपा जाता है और अन्य नोड्स की कुकी को nocookie माना जाता है। एरलैंग नेटवर्क ऑथेंटिकेशन सर्वर ( auth ) की पहली कार्रवाई तब $HOME/.erlang.cookie नामक फाइल को पढ़ने के लिए होती है। यदि फ़ाइल मौजूद नहीं है, तो यह बनाई गई है। फ़ाइल की UNIX अनुमतियाँ मोड ऑक्टल 400 (उपयोगकर्ता द्वारा केवल पढ़ने के लिए) पर सेट है और इसकी सामग्री एक यादृच्छिक स्ट्रिंग है। फ़ाइल की सामग्री से एक परमाणु Cookie बनाई जाती है और स्थानीय नोड के कुकी को erlang:set_cookie(node(), Cookie) का उपयोग करके इसे सेट किया जाता है। इससे स्थानीय नोड यह मान भी लेता है कि अन्य सभी नोड्स में एक ही कुकी Cookie

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

जादू कुकी Cookie साथ नोड नोड 1 के लिए, कनेक्ट करने में सक्षम होने या किसी अन्य कुकी से एक अन्य नोड Node2 को जोड़ने के लिए, एक अलग कुकी DiffCookie , फ़ंक्शन erlang:set_cookie(Node2, DiffCookie) को पहले Node1 पर बुलाया जाना चाहिए। कई उपयोगकर्ता आईडी के साथ वितरित सिस्टम को इस तरह से संभाला जा सकता है।

डिफ़ॉल्ट जब एक कनेक्शन दो नोड्स के बीच स्थापित होता है, तो तुरंत अन्य सभी दृश्यमान नोड्स को भी कनेक्ट करना है। इस तरह, हमेशा एक पूरी तरह से जुड़ा हुआ नेटवर्क होता है। यदि अलग-अलग कुकीज़ के साथ नोड्स हैं, तो यह विधि अनुचित हो सकती है और कमांड-लाइन फ्लैग -connect_all false सेट किया जाना चाहिए, ERTS erl(1) मैनुअल पेज ERTS में देखें।

स्थानीय नोड के जादू कुकी को erlang:get_cookie() कहकर पुनर्प्राप्त किया जाता है।

13.8 वितरण BIF

वितरित प्रोग्रामिंग के लिए कुछ उपयोगी बीआईएफ (अधिक जानकारी के लिए, ईआरटीएस में इरलैंग erlang(3) मैनुअल पेज देखें:

BIF विवरण
erlang:disconnect_node(Node) एक नोड के वियोग को मजबूर करता है।
erlang:get_cookie() वर्तमान नोड की मैजिक कुकी लौटाता है।
is_alive() true अगर रनटाइम सिस्टम एक नोड है और अन्यथा, अन्य नोड्स से कनेक्ट हो सकता है।
monitor_node(Node, true|false) Node की स्थिति पर नज़र रखता है। यदि इसका कनेक्शन गुम हो जाता है तो एक संदेश {nodedown, Node} प्राप्त होता है।
node() वर्तमान नोड का नाम लौटाता है। गार्डों में अनुमति है।
node(Arg) वह नोड लौटाता है जहाँ Arg , एक pid, reference या port स्थित है।
nodes() सभी दृश्यमान नोड्स की सूची लौटाता है जो इस नोड से जुड़े होते हैं।
nodes(Arg) Arg आधार पर, यह फ़ंक्शन न केवल दृश्यमान नोड्स की सूची, बल्कि छिपे हुए नोड्स और पहले से ज्ञात नोड्स, और इसी तरह वापस कर सकता है।
erlang:set_cookie(Node, Cookie) Node कनेक्ट करते समय उपयोग की जाने वाली मैजिक कुकी सेट करती है। यदि Node वर्तमान नोड है, तो सभी नए नोड से कनेक्ट करते समय Cookie का उपयोग किया जाता है।
spawn[_link|_opt](Node, Fun) एक दूरस्थ नोड पर एक प्रक्रिया बनाता है।
spawn[_link|opt](Node, Module, FunctionName, Args) एक दूरस्थ नोड पर एक प्रक्रिया बनाता है।

तालिका 13.1: वितरण बीआईएफ

13.9 वितरण कमांड-लाइन झंडे

वितरित प्रोग्रामिंग के लिए उपयोग किए जाने वाले कमांड-लाइन झंडे के उदाहरण (अधिक जानकारी के लिए, erl(1) में erl(1) मैनुअल पेज देखें:

कमांड-लाइन फ्लैग विवरण
-connect_all false केवल स्पष्ट कनेक्शन सेट-अप का उपयोग किया जाता है।
-hidden एक नोड को एक छिपे हुए नोड में बनाता है।
-name Name लंबे समय तक नोड नामों का उपयोग करके एक नोड में रनटाइम सिस्टम बनाता है।
-setcookie Cookie erlang:set_cookie(node(), Cookie) कॉलिंग के रूप में भी erlang:set_cookie(node(), Cookie)
-sname Name शॉर्ट नोड नामों का उपयोग करके एक नोड में रनटाइम सिस्टम बनाता है।

तालिका 13.2: वितरण कमांड-लाइन झंडे

13.10 वितरण मॉड्यूल

वितरित प्रोग्रामिंग के लिए उपयोगी मॉड्यूल के उदाहरण:

कर्नेल अनुप्रयोग में:

मॉड्यूल विवरण
global एक वैश्विक नाम पंजीकरण सुविधा।
global_group वैश्विक नाम पंजीकरण समूहों के लिए समूहन नोड्स।
net_adm विभिन्न Erlang शुद्ध प्रशासन दिनचर्या।
net_kernel एर्लांग नेटवर्किंग कर्नेल।

तालिका 13.3: वितरण के लिए कर्नेल मॉड्यूल उपयोगी।

STDLIB आवेदन में:

मॉड्यूल विवरण
slave गुलाम नोड्स का प्रारंभ और नियंत्रण।

तालिका 13.4: वितरण के लिए STDLIB मॉड्यूल उपयोगी।