ब्रह्मांडीय पैमाने के यूनिक ID
(jasonfantl.com)- डिवाइस या ऑब्जेक्ट्स को बिल्कुल भी डुप्लिकेट न होने वाला ID देने के तरीकों की पड़ताल की गई है, और random तथा deterministic तरीकों की तुलना की गई है
- random तरीका काफी बड़े bit-size का उपयोग करने पर collision की संभावना को व्यावहारिक रूप से 0 के करीब ला सकता है, और इसमें UUID (122-बिट) से लेकर पूरे ब्रह्मांड की computational limit (798-बिट) तक कई स्तर शामिल हैं
- deterministic तरीके में central counter, delegated hierarchy (Dewey), binary tree (Binary), token (Token) जैसी कई schemes प्रस्तावित की गई हैं, और हर तरीके की ID length growth characteristics का simulation के जरिए विश्लेषण किया गया है
- यह गणितीय प्रमाण भी दिया गया है कि सभी deterministic schemes worst case में linear growth से बच नहीं सकतीं
- नतीजतन, ब्रह्मांडीय विस्तार के स्तर पर भी व्यावहारिक और कुशल तरीका random ID generation ही है, जबकि deterministic तरीके अक्षम साबित होते हैं
यूनिक ID की ज़रूरत और समस्या की रूपरेखा
- ऑब्जेक्ट पहचान manufacturing, logistics, communication, security जैसे सभी systems की बुनियाद है, और बड़े पैमाने पर विस्तार होने पर बिना duplication वाले ID देना एक मुख्य चुनौती बन जाता है
- अगर मानव सभ्यता आकाशगंगा स्तर तक फैलती है, तब भी डुप्लिकेट-रहित ID system की आवश्यकता होगी
- समस्या को इस तरह रखा गया है: “ऐसा ID कैसे बनाया जाए जो कभी भी डुप्लिकेट न हो?”
random तरीका
- सबसे सरल तरीका है कोई भी random संख्या चुन लेना
- इसे कहीं से भी, बिना central management या synchronization के generate किया जा सकता है
- collision की संभावना को bit-size बढ़ाकर नियंत्रित किया जा सकता है, और इसे व्यावहारिक रूप से 0 के बहुत करीब लाया जा सकता है
- UUID (122-बिट) में लगभग $2^{61}$ IDs generate होने पर collision की उम्मीद की जा सकती है
- पूरे ब्रह्मांड की computational limit (10¹²⁰ बार) को ध्यान में रखें तो 798-बिट की आवश्यकता होगी
- atomic scale (10⁸⁰ इकाइयाँ) के लिए 532-बिट, और 1g nanobots (10⁵⁶ इकाइयाँ) के लिए 372-बिट
- वास्तविक randomपन सुनिश्चित करना महत्वपूर्ण है, इसलिए CSPRNG या quantum random source के उपयोग की सिफारिश की गई है
- सामान्य seed या constant ID (जैसे all-zero) पर रोक ज़रूरी है
deterministic तरीका
- central counter तरीके में एक single server क्रमवार IDs जारी करता है
- accessibility की समस्या के कारण satellite-डिवाइस delegation structure (Dewey) प्रस्तावित किया गया है
- Dewey scheme:
A.B.Cरूप का hierarchical ID, जिसे Elias omega coding से व्यक्त किया जाता है- tree structure के आधार पर इसमें logarithmic या linear growth होती है
- Binary scheme ID space को binary tree में विभाजित करती है, और कुछ स्थितियों में Dewey से अधिक कुशल होती है
- 2-Adic Valuation गणितीय uniqueness की गारंटी देता है, और यह Binary का एक परिवर्तित रूप है
- Token scheme chain structure में logarithmic growth दिखाती है, लेकिन चौड़ाई बढ़ने पर linear में बदल जाती है
linear growth की अनिवार्यता का प्रमाण
- यह मानकर कि ID आवंटन का हर path अद्वितीय होना चाहिए, संभव paths की संख्या की गणना की गई है
- जब nodes की संख्या n हो, तो आवश्यक IDs की संख्या $2^{n-1}$ तक बढ़ती है
- इसलिए ID length कम-से-कम O(n) होगी, यानी worst case में linear growth अनिवार्य है
- कोई भी algorithm हर स्थिति में logarithmic growth बनाए नहीं रख सकता
विस्तार मॉडल simulation
- Random Recursive Tree, Preferential Attachment, Fitness Model जैसे कई growth models पर प्रयोग किए गए
- छोटे पैमाने (2,048 nodes) पर Binary बेहतर रहा, जबकि Dewey और Token का प्रदर्शन स्थिति पर निर्भर था
- Preferential model में Dewey सबसे कुशल रहा
- Fitness model में Dewey और Binary का प्रदर्शन लगभग समान था
- दस लाख nodes के पैमाने पर भी Dewey और Token ने logarithmic growth बनाए रखी
- ID length को लगभग
6.55 × ln(n)के रूप में निरूपित किया जा सकता है
- ID length को लगभग
आकाशगंगा और ब्रह्मांडीय पैमाने का विस्तार मॉडल
- ग्रहों के बीच प्रसार को एक निश्चित गति वाले wave front के रूप में model किया गया है
- हर ग्रह लगभग 10⁹ IDs generate करने के बाद अगले ग्रह तक फैलता है
- आकाशगंगा की त्रिज्या लगभग 2,121 ग्रह मानी गई, और पूरे प्रसार पर ID length लगभग 288,048-बिट हुई
- आकाशगंगाओं के बीच प्रसार (लगभग 7,816 चरण) तक विचार करने पर लगभग 2.2 अरब बिट (281MB) की आवश्यकता पड़ती है
- deterministic तरीके अक्षम हैं, और random तरीका (798-बिट या कम) बेहद अधिक कुशल है
सुरक्षा और अतिरिक्त विचार
- ID forgery रोकने के लिए signature-based verification system लागू किया जा सकता है
- random IDs में public key को ID की तरह इस्तेमाल किया जा सकता है, जबकि deterministic scheme में parent child key पर signature करता है
- error-correcting code और version management की आवश्यकता है
- ऐसी वस्तुएँ जिनमें ID store नहीं किया जा सकता (जैसे ग्रह), उन्हें कई IDs की mapping से प्रबंधित किया जा सकता है
- Theseus के जहाज़ की समस्या की तरह, components बदलने पर ID बना रहना चाहिए या नहीं, इस पर भी चर्चा है
- संबंधित अवधारणाएँ: Decentralized Identifiers (DID), Ancestry Labeling Schemes
निष्कर्ष
- deterministic schemes सैद्धांतिक रूप से रोचक हैं, लेकिन व्यावहारिकता कम है
- random ID generation ब्रह्मांडीय पैमाने पर भी वास्तविक और कुशल है
- ID collision की संभावना को “व्यावहारिक रूप से 0” तक ले जाना ही सबसे सुरक्षित और उपयोगी विकल्प है
4 टिप्पणियां
समय-आधारित तरीके से बनाना हो तो उसे रैखिक ही मानना चाहिए, है न..?
लगता है मूल लेख थोड़ा देखना पड़ेगा। दिलचस्प कहानी है।
मूल लेख ज़रूर पढ़िए। उसमें फ़ॉर्मूला और simulation के ज़रिए visual तरीके से समझाया गया है, इसलिए पढ़ने में बहुत मज़ा आया।
अगर टकराव हो जाए, तो क्या वह ब्रह्मांडीय स्तर की बदकिस्मती होगी...(?)
Hacker News टिप्पणियाँ
यह विश्लेषण पूरी तरह निष्पक्ष नहीं है। UUID डिज़ाइन करते समय locality यानी प्रकाश की गति को ध्यान में रखा जाता है, लेकिन collision probability की गणना में इसे नज़रअंदाज़ किया गया है। वास्तव में collision का अर्थ तभी है जब दो UUID बनने के बाद causal contact में आएँ। इसलिए साधारण birthday paradox लागू करना गलत तरीका है। locality को ध्यान में रखें तो ज़रूरी UUID size लेख में बताए गए 800-bit से बहुत छोटा होगा। मैंने गणितीय हिसाब नहीं लगाया, लेकिन यह 256-bit से ज़्यादा नहीं होगा, ऐसा लगता है। HN उन गिने-चुने स्थानों में से है जहाँ ऐसी बारीक तकनीकी चर्चाएँ गंभीरता से होती हैं, इसलिए यह मुझे सच में पसंद है
addressable objects की संख्या निकालते समय यह भी ध्यान में रखना चाहिए कि हर object का address कम-से-कम एक बार कहीं न कहीं store होना पड़ेगा। अगर एक bit store करने के लिए Npb particles चाहिएँ, तो address bits बढ़ने के साथ addressable objects की संख्या घटती जाएगी। इसलिए Nthg = Np / (Npb * f(Ntng)) जैसे किसी संबंध से अधिकतम addressable objects की संख्या निकाली जा सकती है
एक बार मुझे यह दलील देनी पड़ी थी कि 256-bit random ID इतना काफ़ी है कि collision check की ज़रूरत ही नहीं है। साथियों का कहना था कि जटिल collision verification logic जोड़ना चाहिए, लेकिन मैंने समझाया कि 2^256 का पैमाना observable universe में atoms की संख्या के आसपास है। collision होने से पहले data center के लाखों बार फट जाने की संभावना ज़्यादा है — ऐसा कहकर मनाना पड़ा। अंत में हम इस नतीजे पर पहुँचे कि 128-bit भी काफ़ी है
एक गणना के मुताबिक अगर हर atom को ID देना हो तो लगभग 532 bits चाहिएँगे। लेकिन व्यवहार में आप atoms के समूहों, जैसे microchip, car आदि, को भी ID देना चाहेंगे, इसलिए संख्या और बढ़ सकती है
card deck से ID व्यक्त करने का एक विचार है। 52 cards में से हर एक को Unicode character से दिखाया जाए तो वह पढ़ने में आसान होगा, हाथ से edit करना कठिन होगा, और pattern recognition में भी मदद मिलेगी। असली card deck को shuffle करके camera से पढ़ा जाए तो उसे random seed के रूप में भी इस्तेमाल किया जा सकता है। इसी तरह का एक विचार DiceKeys भी है
शानदार visualization और insight है। मैंने database को यथासंभव छोटे random identifiers के इर्द-गिर्द डिज़ाइन किया है। मुझे लगता है कि ऐसे universal identifiers ही असल में एकमात्र ‘golden disk’ हैं। scientific data management या library science जैसे क्षेत्रों में इस विचार को कम आंका जाता है। बड़े संगठनों की कई समस्याएँ बेहतर identifier design से हल हो सकती थीं.
संबंधित लेख: Identifiers Deep Dive, Trible Structure
मैं अभी Becky Chambers की The Galaxy, and the Ground Within के लगभग पेज 281 पर हूँ।
किताब में संदेश का एक उदाहरण:
मुझे यह series बहुत पसंद है। यह दिलचस्प है कि बहु-प्रजातीय universe में केंद्रीय रूप से सहमत path addressing system इस्तेमाल होता है
हाल ही में मुझे Snowflake ID के बारे में पता चला। इसका इस्तेमाल Twitter, Discord, Instagram, Mastodon आदि में होता है। यह timestamp + random के संयोजन से ID size घटाने का तरीका है, लेकिन अफ़सोस कि लेख में इसका ज़िक्र नहीं था।
Snowflake ID wiki, Tom Scott वीडियो देखें।
अगर Snowflake timestamp के कुछ bits को random से बदल दिया जाए, तो शायद प्रति सेकंड 4 अरब IDs बनाई जा सकती हैं
मुझे जिज्ञासा है कि क्या observable phenomena के आधार पर ID बनाई जा सकती है। समय और दूरी से अलग-अलग होने वाली विशेषताओं के कारण शायद uniqueness सुनिश्चित हो सके। उदाहरण के लिए, किसी खास समय पर तारों की रोशनी का pattern शायद केवल एक ही व्यक्ति देख सकता है। यह lava lamp से noise लेकर entropy बनाने जैसा है। अगर पूरे universe का coordinate system परिभाषित किया जा सके, तो local time + x + y + z + salt के संयोजन से unique ID बनाई जा सकती है
random UUID तरीका longevity के लिहाज़ से कहीं बेहतर है। एक ही समय पर सक्रिय रह सकने वाले devices की संख्या सीमित होती है, और tree-based UUIDs के विपरीत, device हट जाने पर ID को reuse किया जा सकता है। व्यवहार में location-based root + random lower bits मिलाने वाला hybrid algorithm सबसे व्यावहारिक लगेगा