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

सिस्टम डिज़ाइन इंटरव्यू: आप S3 Metadata tables के साथ ऑब्जेक्ट डिस्कवरी कैसे बनाएंगे?

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

प्रश्न

एक डेटा प्लेटफ़ॉर्म को अनएन्क्रिप्टेड, समाप्त हो रहे (expiring), या हाल ही में हटाए गए S3 ऑब्जेक्ट्स को खोजना होगा और ऑडिट प्रश्नों (queries) का समर्थन करना होगा। आप S3 Metadata tables, बैकफिल, क्वेरी और रिकवरी कैसे डिज़ाइन करेंगे?

समस्या और दायरा

S3 Metadata tables सामान्य प्रयोजन के बकेट के लिए सारणीबद्ध (tabular) ऑब्जेक्ट मेटाडेटा प्रदान करते हैं: एक जर्नल टेबल ऑब्जेक्ट और मेटाडेटा परिवर्तनों को रिकॉर्ड करती है, जबकि एक लाइव इन्वेंट्री टेबल मौजूदा ऑब्जेक्ट्स के स्नैपशॉट का बैकफिल करती है। यह प्रश्न इवेंट्स और स्नैपशॉट्स, लेटेंसी और कंसिस्टेंसी, एक्सेस कंट्रोल, लागत और रिकवरी के संयोजन का परीक्षण करता है; इसकी श्रेणी system-design है। यह प्रत्येक S3 अनुरोध का स्ट्रॉन्गली कंसिस्टेंट बाहरी इंडेक्स नहीं है।

इंटरव्यूअर क्या परीक्षण कर रहा है

जर्नल और इन्वेंट्री की भूमिकाओं, पहले बैकफिल के प्रभाव, विलोपन (deletion) और लाइफसाइकिल इवेंट्स, Iceberg टेबल्स को क्वेरी करने, और देरी, डुप्लिकेट्स व अंतराल (gaps) को संभालने की व्याख्या करें। टेबल-बकेट IAM, क्रॉस-अकाउंट एक्सेस, संवेदनशील मेटाडेटा, पार्टिशनिंग और स्कैन लागत, डेटा रिटेंशन और पुनर्निर्माण (rebuild) प्रक्रियाओं को कवर करें।

स्पष्टीकरण के लिए प्रश्न

  • क्या प्रश्नों (queries) को वर्तमान स्थिति, परिवर्तन इतिहास, या दोनों की आवश्यकता है?
  • डिस्कवरी में कितनी देरी स्वीकार्य है, और क्या विलोपन या लाइफसाइकिल ट्रांज़िशन रीयल-टाइम होना चाहिए?
  • ऑब्जेक्ट्स की संख्या, दैनिक परिवर्तन की मात्रा, क्वेरी आयाम और रिटेंशन अवधि क्या है?
  • टेनेंट, एन्क्रिप्शन, टैग या कस्टम फ़ील्ड सहित मेटाडेटा कौन पढ़ सकता है?
  • क्या क्रॉस-अकाउंट या क्रॉस-रीजन उपयोग की आवश्यकता है, या केवल एक AWS अकाउंट की?
  • यदि टेबल कॉन्फ़िगरेशन हटा दिया जाता है या बैकफिल विफल हो जाता है तो रिकवरी-टाइम ऑब्जेक्टिव (RTO) क्या है?

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

"वर्तमान-ऑब्जेक्ट की बेसलाइन स्थापित करने के लिए इन्वेंट्री का और बाद के परिवर्तनों को ट्रैक करने के लिए जर्नल का उपयोग करें; क्वेरी अनुबंध (contract) में स्नैपशॉट और इतिहास की गारंटियों को स्पष्ट करें। बैकफिल के दौरान अपूर्ण स्थिति को उजागर करें, इवेंट समय और ऑब्जेक्ट वर्ज़न द्वारा उपभोक्ताओं को डुप्लिकेट-मुक्त (deduplicate) करें, और अंतराल व लैग पर अलर्ट दें। टेबल-बकेट रिसोर्स नीतियों के साथ पढ़ने को प्रतिबंधित करें, सामान्य प्रश्नों को प्रून करें, और स्टोरेज, स्कैन व प्रति-ऑब्जेक्ट लागतों का मॉडल बनाएं। यदि कॉन्फ़िगरेशन खो जाता है, तो स्रोत S3 और ऑडिट निर्यात को सुरक्षित रखें, वर्ज़न्ड कॉन्फ़िगरेशन से पुनर्निर्माण करें, और बेसलाइन का मिलान (reconcile) करें।"

