प्रतिनिधि इंटरव्यू विषय

सामान्य साक्षात्कार: आप कंटेंट-एड्रेसेबल स्टोरेज को कैसे समझाएंगे और हैश एल्गोरिदम को सुरक्षित रूप से कैसे माइग्रेट करेंगे?

सामान्यकठिन
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

एक आर्टिफैक्ट रिपॉजिटरी ऑब्जेक्ट एड्रेस के रूप में हैश डाइजेस्ट का उपयोग करती है। कंटेंट एड्रेसिंग के लाभों और सीमाओं को समझाएं, फिर क्लाइंट्स, कैश या सिग्नेचर्स को बाधित किए बिना एक नए हैश एल्गोरिदम में माइग्रेट करें।

प्रॉम्प्ट और संदर्भ

एक आर्टिफैक्ट रिपॉजिटरी ऑब्जेक्ट एड्रेस के रूप में हैश डाइजेस्ट का उपयोग करती है। कंटेंट एड्रेसिंग के लाभों और सीमाओं को समझाएं, फिर क्लाइंट्स, कैश या सिग्नेचर्स को बाधित किए बिना एक नए हैश एल्गोरिदम में माइग्रेट करें।

OCI कंटेंट डिस्क्रिप्टर कंटेंट आइडेंटिफायर के रूप में डाइजेस्ट का उपयोग करते हैं और उपयोग से पहले अविश्वसनीय कंटेंट को सत्यापित करने की सलाह देते हैं। Git का हैश ट्रांज़िशन दस्तावेज़ रिपॉजिटरी-दर-रिपॉजिटरी माइग्रेशन पैटर्न दिखाता है। यह साक्षात्कार इंटीग्रिटी, पहचान, उपलब्धता और अनुकूलता का अलग-अलग परीक्षण करता है; "डाइजेस्ट का मेल खाना" कोई पूर्ण सुरक्षा प्रमाण नहीं है।

साक्षात्कारकर्ता क्या परीक्षण कर रहा है

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

पहले स्पष्ट करने योग्य प्रश्न

  • क्या ऑब्जेक्ट एक कंटेनर लेयर, बिल्ड आर्टिफैक्ट, बैकअप या कोई सामान्य यूज़र फ़ाइल है?
  • क्या डाइजेस्ट APIs, URLs, डेटाबेस, लॉग्स, सिग्नेचर्स या कस्टमर स्क्रिप्ट्स में दिखाई देता है?
  • एल्गोरिदम, एन्कोडिंग, कैनोनिकलाइज़ेशन, ऑब्जेक्ट-साइज़ और कॉलिज़न नियम क्या हैं?
  • क्या क्लाइंट्स एल्गोरिदम प्रीफिक्स को पार्स कर सकते हैं, और क्या ऑफ़लाइन, पुराने या थर्ड-पार्टी मिरर्स मौजूद हैं?
  • क्या लक्ष्य एक एल्गोरिदम जोड़ना, डिफ़ॉल्ट को बदलना, या किसी हतोत्साहित (discouraged) एल्गोरिदम को हटाना है?
  • पुराने डाइजेस्ट्स को कितने समय तक सत्यापन योग्य रहना चाहिए, और ऑडिट व सिग्नेचर्स को कैसे ट्रैसेबल रखा जाएगा?

30-सेकंड का उत्तर

