7

मैं एक वितरित और समवर्ती वातावरण में अद्वितीय अनुक्रम संख्या उत्पन्न करने के लिए बाधाओं और व्यापारिकताओं के बारे में उत्सुक हूं।एक वितरित और समवर्ती वातावरण में अद्वितीय अनुक्रम संख्या उत्पन्न करते समय ट्रेडऑफ क्या हैं?

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

  • उच्च लोड के तहत रहें।
  • जितना संभव हो उतने समवर्ती कनेक्शन की अनुमति दें।
  • वितरित: एकाधिक मशीनों में फैलता लोड।
  • प्रदर्शन: जितनी जल्दी हो सके चलाएं और जितना संभव हो उतना थ्रूपुट करें।
  • शुद्धता: उत्पन्न संख्या करना होगा:
    1. दोहराना नहीं।
    2. प्रति अनुरोध अद्वितीय हो (यदि किसी भी दो अनुरोध सही समय पर होता है तो एक तरह से तोड़ने का संबंध होना चाहिए)।
    3. अनुक्रमिक क्रम में (बढ़ते) में। 1,2,3,4 ... (प्रभावी ढंग से कुल # अनुरोधों के लिए एक काउंटर)
  • दोष सहिष्णु: यदि एक या अधिक, या सभी मशीनों नीचे चला गया, यह हो सकता
  • अनुरोधों के बीच कोई अंतराल है विफलता से पहले राज्य को फिर से शुरू करें।

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

कोई संदर्भ (कागजात, किताबें, कोड) का स्वागत है। मैं मौजूदा सॉफ्टवेयर (ओपन सोर्स या नहीं) की एक सूची रखना भी चाहूंगा।


सॉफ्टवेयर:

  • Snowflake: कुछ सरल की गारंटी देता है के साथ उच्च स्तर पर अद्वितीय ID संख्या पैदा करने के लिए एक नेटवर्क सेवा।
  • keyspace: एक सार्वजनिक रूप से सुलभ, अद्वितीय 128 बिट आईडी जनरेटर, जिसका आईडी किसी भी उद्देश्य के
  • RFC-4122 implementations exist in many languages के लिए इस्तेमाल किया जा सकता है। आरएफसी स्पेक शायद वास्तव में एक अच्छा आधार है, क्योंकि यह किसी भी अंतर-प्रणाली समन्वय की आवश्यकता को रोकता है, यूयूआईडी 128-बिट हैं, और जब spec के कुछ संस्करणों को लागू करने वाले सॉफ़्टवेयर से आईडी का उपयोग करते हैं, तो उनमें एक टाइम कोड भाग शामिल होता है जो बनाता है संभव सॉर्टिंग आदि
+1

+1, दिलचस्प सवाल। मुझे लगता है कि यह सुनना दिलचस्प होगा कि आप इनमें से कुछ आवश्यकताओं के साथ कैसे आए। ** 1। ** क्या तीसरी और चौथी शुद्धता आवश्यकताओं (अनुरोधों के बीच बढ़ती हुई और कोई अंतराल नहीं) वास्तव में महत्वपूर्ण * क्लाइंट * है? और यदि हां, तो क्यों? ** 2। ** प्रति अनुरोध विशिष्टता: क्या यह पर्याप्त सख्त है? जैसा कि मैं "अनुरोध" शब्द का उपयोग समझता हूं, इसका मतलब है "मुझे एक नंबर दें!" यदि दो ग्राहक अनुरोध करते हैं कि 'एक ही समय में आते हैं, तो यह अभी भी दो अलग-अलग अनुरोध हैं, एक नहीं। तो: संख्या * सार्वभौमिक * अद्वितीय नहीं होनी चाहिए? – stakx

उत्तर

0

आप (प्रति मशीन) अनुक्रमिक होना चाहिए, लेकिन खाई/काउंटर RFC 4122 में विनिर्दिष्ट requirments संस्करण 1 UUID के एक कार्यान्वयन के लिए देखो ड्रॉप कर सकते हैं।

यदि आप काम कर रहे हैं।नेट और अनुक्रमिक और अंतराल/काउंटर आवश्यकताओं को खत्म कर सकते हैं, बस System.Guid एस का उपयोग करें। वे आरएफसी 4122 संस्करण 4 को लागू करते हैं और मशीनों और अनुरोधों में पहले से ही अद्वितीय (बहुत कम टकराव संभावना) हैं। इसे आसानी से वेब सेवा के रूप में कार्यान्वित किया जा सकता है या सिर्फ स्थानीय रूप से उपयोग किया जा सकता है।

0

यहां एक ऐसे दृष्टिकोण के लिए एक उच्च स्तरीय विचार है जो सभी आवश्यकताओं को पूरा कर सकता है, यद्यपि एक महत्वपूर्ण चेतावनी के साथ जो कई उपयोग मामलों से मेल नहीं खा सकता है।

यदि आप दो अनुक्रम संख्याओं को सहन कर सकते हैं - एक तार्किक एक तुरंत लौटा; अद्वितीय गारंटी और आदेश दिया लेकिन गैप के साथ - और एक अलग शारीरिक गारंटी एक कोई अंतराल और साथ अनुक्रमिक क्रम में होना करने के लिए उपलब्ध कुछ समय बाद - तो समाधान सरल लगता है:

  • एक वितरित प्रणाली है कि एक उच्च सेवा कर सकते हैं रिज़ॉल्यूशन घड़ी + मशीन आईडी लॉजिकल अनुक्रम संख्या
  • सभी लॉजिकल अनुक्रम संख्याओं को एक अलग वितरित सिस्टम में स्ट्रीम करें जो तार्किक अनुक्रम संख्याओं को ऑर्डर करता है और उन्हें भौतिक अनुक्रम संख्याओं पर मानचित्रित करता है।

लॉजिकल से भौतिक से मैपिंग ऑन-डिमांड हो सकता है जैसे ही दूसरी प्रणाली प्रसंस्करण के साथ की जाती है।

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