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

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

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

प्रश्न

आपको एक ऐसी सर्विस की आवश्यकता है जो कई टेनेंट्स के 100 मिलियन दस्तावेज़ों के लिए एम्बेडिंग्स को स्टोर करे। एक क्वेरी को p95 पर 150 ms के भीतर शीर्ष 20 प्रासंगिक दस्तावेज़ लौटाने होंगे, टेनेंट और ACL फ़िल्टर लागू करने होंगे, अपडेट्स को एक मिनट के भीतर खोजने योग्य बनाना होगा, और रिकॉल, लागत और फ्रेशनेस मेट्रिक्स को प्रदर्शित करना होगा। सर्विस को डिज़ाइन करें और इंडेक्सिंग, शार्डिंग, फ़िल्टरिंग, अपडेट्स और मूल्यांकन की व्याख्या करें।

प्रॉम्प्ट और दायरा

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

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

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

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

  • वेक्टर आयाम (dimension), दूरी फ़ंक्शन (distance function), प्रति टेनेंट दस्तावेज़ गणना, और अपेक्षित क्वेरी दर क्या है?
  • क्या टेनेंट और ACL फ़िल्टर अनिवार्य हार्ड बाधाएं हैं, या पुनर्प्राप्ति (retrieval) के बाद परिणाम को हटाया जा सकता है?
  • क्या प्रत्येक राइट (write) के लिए एक मिनट की फ्रेशनेस आवश्यक है, या केवल हॉट कलेक्शंस के सबसेट के लिए?
  • क्या हमें हाइब्रिड कीवर्ड प्लस वेक्टर सर्च, री-रैंकिंग, या केवल निकटतम-पड़ोसी रिट्रीवल की आवश्यकता है?
  • क्या एम्बेडिंग मॉडल बदल सकता है, और क्या माइग्रेशन के दौरान पुराने वेक्टर्स को क्वेरी योग्य बने रहना चाहिए?

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

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

चरण-दर-चरण विस्तृत विश्लेषण

1. डेटा और विजिबिलिटी अनुबंध को परिभाषित करें

document_id, tenant_id, ACL विशेषताएँ, एम्बेडिंग मॉडल वर्ज़न, सामग्री वर्ज़न, वेक्टर, और अपडेट किया गया टाइमस्टैम्प स्टोर करें। एक डिलीट वर्ज़न के साथ एक टॉम्बस्टोन होता है, न कि यह तत्काल धारणा कि प्रत्येक प्रतिकृति (replica) ने वेक्टर को हटा दिया है। एक क्वेरी को रिट्रीवल से पहले अधिकृत किया जाता है; टेनेंट और ACL प्रेडिकेट्स अनिवार्य बाधाएं हैं, जबकि प्रासंगिकता रैंकिंग केवल अधिकृत उम्मीदवारों पर लागू होती है।

2. एक ANN इंडेक्स और पार्टिशनिंग चुनें

ब्रूट-फ़ोर्स खोज में आयाम D के N वेक्टर्स के लिए लगभग O(N × D) दूरी संचालन लागत आती है। 100 मिलियन वेक्टर्स पर, यह 150 ms के लक्ष्य के लिए अनुपयुक्त है, इसलिए HNSW या इनवर्टेड-फ़ाइल (IVF) दृष्टिकोण जैसे ANN इंडेक्स का उपयोग करें। HNSW मेमोरी ओवरहेड के साथ उच्च रिकॉल और तेज़ रीड्स का समर्थन करता है; क्लस्टर या क्वांटाइज़्ड इंडेक्स मेमोरी और लागत को कम करते हैं लेकिन ट्यूनिंग और रिकॉल जोखिम जोड़ते हैं। टेनेंट-अवेयर नेमस्पेस या शार्ड्स से शुरुआत करें, फिर हॉट टेनेंट्स को विभाजित करें और भारी-रीड वाले पार्टिशन्स की प्रतिकृति बनाएं। एक सार्वभौमिक Big-O या रिकॉल संख्या का दावा न करें; चुनी गई लाइब्रेरी और आयाम का बेंचमार्क करें।

3. फ़िल्टरिंग को रिट्रीवल की शुद्धता का हिस्सा बनाएं

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

