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

सिस्टम डिज़ाइन इंटरव्यू: आप एक आर्टिफ़ैक्ट और पैकेज रजिस्ट्री कैसे डिज़ाइन करेंगे?

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

प्रश्न

एक ऐसी रजिस्ट्री डिज़ाइन करें जहाँ टीमें पैकेज, कंटेनर इमेज या बिल्ड आर्टिफ़ैक्ट्स प्रकाशित और डाउनलोड करती हैं। API, स्टोरेज, वर्ज़न रिज़ॉल्यूशन, कंकरेंसी, अनुमतियाँ, कैशिंग, निरसन और इंटीग्रिटी वेरिफिकेशन के बारे में बताएं।

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

एक ऐसी रजिस्ट्री डिज़ाइन करें जहाँ टीमें पैकेज, कंटेनर इमेज या बिल्ड आर्टिफ़ैक्ट्स प्रकाशित और डाउनलोड करती हैं। मेटाडेटा, बाइनरी ब्लॉब्स, वर्ज़न टैग, अनुमतियाँ, उपलब्धता, कैशिंग, निरसन और ऑडिट को कवर करें।

पहले एक आर्टिफ़ैक्ट का प्रकार चुनें और समझाएं कि कौन से एब्स्ट्रैक्शन सामान्यीकृत होते हैं। मुख्य बाधाएं हैं प्रति कंटेंट डाइजेस्ट (digest) केवल एक प्रति, आंशिक रूप से दिखाई देने वाली कोई रिलीज़ न होना, और क्लाइंट द्वारा यह सत्यापन कि बाइट्स को बदला नहीं गया है।

इंटरव्यूअर क्या जांच रहा है

मेटाडेटा बनाम कंटेंट

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

वर्ज़न और कंसिस्टेंसी सेमेंटिक्स

सिमेंटिक वर्ज़न, मूविंग टैग्स, समवर्ती पब्लिश (concurrent publishes), और डिलीशन को समझाएं। एक खराब रिज़ॉल्वर बिल्ड को अप्रतिलिपि योग्य (irreproducible) बना देता है।

डिस्ट्रीब्यूशन और लागत

केवल एक ऑब्जेक्ट स्टोर का चित्र बनाने के बजाय चंक्ड अपलोड, फिर से शुरू करने की क्षमता (resumability), कंटेंट एड्रेसिंग, CDN, क्रॉस-रीजन रेप्लिकेशन, और कचरा संग्रहण (garbage collection) पर चर्चा करें।

सुरक्षा और गवर्नेंस

अनुमतियाँ, टेनेंट आइसोलेशन, साइनिंग, SBOM, मैलवेयर स्कैनिंग, ऑडिट और निरसन को एक सिंगल ऑपरेशनल लूप बनाना चाहिए।

पूछने के लिए स्पष्टीकरण संबंधी प्रश्न

  • क्या यह npm जैसा पैकेज है, कोई OCI इमेज है, या कोई आर्बिट्रेरी बिल्ड फ़ाइल है?
  • दैनिक पब्लिश/डाउनलोड दरें और कुल स्टोरेज कितना है?
  • क्या latest जैसा कोई टैग मूव हो सकता है?
  • क्या प्रकाशित वर्ज़न को ओवरराइट किया जा सकता है, या केवल एक नया वर्ज़न ही जोड़ा जा सकता है?
  • क्या प्राइवेट टेनेंट्स, अपस्ट्रीम प्रॉक्सी और मल्टी-रीजन रिकवरी की आवश्यकता है?
  • क्या निरसन नए डाउनलोड को ब्लॉक करता है, बाइट्स को डिलीट करता है, या सबूत बनाए रखते हुए जोखिम के रूप में चिह्नित करता है?

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

