menuTicketing
close





कार्य सिद्धांत


लॉक प्राप्त करना और जारी करना

जब कोई क्लाइंट कुंजी प्राप्त करता है (A), सर्वर निम्नलिखित तीन में से एक के साथ प्रतिक्रिया देता है।

कुंजी स्थितिसर्वर क्रियाप्रतिक्रिया
पंजीकृत नहींतुरंत पंजीकृत (समाप्ति = now + lease), टोकन जारी करेंA + token + key
पंजीकृत + समाप्तनवीनीकृत (now + lease), नया टोकन जारी करेंA + token + key
पंजीकृत + वैध (अधिकार में)प्रतीक्षा कतार में पंजीकृत करें, प्रतिक्रिया रोकेंरिलीज़/समाप्ति पर A, wait अधिक होने पर T
  • रिलीज़ FIFO में न्यायसंगत रूप से संभाला जाता है। जब धारक रिलीज़ करता है (R), कतार के सामने को सीधे हस्तांतरित किया जाता है — पुनः प्रतियोगिता के बिना नए टोकन के साथ तुरंत।
  • lease एक सुरक्षा जाल है। यदि क्लाइंट मर जाता है या रिलीज़ करना भूल जाता है, lease समय समाप्त होने के बाद सर्वर स्वचालित रूप से कुंजी पुनः प्राप्त कर सकता है और अगले प्रतीक्षा करने वाले को पास कर सकता है। इसलिए सामान्य रिलीज़ प्रवाह से अलग, हमेशा lease को दिया हुआ मूल्य, लेकिन जब मर जाए तो बहुत लंबे समय तक बंधा नहीं रहेगा।
  • wait अधिग्रहण प्रतीक्षा सीमा है। यदि 0 है तो असीमित प्रतीक्षा, अन्यथा यदि उस समय (सेकंड) में प्राप्त नहीं हो सकते तो सर्वर छोड़ देता है और T(टाइमआउट) के साथ प्रतिक्रिया देता है — अनुदान के बिना समाप्त होता है इसलिए लॉक लीक नहीं होता।

फेंसिंग टोकन

A प्रतिक्रिया में निहित token उस अनुदान का मोनोटोनिकली बढ़ता हुआ u64 है। हर बार प्राप्त करने पर पिछले किसी भी टोकन से बड़ा मान जारी किया जाता है। यहां तक कि यदि फेलओवर होता है, तो नया सक्रिय नोड प्रतिकृत अधिकतम टोकन से बड़े मूल्य से शुरू करता है (उत्तराधिकार) — इसलिए पूरे क्लस्टर में भी टोकन बढ़ता रहता है।

सुरक्षित करने वाले संसाधन (खाता, फ़ाइल, ऑर्डर आदि) को केवल "वर्तमान में जो टोकन है वह पिछली बार देखे गए टोकन से बड़ा है" की जांच करनी चाहिए, lease समाप्त होने के बाद देर से जागने वाले क्लाइंट को पहले से अमान्य कम टोकन के साथ पहुंचने से रोक सकते हैं। इसके कारण यहां तक कि लॉक सर्वर हर पल परिपूर्ण रूप से सुसंगत न हो सुरक्षा बनी रहती है।

क्लाइंट का व्यवहार