चरण-दर-चरण उत्तर

चरण 1: डेटा-उत्पाद की सीमा को परिभाषित करें

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

चरण 2: बैकफिल और कटओवर डिज़ाइन करें

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

चरण 3: स्नैपशॉट और इवेंट्स को मर्ज करें

ऑब्जेक्ट की, इवेंट समय और इवेंट प्रकार के साथ प्रोसेसिंग को इडेम्पोटेंट (idempotent) बनाएं। विलोपन, ओवरराइट और लाइफसाइकिल परिवर्तनों के लिए ऑडिट रिकॉर्ड रखें। उपभोक्ताओं को जर्नल को फिर से चलाना (replay) चाहिए और समय-समय पर इन्वेंट्री के साथ सामंजस्य बिठाना चाहिए, इंडेक्स को आँख मूंदकर रीसेट करने के बजाय अंतरालों को सुधारना चाहिए।

चरण 4: एक्सेस और संवेदनशील फ़ील्ड सुरक्षित करें

प्रिंसिपल्स, प्रीफिक्स और ऑपरेशनों को प्रतिबंधित करने के लिए टेबल बकेट और टेबल्स पर IAM रिसोर्स नीतियों का उपयोग करें। डेटा वर्ग द्वारा टेनेंट, टैग और एन्क्रिप्शन फ़ील्ड को अधिकृत करें, और केवल आवश्यक कॉलम लौटाएं। क्रॉस-अकाउंट उपयोग के लिए, बकेट स्वामित्व, क्वेरी-लागत स्वामित्व और निरस्तीकरण (revocation) प्रसार को परिभाषित करें।

चरण 5: लागत नियंत्रित करें और विफलता से उबरें

सामान्य फ़िल्टरों के लिए व्युत्पन्न (derived) तालिकाओं को पार्टिशन या मटीरियलाइज़ करें, जिससे पूर्ण स्कैन और लगातार तदर्थ (ad-hoc) प्रश्नों को सीमित किया जा सके। जर्नल, इन्वेंट्री, स्कैन वॉल्यूम और प्रति-ऑब्जेक्ट लागत को ट्रैक करें। यदि कोई कॉन्फ़िगरेशन हटा दिया जाता है, कोई रीजन असमर्थित है, या सेवा विफल हो जाती है, तो स्रोत इवेंट्स और निर्यात किए गए स्नैपशॉट को बनाए रखें, वर्ज़न्ड कॉन्फ़िगरेशन से पुनर्निर्माण करें, और फिर से सामंजस्य स्थापित करें।

मॉडल उत्तर

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

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

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

फॉलो-अप प्रश्न

फॉलो-अप 1: जर्नल और इन्वेंट्री एक साथ कैसे काम करते हैं?

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

फॉलो-अप 2: आप अपूर्ण बैकफिल का पता कैसे लगाते हैं?

बैकफिल स्थिति, कवरेज और विफलताओं को ट्रैक करें और अपूर्ण स्थिति को क्वेरी लेयर पर प्रसारित करें। पूर्ण-कवरेज निष्कर्ष पूरा होने की प्रतीक्षा करते हैं या परिणामों को स्पष्ट रूप से अपूर्ण के रूप में चिह्नित करते हैं।

फॉलो-अप 3: आप डुप्लिकेट इवेंट्स को कैसे संभालते हैं?

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

फॉलो-अप 4: आपको S3 Metadata tables से कब बचना चाहिए?

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

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

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

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

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

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

टूल देखें