“मैं एक मल्टी-टेनेंट, कंटेंट-एड्रेस्ड रजिस्ट्री से शुरुआत करूँगा। पब्लिशर ब्लॉब्स को अपलोड और सत्यापित करता है, फिर एक इम्यूटेबल मैनिफ़ेस्ट कमिट करता है; टैग केवल मौजूदा वर्ज़न की ओर इशारा करते हैं और एक कंकरेंसी शर्त के तहत मूव होते हैं। क्लाइंट मेटाडेटा पढ़ता है, ऑब्जेक्ट स्टोरेज या CDN से डाइजेस्ट द्वारा ब्लॉब्स प्राप्त करता है, और डाइजेस्ट व सिग्नेचर को सत्यापित करता है। अनुमतियाँ नेमस्पेस और एक्शन को कवर करती हैं। निरसन ऑडिट साक्ष्यों को तुरंत डिलीट किए बिना जोखिम को चिह्नित करता है। हॉट आर्टिफ़ैक्ट्स CDN का उपयोग करते हैं; रेप्लिकेशन, स्कैनिंग और गारबेज कलेक्शन एसिंक्रोनस रूप से चलते हैं।”

चरण-दर-चरण गहन विश्लेषण

चरण 1: रिसोर्स मॉडल को परिभाषित करें

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

चरण 2: पब्लिशिंग डिज़ाइन करें

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

चरण 3: वर्ज़न और टैग को संभालें

एक इम्यूटेबल वर्ज़न को ओवरराइट नहीं किया जा सकता है। एक टैग मूव हो सकता है, लेकिन ऑपरेटर, पुराने और नए टारगेट, और कंडीशनल वर्ज़न को रिकॉर्ड किया जाता है। डिपेंडेंसी रिज़ॉल्यूशन latest की तुलना में पिन किए गए वर्ज़न और डाइजेस्ट को प्राथमिकता देता है।

चरण 4: डाउनलोड डिज़ाइन करें

मेटाडेटा मैनिफ़ेस्ट, डिपेंडेंसी और सिग्नेचर लौटाता है। ब्लॉब डिलीवरी रेंज रिक्वेस्ट, ETag और CDN का समर्थन करती है। क्लाइंट डाइजेस्ट को सत्यापित करते हैं; डाइजेस्ट कैश कुंजी है, जबकि टैग रिज़ॉल्यूशन में एक छोटा TTL होता है।

चरण 5: स्केल और रिकवर करें

ऑब्जेक्ट स्टोरेज बड़े ब्लॉब्स को रखता है, जबकि मेटाडेटा को नेमस्पेस और पैकेज द्वारा विभाजित (partition) किया जाता है। ब्लॉब्स से पहले या उनके साथ मैनिफ़ेस्ट को रेप्लिकेट करें और एक नए क्षेत्र को तभी प्रदर्शित करें जब उसकी रीड पॉलिसी संतुष्ट हो जाए।

चरण 6: सुरक्षित और संचालित करें

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

मॉडल उच्च-गुणवत्ता वाला उत्तर

“मैं रजिस्ट्री को मेटाडेटा, ब्लॉब स्टोरेज और एसिंक्रोनस गवर्नेंस जॉब्स में विभाजित करूँगा। क्लाइंट एक चंक्ड अपलोड सेशन बनाता है; डाइजेस्ट वेरिफिकेशन के बाद, एक ट्रांज़ैक्शन इम्यूटेबल ब्लॉब्स को संदर्भित करने वाले मैनिफ़ेस्ट को कमिट करता है। वर्ज़न को ओवरराइट नहीं किया जा सकता है; टैग मूव कंडीशनल वर्ज़न का उपयोग करते हैं और इतिहास बनाए रखते हैं। डाउनलोड एक पिन किए गए वर्ज़न को रिज़ॉल्व करते हैं, CDN या ऑब्जेक्ट स्टोरेज से डाइजेस्ट द्वारा प्राप्त करते हैं, और सिग्नेचर को सत्यापित करते हैं।

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

