Erlang 21

global_group




erlang

global_group

मॉड्यूल

global_group

मॉड्यूल सारांश

वैश्विक नाम पंजीकरण समूहों के लिए समूहन नोड्स।

विवरण

यह मॉड्यूल सिस्टम के नोड्स को वैश्विक समूहों में विभाजित करना संभव बनाता है। प्रत्येक वैश्विक समूह का अपना वैश्विक नामस्थान है, global(3) देखें global(3)

सिस्टम को वैश्विक समूहों में विभाजित करने का मुख्य लाभ यह है कि पृष्ठभूमि भार कम हो जाता है जबकि विश्व स्तर पर पंजीकृत नामों में हेरफेर करते समय अद्यतन की जाने वाली नोड्स की संख्या कम हो जाती है।

कर्नेल कॉन्फ़िगरेशन पैरामीटर global_groups वैश्विक समूहों को परिभाषित करता है ( kernel(6) भी देखें kernel(6) और config(4) ):

{global_groups, [GroupTuple :: group_tuple()]}

प्रक्रियाओं और नोड्स के लिए वैश्विक समूह कार्यक्षमता का उपयोग करके सुचारू रूप से चलाने के लिए, निम्न मानदंडों को पूरा किया जाना चाहिए:

  • वैश्विक समूह सर्वर, global_group का एक उदाहरण, प्रत्येक नोड पर चलना चाहिए। नोड शुरू होने पर प्रक्रियाएं स्वचालित रूप से शुरू और सिंक्रनाइज़ होती हैं।

  • सभी शामिल नोड्स को वैश्विक समूह की परिभाषा पर सहमत होना चाहिए, अन्यथा सिस्टम का व्यवहार अपरिभाषित है।

  • सिस्टम में सभी नोड्स बिल्कुल एक वैश्विक समूह से संबंधित होने चाहिए।

निम्नलिखित विवरणों में, एक समूह नोड स्थानीय नोड के समान वैश्विक समूह से संबंधित नोड है।

जानकारी का प्रकार

group_tuple() =
{GroupName :: group_name() , [node()]} |
{GroupName :: group_name() ,
PublishType :: publish_type() ,
[node()]}

GroupTuple बिना PublishType , PublishType समान है।

group_name() = atom()
publish_type() = hidden | normal

एक नोड को कमांड-लाइन फ्लैग के साथ शुरू किया गया था (देखें erl(1) ) को एक छिपा हुआ नोड कहा जाता है। एक छिपा हुआ नोड नोड्स के लिए छिपे हुए कनेक्शनों को एक ही वैश्विक समूह का हिस्सा नहीं बनाता है, लेकिन सामान्य (दृश्यमान) कनेक्शनों को उसी वैश्विक समूह के हिस्से के नोड्स में स्थापित करता है।

एक वैश्विक समूह जिसे PublishType बराबर PublishType साथ परिभाषित किया गया है, एक छिपे हुए वैश्विक समूह को कहा जाता है। एक छिपे हुए वैश्विक समूह के सभी नोड्स छिपे हुए नोड्स हैं, चाहे वे कमांड-लाइन फ्लैग के साथ शुरू -hidden या नहीं।

name() = atom()

एक पंजीकृत नाम।

where() = {node, node()} | {group, group_name() }

निर्यात

Global_groups () -> {GroupName, GroupNames} | अपरिभाषित

प्रकार

वैश्विक समूह के नाम से युक्त एक टपल लौटाता है जो स्थानीय नोड से संबंधित है, और अन्य सभी ज्ञात समूह नामों की सूची। यदि कोई वैश्विक समूह परिभाषित नहीं है, तो undefined है।

जानकारी () -> [info_item ()]

प्रकार

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

{state, State}

यदि स्थानीय नोड एक वैश्विक समूह का हिस्सा है, तो State synced बराबर है। यदि कोई वैश्विक समूह परिभाषित नहीं किया गया है, तो State no_conf बराबर है।

{own_group_name, GroupName}

समूह का नाम (परमाणु) जो स्थानीय नोड से संबंधित है।

{own_group_nodes, Nodes}

नोड नामों (परमाणुओं) की एक सूची, समूह नोड्स।

{synced_nodes, Nodes}

नोड नामों की एक सूची, समूह नोड वर्तमान में स्थानीय नोड के साथ सिंक्रनाइज़ है।

{sync_error, Nodes}

नोड नामों की एक सूची, समूह नोड जिसके साथ स्थानीय नोड सिंक्रनाइज़ करने में विफल रहा है।

{no_contact, Nodes}

नोड नामों की एक सूची, समूह नोड्स जिनमें वर्तमान में कोई कनेक्शन नहीं हैं।