आधिकारिक क्लाइंट निम्नानुसार सामान्य रूप से काम करते हैं (भाषा-विशिष्ट API के लिए लाइब्रेरी देखें)।

  • प्रत्येक पते के लिए एक स्थायी कनेक्शन बनाए रखें और पृष्ठभूमि में प्रबंधित करें। यदि केवल एक पता दिया जाता है तो आंतरिक रूप से एक ही नोड के दो कनेक्शन बनाए रखते हैं, यहां तक कि यदि उनमें से एक संक्षिप्त रूप से टूट जाए तो सेवा बाधित न हो।
  • राउंड-रॉबिन से कनेक्शन चुनें। जिस नोड का कनेक्शन टूट गया है वह स्वचालित रूप से बाहर निकल जाता है, और 3 सेकंड के अंतराल पर पृष्ठभूमि में पुनः कनेक्ट करने का प्रयास करता है।
  • अनुरोध पाइपलाइन किए जाते हैं। प्रतिक्रिया की प्रतीक्षा किए बिना अगला अनुरोध भेजें, और प्रतिक्रिया क्रम अनुरोध क्रम से अलग हो सकता है — क्लाइंट इकोड किए गए (op, key) संयोजन से यह बताता है कि कौन सा अनुरोध किस प्रतिक्रिया के लिए है। यदि समान (op, key) संयोजन के एकाधिक अनुरोध हैं तो भेजने के क्रम में मेल खाते हैं।
  • अधिग्रहण प्रयास के दौरान कनेक्शन टूटने पर स्वचालित रूप से अगले कनेक्शन पर स्विच करें। पंजीकृत कनेक्शन की संख्या के बाद प्रयास करने के बाद भी यदि कोई उपलब्ध कनेक्शन नहीं है तो फिर त्रुटि की रिपोर्ट करता है।
  • रिलीज़ 5 सेकंड के लिए 200ms अंतराल पर पुनः प्रयास करता है — यहां तक कि यदि रिलीज़ के समय कनेक्शन अचानक टूट जाता है तो लॉक सर्वर पर नहीं रहता है (अंततः lease इसे पुनः प्राप्त करता है, लेकिन इससे पहले अन्य प्रतीक्षकर्ता को तेजी से हस्तांतरित करने के लिए)।

क्लस्टर — प्राथमिकता आधारित निर्बाध

  • peers सूची का क्रम पदोन्नति प्राथमिकता है (सामने वाला सर्वोच्च प्राथमिकता)। जीवित नोड्स में सर्वोच्च प्राथमिकता वाला एक सक्रिय, बाकी वह स्थिति को रीयल-टाइम में प्रतिकृत प्राप्त करते हैं स्टैंडबाय हैं।
  • क्लाइंट अनुरोध केवल सक्रिय द्वारा संभाले जाते हैं। स्टैंडबाय को जोड़ने वाले क्लाइंट को सक्रिय पते पर निर्देशित (M) किया जाता है और उस ओर स्विच करते हैं।
  • सक्रिय विफलता/पुनः शुरुआत → स्टैंडबाय पदोन्नत होता है और इसे संभालता है।
  • Graceful बंद (Ctrl+C) पर सक्रिय पहले उत्तराधिकारी को पदोन्नति सौंप देता है (हस्तांतरण) फिर क्लाइंट को पुनः निर्देशित करता है, सक्रिय अंतराल को कम करने के लिए।
  • स्वचालित विमोचन: नेटवर्क विभाजन आदि से यदि दोनों नोड एक साथ सक्रिय हो जाते हैं, निम्न प्राथमिकता वाला एक दूसरे को महसूस करता है और स्वयं को स्टैंडबाय में वापस ले लेता है (स्थायी विभाजन ब्रेन रोकथाम)।

यह पदोन्नति विधि बहुमत (अधिकांश मत) आधारित नहीं है। इसलिए विषम/सम संख्याएं महत्वपूर्ण नहीं हैं, यहां तक कि यदि एक भी जीवित है तो सेवा बनी रहती है

सर्वर संख्यानिर्बाधसमसामयिक विफलता सहनशीलताटिप्पणी
1सबसे तेज़। पुनः शुरुआत पर संक्षिप्त बाधा होती है
21निर्बाध की न्यूनतम कॉन्फ़िगरेशन। अधिकांश समय यह पर्याप्त है
32एक नोड सेवा में भी दोहरीकरण बनी रहती है
4+N−1केवल प्रसार लागत बढ़ जाती है — अनुशंसित नहीं है

सामंजस्य के बारे में जानने योग्य

प्राथमिकता आधारित पदोन्नति सहमति नहीं है, इसलिए नेटवर्क विभाजन के पल में दोनों पक्ष अचानक एक साथ सक्रिय हो सकते हैं, और अतुल्यकालिक प्रतिकरण की प्रकृति के कारण फेलओवर के दौरान कुछ अनुदान खो सकते हैं। यानी फेलओवर/विभाजन अंतराल में पारस्परिक विशेषता 100% गारंटीकृत नहीं है। यदि मजबूत गारंटी चाहिए तो पहले वर्णित फेंसिंग टोकन को सुरक्षित संसाधन की जांच में लागू करें — पुरानी (छोटी) टोकन को अस्वीकार करने से लॉक सर्वर परिपूर्ण रूप से सुसंगत न होने पर भी सुरक्षित है।