"कंटेंट एड्रेसिंग कैनोनिकल बाइट्स के डाइजेस्ट को एक स्थिर ID के रूप में उपयोग करता है, जो डिडुप्लीकेशन, कैशिंग और इंटीग्रिटी जांच में मदद करता है, लेकिन यह स्रोत, अनुमति या उपलब्धता को साबित नहीं करता है। मैं एल्गोरिदम और एन्कोडिंग को डाइजेस्ट फ़ॉर्मेट में शामिल करूंगा, पुराने-से-नए इंडेक्स और पढ़ने योग्य एलियास बनाए रखूंगा, और नए क्लाइंट्स को नए एल्गोरिदम को प्राथमिकता देने की अनुमति दूंगा, जबकि पुराने क्लाइंट्स पुराने पतों को पढ़ना जारी रख सकते हैं। माइग्रेशन के दौरान, मैं डुअल-राइट करूंगा या आलसी तरीके से (lazily) नए डाइजेस्ट्स की गणना करूंगा, एल्गोरिदम, डाइजेस्ट और संदर्भ पर हस्ताक्षर करूंगा, और प्रत्येक उपभोक्ता से साइज़ और डाइजेस्ट को फिर से सत्यापित करवाऊंगा। निकास द्वार (exit gates) हिट दर, पुनर्गणना लागत, क्लाइंट त्रुटियों, सिग्नेचर सत्यापन और रोलबैक अभ्यासों को कवर करेंगे।"

चरण-दर-चरण विस्तृत उत्तर

चरण 1: स्थिर कंटेंट बाइट्स को परिभाषित करें

बताएं कि क्या डाइजेस्ट रॉ बाइट्स या कैनोनिकल प्रतिनिधित्व को कवर करता है। कम्प्रेशन, लाइन एंडिंग्स, JSON फ़ील्ड क्रम और मेटाडेटा परिवर्तन अलग-अलग डाइजेस्ट उत्पन्न करते हैं। यदि सिमेंटिक रूप से समान लेकिन बाइट-स्तर पर भिन्न ऑब्जेक्ट्स की आवश्यकता है, तो छिपे हुए कैनोनिकलाइज़ेशन के बजाय सिमेंटिक वर्ज़न का उपयोग करें, क्योंकि छिपा हुआ कैनोनिकलाइज़ेशन सिग्नेचर्स और ऑडिट को विकृत कर सकता है।

चरण 2: डाइजेस्ट, टैग और सिग्नेचर को अलग करें

डाइजेस्ट यह जांचता है कि क्या प्राप्त बाइट्स किसी पहचानकर्ता से मेल खाते हैं; टैग यह पूछता है कि उपयोगकर्ता कौन सा वर्ज़न चाहता है; सिग्नेचर यह पूछता है कि इसे किस संदर्भ में किसने अनुमोदित किया है। टैग्स बदले जा सकते हैं जबकि डाइजेस्ट्स को अपरिवर्तनीय होना चाहिए। एक सिग्नेचर को केवल एक परिवर्तनीय टैग को ही नहीं, बल्कि एल्गोरिदम, डाइजेस्ट, मीडिया प्रकार, उद्देश्य और समय को भी कवर करना चाहिए।

चरण 3: सुरक्षा सीमाओं को स्पष्ट करें

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

चरण 4: एक डुअल-एल्गोरिदम ऑब्जेक्ट मॉडल डिज़ाइन करें

डाइजेस्ट में एक एल्गोरिदम प्रीफिक्स और एन्कोडिंग शामिल करें और आंतरिक इंडेक्स को एक ऑब्जेक्ट को कई डाइजेस्ट्स में मैप करने की अनुमति दें। एक प्राइमरी ऑब्जेक्ट ID, पुराना डाइजेस्ट, नया डाइजेस्ट, साइज़, मीडिया प्रकार और निर्माण समय बनाए रखें। कैपेबिलिटी नेगोशिएशन डिफ़ॉल्ट डाइजेस्ट का चयन कर सकता है, लेकिन क्लाइंट को अज्ञात एल्गोरिदम को चुपचाप पुराने एल्गोरिदम के रूप में नहीं मानना चाहिए।

चरण 5: माइग्रेशन पथ की योजना बनाएं