सामान्य गलतियाँ

  • क्लाइंट को ऑब्जेक्ट स्टोरेज को बदलने की अनुमति देना → अनुमतियाँ और अखंडता बायपास हो जाती हैं → शॉर्ट-लिव्ड अपलोड सेशन्स और सर्वर-साइड मैनिफ़ेस्ट कमिट का उपयोग करें।
  • प्रकाशित वर्ज़न को ओवरराइट करने की अनुमति देना → बिल्ड को दोबारा रीप्रोड्यूस नहीं किया जा सकता → वर्ज़न को इम्यूटेबल बनाएं और एक नया वर्ज़न प्रकाशित करें।
  • latest को एक स्थायी कैश कुंजी के रूप में उपयोग करना → बाइट्स चुपचाप बदल जाते हैं → डाइजेस्ट द्वारा कैश करें और एक छोटे TTL के साथ टैग्स को रिज़ॉल्व करें।
  • केवल बाइट्स स्टोर करना → डिपेंडेंसी और सिग्नेचर खो जाते हैं → स्ट्रक्चर्ड मैनिफ़ेस्ट और प्रोवेनेन्स को बनाए रखें।
  • हर क्षेत्र को तुरंत पढ़ने योग्य बनाना → आंशिक आर्टिफ़ैक्ट दिखाई देने लगते हैं → मैनिफ़ेस्ट, ब्लॉब्स और पॉलिसी स्थिति पर रीड्स को गेट (नियंत्रित) करें।
  • निरस्त आर्टिफ़ैक्ट्स को हटाना → ऑडिट और घटना के सबूत गायब हो जाते हैं → ब्लॉक के रूप में चिह्नित करें और प्रतिधारण नियमों के तहत एसिंक्रोनस रूप से साफ़ करें।
  • केवल लॉगिन की जांच करना → क्रॉस-टेनेंट एक्सेस लीक हो सकता है → प्रत्येक सीमा पर नेमस्पेस, एक्शन और आर्टिफ़ैक्ट को अधिकृत करें।
  • स्कैन पर पब्लिशिंग को ब्लॉक करना → अपलोड लेटेंसी बहुत बढ़ जाती है → पहले क्वारंटाइन करें, एसिंक्रोनस रूप से स्कैन करें, फिर उपलब्धता स्थिति बदलें।

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

फॉलो-अप 1: दो पब्लिशर एक ही टैग को समवर्ती रूप से मूव करते हैं। क्या होता है?

कंडीशनल वर्ज़न या compare-and-swap का उपयोग करें। टकराव पर वर्तमान वर्ज़न लौटाएं ताकि क्लाइंट दृश्यमान इतिहास के साथ पुनः प्रयास करे; कभी भी चुपचाप 'last-write-wins' का उपयोग न करें।

फॉलो-अप 2: आप पूर्ण डाउनलोड की गारंटी कैसे देते हैं?

मैनिफ़ेस्ट डाइजेस्ट, आकार और मीडिया प्रकार घोषित करता है। क्लाइंट डाइजेस्ट को सत्यापित करता है और विफलता पर किसी अन्य रेप्लिका के साथ पुनः प्रयास करता है; सर्विस सत्यापन विफलताओं की निगरानी करती है।

फॉलो-अप 3: क्या रेप्लिकेशन में देरी के दौरान पब्लिशिंग जारी रह सकती है?

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

फॉलो-अप 4: आप डुप्लिकेट ब्लॉब्स को कैसे गारबेज-कलेक्ट करते हैं?

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

फॉलो-अप 5: प्रोवेनेन्स डाउनलोड निर्णयों को कैसे प्रभावित करता है?

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

स्रोत 1: OCI Distribution Specification

OCI विनिर्देश वितरण को मैनिफ़ेस्ट, डिस्क्रिप्टर और ब्लॉब्स पर केंद्रित करता है और सामग्री-संबोधित रजिस्ट्री के लिए push, pull, डाइजेस्ट और त्रुटि सिमेंटिक्स को परिभाषित करता है।

स्रोत 2: npm Registry मेटाडेटा

npm Registry मेटाडेटा वर्ज़न, dist-tags और पैकेज जानकारी को अलग-अलग चिंताओं के रूप में दिखाता है, जो टैग और इम्यूटेबल वर्ज़न के लिए अलग-अलग निरंतरता और कैशिंग नियमों का समर्थन करता है।

स्रोत 3: SLSA सप्लाई-चेन इंटीग्रिटी

Google का SLSA परिचय आर्टिफ़ैक्ट प्रोवेनेन्स, ट्रेसिएबिलिटी और छेड़छाड़ प्रतिरोध पर जोर देता है। वे सिग्नल रजिस्ट्री साइनिंग, SBOM, स्कैनिंग और डाउनलोड पॉलिसी में सहायता प्रदान कर सकते हैं।

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

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

संबंधित इंटरव्यू टूल

सिस्टम डिज़ाइन उत्तर के लिए हल करें का उपयोग करें

पहले आवश्यकताओं को स्पष्ट करें, फिर स्केल, आर्किटेक्चर, कंपोनेंट चयन और ट्रेड-ऑफ की ओर बढ़ें।

टूल देखें