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

सिस्टम डिज़ाइन इंटरव्यू: आप शैडो-ट्रैफ़िक वैलिडेशन सिस्टम (Shadow-Traffic Validation System) कैसे डिज़ाइन करेंगे?

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

प्रश्न

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

प्रॉम्प्ट और दायरा (Scope)

प्रति सेकंड 20,000 रिक्वेस्ट्स प्राप्त करने वाली सेवा के लिए एक शैडो-ट्रैफ़िक सिस्टम डिज़ाइन करें। प्राइमरी रिक्वेस्ट को अपनी मौजूदा p99 लेटेंसी बनाए रखनी चाहिए, जबकि शैडो वर्शन पीछे छूट सकता है (lag कर सकता है)। सिस्टम को प्रति एंडपॉइंट सैंपलिंग करनी चाहिए, मिसमैच को फिर से रीप्ले करने के लिए पर्याप्त साक्ष्य बनाए रखना चाहिए, सार्थक रिस्पॉन्स फ़ील्ड्स की तुलना करनी चाहिए, और कभी भी किसी मिरर्ड रिक्वेस्ट को पेमेंट, ईमेल या अन्य बाहरी साइड इफेक्ट भेजने की अनुमति नहीं देनी चाहिए।

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

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

इंटरव्यूअर एक सुरक्षित तुलना तंत्र (comparison harness) की तलाश कर रहा है, न कि कॉपी किए गए ट्रैफ़िक वाली दूसरी प्रोडक्शन सेवा की। बेहतरीन उत्तर प्राइमरी लेटेंसी पाथ को सुरक्षित रखते हैं, क्रेडेंशियल्स हटाते हैं, राइट्स (writes) को अलग (isolate) करते हैं, सैंपलिंग को पुनरुत्पादक (reproducible) बनाते हैं, और बताते हैं कि बाइट-दर-बाइट तुलना (diff) अक्सर गलत क्यों होती है।

वे जांच करेंगे कि जब कैप्चर कतार (queue) भर जाती है, जब शैडो धीमा होता है, जब रिस्पॉन्स में टाइमस्टैम्प होते हैं, और जब प्राइमरी पहले ही राइट ऑपरेशन कर चुका होता है, तब क्या होता है। इनमें से प्रत्येक को एक स्पष्ट नीति (policy) के रूप में मानें।

स्पष्टीकरण जो डिज़ाइन को बदलते हैं

  • क्या रिक्वेस्ट्स केवल रीड-ओनली हैं? रीड-ओनली रिक्वेस्ट्स को सीधे रीप्ले किया जा सकता है; बदलाव करने वाली (mutating) रिक्वेस्ट्स के लिए सैंडबॉक्स, स्टब्स या एक सिंथेटिक पहचान की आवश्यकता होती है।
  • क्या तुलना सटीक है या सेमेंटिक? सटीक तुलना डिटरमिनिस्टिक JSON के लिए उपयुक्त है; मास्क या इनवेरिएंट चेक टाइमस्टैम्प और जनरेटेड ID के लिए उपयुक्त हैं।
  • क्या कैप्चर की गई बॉडी में व्यक्तिगत डेटा हो सकता है? यदि हाँ, तो स्टोरेज से पहले रिडैक्ट (redact) करें, संदर्भों को एन्क्रिप्ट करें, और डेटा रिटेंशन व एक्सेस ऑडिट परिभाषित करें।
  • क्या लक्ष्य माइग्रेशन की शुद्धता, लेटेंसी, या क्षमता है? लक्ष्य के साथ मीट्रिक और सैंपलिंग नीति बदल जाती है।

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

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

चरण-दर-चरण डिज़ाइन

1. क्रिटिकल पाथ को प्रभावित किए बिना कैप्चर करना

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

एक MirroredRequest प्रकाशित करें जिसमें रिक्वेस्ट ID, ट्रेस ID, एंडपॉइंट, सैनिटाइज़्ड हेडर्स, बॉडी संदर्भ, कैप्चर का समय, टारगेट वर्शन और सैंपलिंग कॉन्फ़िगरेशन वर्शन शामिल हो। एनकतार (enqueue) ऑपरेशन का एक सीमित टाइमआउट होना चाहिए। यदि लोकल बफ़र या ड्यूरेबल कतार भर गई है, तो एक ड्रॉप मीट्रिक रिकॉर्ड करें और प्राइमरी रिस्पॉन्स लौटाएं।