राइटर्स द्वारा नए डाइजेस्ट जारी करने से पहले रीडर्स को नए फ़ॉर्मेट के बारे में बताएं; एक पुराना डाइजेस्ट इंडेक्स के माध्यम से उसी ऑब्जेक्ट को रिज़ॉल्व कर सकता है। हॉट ऑब्जेक्ट्स की पहले से गणना (precompute) करें और कोल्ड ऑब्जेक्ट्स की आलसी गणना (lazily compute) करें, और विफलताओं व कतार की स्थिति को रिकॉर्ड करें। नए क्लाइंट्स नए डाइजेस्ट को प्राथमिकता देते हैं; पुराने क्लाइंट्स एलियास या कंटेंट नेगोशिएशन का उपयोग करते हैं। एक ही एड्रेस से अलग-अलग बाइट्स वापस नहीं आने चाहिए।

चरण 6: कैश, सिग्नेचर्स और सप्लाई चेन को संभालें

कैश कीज़, CDNs, इमेज मैनिफ़ेस्ट, SBOMs, सिग्नेचर्स और ऑडिट इवेंट्स में एल्गोरिदम प्रीफिक्स होना चाहिए। सिग्नेचर सत्यापन डाइजेस्ट, एल्गोरिदम, संदर्भ और प्रमाणपत्र ट्रस्ट की जांच करता है। अस्थायी रूप से दोहरे सिग्नेचर रखे जा सकते हैं, लेकिन रिलीज़ गेट में आवश्यक सिग्नेचर का नाम होना चाहिए। आर्टिफ़ैक्ट को अनपैक या निष्पादित करने से पहले पुलर्स को डाइजेस्ट को सत्यापित करना होगा।

चरण 7: गारबेज कलेक्शन और रोलबैक को नियंत्रित करें

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

चरण 8: मेट्रिक्स के साथ पूर्णता साबित करें

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

ट्रेड-ऑफ और सीमाएं

प्रति ऑब्जेक्ट एकाधिक डाइजेस्ट

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

प्रीकंप्यूट बनाम लेज़ी कंप्यूटेशन

प्रीकंप्यूटेशन पहली बार पढ़ने की लेटेंसी को कम करता है लेकिन CPU और स्टोरेज बैंडविड्थ की खपत करता है; लेज़ी कंप्यूटेशन कोल्ड-डेटा लागत को बचाता है लेकिन टेल लेटेंसी (tail latency) पैदा कर सकता है। उपयोग की आवृत्ति (heat), साइज़ और क्लाइंट की समय-सीमा के अनुसार स्तरित करें और कतार को रोकने की अनुमति दें।

डाइजेस्ट सत्यापन बनाम स्रोत प्रमाणीकरण

एक डाइजेस्ट यह सत्यापित करता है कि बाइट्स नहीं बदले हैं; यह प्रकाशक की पहचान साबित नहीं करता है। सप्लाई चेन को सिग्नेचर्स, ट्रांसपेरेंसी लॉग्स या विश्वसनीय वितरण की आवश्यकता होती है, जबकि प्राधिकरण अभी भी यह नियंत्रित करता है कि कौन किसी ऑब्जेक्ट को पढ़, पुश या हटा सकता है।

विफलता अभ्यास और विकास योजना

क्लाइंट एल्गोरिदम-प्रीफिक्स वाले डाइजेस्ट को अस्वीकार करता है

एक वर्ज़न्ड API, एलियास और अनुकूलता फ़ील्ड प्रदान करें और अस्वीकृति को मापें। नए डाइजेस्ट को कभी भी पुराने फ़ॉर्मेट में छोटा (truncate) न करें और न ही क्लाइंट्स को एल्गोरिदम का अनुमान लगाने दें।

पुनर्गणना के दौरान बाइट्स बदल जाते हैं

इनपुट वर्ज़न को फ़्रीज़ करें और कम्प्रेशन या कैनोनिकलाइज़ेशन विचलन का पता लगाने के लिए साइज़, मीडिया प्रकार और चेकसम की तुलना करें। नए डाइजेस्ट को नियतात्मक (deterministic) बाइट्स की पहचान करनी चाहिए; यदि सिमेंटिक्स मेल खाते हैं लेकिन बाइट्स भिन्न हैं, तो एक नया ऑब्जेक्ट वर्ज़न बनाएं।