4. नए राइट्स को कॉम्पैक्टेड सेगमेंट्स से अलग करें

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

5. मॉडल और स्कीमा माइग्रेशन को संभालें

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

6. क्वेरी पाथ और ओवरलोड नीति डिज़ाइन करें

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

7. प्रासंगिकता, फ्रेशनेस और लागत को मापें

प्रासंगिक और निषिद्ध दस्तावेज़ों के साथ एक लेबल किया गया क्वेरी सेट बनाएं। सैंपल्ड पार्टिशन्स पर एक सटीक-खोज बेसलाइन के साथ ANN परिणामों की तुलना करें, और recall@20, प्रिसिजन या nDCG, फ़िल्टर शुद्धता, और प्राधिकरण लीकेज परीक्षणों की रिपोर्ट करें। p50/p95/p99 लेटेंसी, उम्मीदवार गणना, इंडेक्स निर्माण समय, राइट-टू-विजिबल लैग, टॉम्बस्टोन बैकलॉग, प्रति वेक्टर मेमोरी, और प्रति हज़ार क्वेरी लागत को ट्रैक करें। ऑफ़लाइन मेट्रिक्स रैंकिंग के प्रतिगमन (regressions) को पकड़ते हैं; ऑनलाइन क्लिक मेट्रिक्स को सुरक्षा उपायों (guardrails) की आवश्यकता होती है क्योंकि स्थिति पूर्वाग्रह (position bias) एक खराब परिणाम को लोकप्रिय बना सकता है।

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

HNSW बनाम क्लस्टर्ड या क्वांटाइज़्ड इंडेक्स

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

नेटिव वेक्टर स्टोर बनाम मौजूदा डेटाबेस

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

प्रति टेनेंट एक इंडेक्स बनाम साझा पार्टिशन

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

उच्च गुणवत्ता वाला नमूना उत्तर

“मैं एक ड्यूरेबल राइट लॉग से शुरुआत करूँगा और प्रत्येक दस्तावेज़, ACL और एम्बेडिंग मॉडल का वर्ज़न बनाऊँगा। क्वेरी टियर टेनेंट को अधिकृत करता है, प्रासंगिक शार्ड्स में फ़ैन आउट करता है, फ़िल्टर की गई ANN खोज चलाता है, और एक फ्रेश डेल्टा इंडेक्स को इम्यूटेबल सेगमेंट्स के साथ मर्ज करता है। HNSW एक रीड-हैवी बेसलाइन है, लेकिन मैं recall@20 और p95 लेटेंसी का उपयोग करके क्लस्टर्ड या क्वांटाइज़्ड इंडेक्स के खिलाफ इसका बेंचमार्क करूँगा। पुनर्निर्माण मैनिफ़ेस्ट को एटॉमिक रूप से प्रकाशित करते हैं, मॉडल परिवर्तन शैडो क्वेरीज़ का उपयोग करते हैं, और डिलीट वर्ज़न्ड टॉम्बस्टोन होते हैं। सेवा फ़िल्टर शुद्धता, राइट-टू-विजिबल लैग, प्राधिकरण लीकेज परीक्षण, प्रति वेक्टर मेमोरी और क्वेरी लागत की रिपोर्ट करती है; प्रासंगिकता एक मापा गया अनुबंध है।”

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

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

अनुवर्ती प्रश्न और उत्तर

क्या होगा यदि कोई ACL फ़िल्टर केवल तीन मैच छोड़ता है?

एक स्पष्ट total_or_completeness सिग्नल के साथ तीन लौटाएं, या API अनुबंध के अनुसार एक खाली/अपर्याप्त प्रतिक्रिया लौटाएं। शेष स्लॉट को कभी भी अनधिकृत या अनफ़िल्टर किए गए परिणामों से न भरें। उम्मीदवार पूल को केवल अधिकृत खोज पथ के भीतर बढ़ाएं।

आप राइट्स को खोए बिना किसी इंडेक्स का पुनर्निर्माण कैसे करते हैं?

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

आप पुराने मॉडल वेक्टर्स को कब हटा सकते हैं?

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

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

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

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

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

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

टूल देखें