2. सैंपलिंग को पुनरुत्पादक (Reproducible) बनाएं

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

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

3. एक आइसोलेटेड वातावरण में रीप्ले करें

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

कैप्चर कतार के लिए एट-लीस्ट-वन्स (at-least-once) डिलीवरी स्वीकार्य है क्योंकि रीप्ले को रिक्वेस्ट ID द्वारा टैग किया जाता है। वर्कर SHADOW_ERROR, DROPPED, या COMPLETED रिकॉर्ड करता है; शैडो टाइमआउट कभी भी अनिश्चित काल तक पुनः प्रयास नहीं करता है और न ही प्राइमरी को ब्लॉक करता है।

4. अर्थ के आधार पर रिस्पॉन्स की तुलना करें

पहले स्टेटस कोड की तुलना करें। सफल JSON रिस्पॉन्स के लिए, स्पष्ट रूप से नॉन-डिटरमिनिस्टिक घोषित फ़ील्ड्स को हटाएं, फिर चयनित पाथ या कैनोनिकलाइज़्ड बॉडी हैश की तुलना करें। डोमेन इनवेरिएंट्स जोड़ें जैसे "कुल योग गैर-ऋणात्मक (nonnegative) है" या "लौटाया गया यूज़र अनुरोधित टेनेंट से संबंधित है।" लेटेंसी की अलग से तुलना करें; कोई रिस्पॉन्स सही हो सकता है लेकिन प्रमोशन के लिए बहुत धीमा हो सकता है।

दोनों हैश, डिफ पाथ, प्राइमरी और शैडो लेटेंसी, डिप्लॉयमेंट वर्शन और एक सैंपल रिक्वेस्ट संदर्भ स्टोर करें। रिपोर्ट में रॉ (raw) संवेदनशील बॉडी स्टोर न करें।

5. प्रमोशन गेट्स परिभाषित करें

रीप्ले शुरू होने से पहले थ्रेशोल्ड बनाएं: डाइवर्जेंस दर, शैडो एरर दर, लेटेंसी रिग्रेशन, कतार की आयु और रिडैक्शन विफलताएं। एंडपॉइंट, टेनेंट टियर, क्षेत्र और रिस्पॉन्स क्लास द्वारा रिपोर्ट को विभाजित करें; एक समग्र हरा (green) रेट किसी खराब पेमेंट एंडपॉइंट को छिपा सकता है।

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

6. संचालन और रिकवरी

जब शैडो ओवरलोड हो जाए तो कैप्चर को अक्षम किए बिना रीप्ले को रोकें। प्राइवेसी नीति के अनुसार कैप्चर को समाप्त (expire) करें, और संग्रहीत रिक्वेस्ट संदर्भों तक पहुंच का ऑडिट करें। यदि कोई शैडो वर्शन रोलबैक किया जाता है, तो उसकी रिपोर्ट को डिप्लॉयमेंट से लिंक रखें ताकि बाद के विश्लेषण में वर्शन्स का मिश्रण न हो।

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

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

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

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

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

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

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

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

क्या होगा यदि एंडपॉइंट डेटाबेस में लिखता है?

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

यदि कैप्चर कतार भर जाती है तो क्या होगा?

प्राइमरी रिक्वेस्ट के लिए फ़ेल-ओपन (fail-open) रखें: मिरर्ड कॉपी को ड्रॉप करें, एक लेबल किए गए मीट्रिक को बढ़ाएं, और ड्रॉप बजट पार होने पर अलर्ट करें। प्राइमरी पर बैकप्रेशर मुख्य सुरक्षा विशेषता को अमान्य कर देगा।

आप व्यक्तिगत रूप से पहचान योग्य जानकारी (PII) को कैसे संभालते हैं?

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

क्या पैकेट मिररिंग एप्लिकेशन मिररिंग की जगह ले सकता है?

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

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

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

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

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

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

टूल देखें