नए डाइजेस्ट सिग्नेचर का सत्यापन विफल हो जाता है

सिग्नेचर संदर्भ, प्रमाणपत्र श्रृंखला, एल्गोरिदम नीति और क्लॉक की जांच करें, फिर वर्ज़न के अनुसार फ़ॉलबैक करें। पुराने सिग्नेचर सत्यापन को बनाए रखें और रिलीज़ को पुनर्स्थापित करने के लिए इसे कभी न छोड़ें।

सामान्य गलतियां और फॉलो-अप

गलती 1: डाइजेस्ट को एक्सेस कंट्रोल के रूप में मानना

फॉलो-अप: क्या डाइजेस्ट जानने वाला कोई भी व्यक्ति ऑब्जेक्ट को पढ़ सकता है? अनअंदाज़ेबिलिटी (unguessability), प्रमाणीकरण, प्राधिकरण और एन्क्रिप्शन के बीच अंतर करें।

गलती 2: टैग को एक अपरिवर्तनीय ID मानना

फॉलो-अप: जब कोई टैग स्थानांतरित होता है या रोलबैक होता है तो कैश और सिग्नेचर्स का क्या होता है? डाइजेस्ट के साथ कंटेंट को लॉक करें और संदर्भ पर हस्ताक्षर करें।

गलती 3: केवल एक डेटाबेस फ़ील्ड को बदलना

फॉलो-अप: APIs, मैनिफ़ेस्ट, CDNs, क्लाइंट्स, सिग्नेचर्स, लॉग्स और गारबेज कलेक्शन एक साथ कैसे बदलते हैं?

गलती 4: केवल हैश गति को मापना

फॉलो-अप: आप साइज़ बेमेल, अज्ञात एल्गोरिदम, टेल लेटेंसी, सिग्नेचर विफलता और थर्ड-पार्टी अनुकूलता का परीक्षण कैसे करते हैं?

फॉलो-अप प्रश्न और उत्तर

OCI ऑब्जेक्ट साइज़ को भी क्यों रिकॉर्ड करता है?

साइज़ क्लाइंट को हैशिंग से पहले स्पष्ट रूप से असामान्य इनपुट को अस्वीकार करने और डाउनलोड व संसाधन उपयोग का अनुमान लगाने की अनुमति देता है। यह कोई इंटीग्रिटी प्रमाण नहीं है; अंतिम बाइट्स को अभी भी स्वतंत्र रूप से गणना किए गए डाइजेस्ट की आवश्यकता होती है।

क्या माइग्रेशन के दौरान एक URL दो डाइजेस्ट्स का प्रतिनिधित्व कर सकता है?

एक URL को स्थिर रूप से समान बाइट्स और सिमेंटिक्स वापस करने चाहिए। एक तार्किक एलियास का उपयोग करें जो एक अपरिवर्तनीय डाइजेस्ट को रिज़ॉल्व करता है या कई स्पष्ट डाइजेस्ट फ़ील्ड लौटाता है; क्लाइंट के आधार पर कंटेंट को यादृच्छिक रूप से न बदलें।

आप पुराने एल्गोरिदम को कब बंद कर सकते हैं?

नए-क्लाइंट कवरेज, डुअल-डाइजेस्ट मैपिंग, सिग्नेचर सत्यापन, कैश, थर्ड-पार्टी पुल्स और ऑडिट मेट्रिक्स के पास होने और पुराने-डाइजेस्ट ट्रैफ़िक के निकास सीमा से नीचे आने के बाद, पहले पुराने डाइजेस्ट का उत्पादन बंद करें। एक सत्यापन विंडो के बाद, पुराने राइट्स को निरस्त करें, जबकि उनकी अवधारण (retention) अवधि के लिए ऐतिहासिक रीड्स और सिग्नेचर सत्यापन को सुरक्षित रखें।

सार्वजनिक स्रोत

संबंधित प्रश्न