{other_groups, Groups}

Groups tuples की एक सूची है {GroupName, Nodes} , अन्य वैश्विक समूहों के नाम और नोड्स को निर्दिष्ट करते हुए।

{monitoring, Pids}

nodeup और nodedown संदेशों की सदस्यता लेने वाली प्रक्रियाओं को निर्दिष्ट करते हुए, pids की एक सूची।

मॉनिटर_नॉड्स (झंडा) -> ठीक है

प्रकार

Flag आधार पर, कॉलिंग प्रक्रिया सदस्यता लेना शुरू कर देती है ( Flag समान रूप से true ) या सदस्यता ( false बराबर Flag ) को नोड स्थिति परिवर्तन संदेशों में बदलना बंद कर देता है।

एक प्रक्रिया जो सदस्यता ले चुकी है, क्रमशः एक समूह नोड कनेक्ट या डिस्कनेक्ट होने पर संदेश {nodeup, Node} और {nodedown, Node} प्राप्त करती है।

खुद_नोड्स () -> नोड्स

प्रकार

सभी समूह नोड्स के नाम लौटाता है, चाहे उनकी वर्तमान स्थिति कुछ भी हो।

पंजीकृत_नाम (कहां) -> नाम

प्रकार

निर्दिष्ट नोड पर या निर्दिष्ट वैश्विक समूह में उन सभी नामों की सूची देता है जो विश्व स्तर पर पंजीकृत हैं।

send (नाम, संदेश) -> पिड () | {badarg, {नाम, Msg}}
सेंड (वेयर, नेम, मिसग) -> पिड () | {badarg, {नाम, Msg}}

प्रकार

किसी भी वैश्विक समूह में निर्दिष्ट नोड पर या निर्दिष्ट वैश्विक समूह, या (यदि तर्क नहीं दिया गया है) पर विश्व स्तर पर पंजीकृत Name लिए खोजें। वैश्विक समूह इस क्रम में खोजे जाते हैं कि वे कॉन्फ़िगरेशन पैरामीटर global_groups के मान में दिखाई देते हैं।

यदि Name पाया जाता है, तो संदेश Msg को संबंधित pid पर भेजा जाता है। Pid फ़ंक्शन का रिटर्न मान भी है। यदि नाम नहीं मिला है, तो फ़ंक्शन {badarg, {Name, Msg}} लौटाता है।

सिंक () -> ठीक है

समूह नोड्स, यानी समूह नोड्स पर वैश्विक नाम सर्वर को सिंक्रनाइज़ करता है। वर्तमान वैश्विक समूह में पंजीकृत विश्व स्तर पर नामों की भी जाँच करता है और समूह के किसी भी ज्ञात नोड पर उन्हें अपंजीकृत नहीं करता है।

यदि सिंक्रनाइज़ेशन संभव नहीं है, तो एक त्रुटि रिपोर्ट त्रुटि error_logger(3) को भेजी जाती है (यह भी error_logger(3) देखें error_logger(3)

रिटर्न {error, {'invalid global_groups definition', Bad}} यदि कॉन्फ़िगरेशन पैरामीटर global_groups में अमान्य मान Bad

whereis_name (नाम) -> pid () | अपरिभाषित
whereis_name (कहां, नाम) -> pid () | अपरिभाषित

प्रकार

किसी भी वैश्विक समूह में निर्दिष्ट नोड पर या निर्दिष्ट वैश्विक समूह, या (यदि तर्क नहीं दिया गया है) पर विश्व स्तर पर पंजीकृत Name लिए खोजें। वैश्विक समूह इस क्रम में खोजे जाते हैं कि वे कॉन्फ़िगरेशन पैरामीटर global_groups के मान में दिखाई देते हैं।

यदि Name पाया जाता है, तो संबंधित पीआईडी ​​लौटा दी जाती है। यदि नाम नहीं मिला है, तो फ़ंक्शन undefined

टिप्पणियाँ

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

  • फ़ंक्शन send/2,3 सुरक्षित नहीं है।

  • अनुप्रयोगों का वितरण वैश्विक समूह की परिभाषाओं पर अत्यधिक निर्भर है। यह अनुशंसित नहीं है कि एक आवेदन कई वैश्विक समूहों में वितरित किया जाता है, क्योंकि पंजीकृत नाम किसी अन्य वैश्विक समूह को विफलता / अधिग्रहण पर ले जाया जा सकता है। कुछ भी नहीं होने से रोकता है, लेकिन एप्लिकेशन कोड को तब स्थिति को संभालना चाहिए।

यह भी देखें

global(3) , erl(1)