प्रॉम्प्ट और दायरा
प्रदाता एक माइग्रेशन विंडो के बाद /v1/items को हटाना चाहता है, लेकिन क्लाइंट्स का स्वामित्व विभिन्न टीमों के पास है और कुछ निष्क्रिय (dormant) हैं। मान लें कि प्रदाता क्लाइंट पहचान द्वारा अनुरोधों को ट्रैक कर सकता है और /v2/items को समानांतर में चला सकता है। इस योजना को डेप्रिकेशन की घोषणा और हटाने की तारीख के बीच अंतर करना चाहिए, एक सुरक्षित फॉलबैक बनाए रखना चाहिए, और यह दावा करने से बचना चाहिए कि केवल एक हेडर ही क्लाइंट्स को माइग्रेट कर देता है।
इंटरव्यूअर क्या जांच रहा है
- प्रोटोकॉल सिग्नल्स, दस्तावेज़ीकरण, क्लाइंट इन्वेंट्री और एनफोर्समेंट को अलग-अलग करना।
- एडिटिव (additive) कम्पैटिबिलिटी और एक मापने योग्य माइग्रेशन गेट डिजाइन करना।
- अज्ञात क्लाइंट्स, लंबे समय से चले आ रहे इंटीग्रेशन्स और आपातकालीन रोलबैक को संभालना।
- मानकों से परे अपने मन से सिमेंटिक्स बनाए बिना स्टेटस कोड और हेडर्स का चयन करना।
पूछे जाने वाले स्पष्टीकरण प्रश्न
पूछें कि क्या क्लाइंट्स एक स्थिर पहचान भेजते हैं, क्या /v2 एडिटिव हो सकता है, न्यूनतम सपोर्ट अवधि क्या है, अनुबंध से संबंधित नोटिस की आवश्यकताएं क्या हैं, और क्या पुराने एंडपॉइंट को हटाने से पहले केवल पढ़ने के लिए (read-only) बनाया जा सकता है। यदि पहचान उपलब्ध नहीं है, तो माइग्रेशन का प्रमाण अनुमानित यूजर एजेंट्स के बजाय क्रेडेंशियल्स, नेटवर्क मेटाडेटा, या स्पष्ट पंजीकरण से आना चाहिए।
30-सेकंड का उत्तर
मैं कॉलर्स की इन्वेंट्री बनाऊंगा, एक वर्ज़न्ड माइग्रेशन गाइड प्रकाशित करूंगा, /v2 को एडिटिव रूप से रोल आउट करूंगा, और प्रति-क्लाइंट ट्रैफ़िक तथा एरर पैरिटी को मापूंगा। /v1 को मानकीकृत Deprecation सिग्नल और Sunset तिथि के साथ चिह्नित करूंगा, जबकि ज्ञात स्वामियों के लिए एक डैशबोर्ड और सीधे नोटिस उपलब्ध कराऊंगा। पुराने पाथ को एक निर्धारित विंडो के दौरान बनाए रखूंगा, केवल एक एविडेंस गेट के बाद ही एनफोर्समेंट लागू करूंगा, और माइग्रेशन लिंक के साथ एक प्रलेखित टर्मिनल रिस्पॉन्स लौटाऊंगा। यदि कोई महत्वपूर्ण क्लाइंट प्रभावित होता है, तो एक फीचर फ़्लैग और रिवर्सिबल रूटिंग रोलबैक की सुविधा प्रदान करेंगे।
चरण-दर-चरण विस्तृत विश्लेषण
1. कम्पैटिबिलिटी और साक्ष्य स्थापित करें
फ़ील्ड-स्तरीय अंतर, डिफ़ॉल्ट व्यवहार, पेजिनेशन, त्रुटियों और प्रमाणीकरण परिवर्तनों को परिभाषित करें। दोनों संस्करणों के विरुद्ध कॉन्ट्रैक्ट टेस्ट चलाएं और प्रतिनिधि रिस्पॉन्स की तुलना करें। क्लाइंट, वर्ज़न, एंडपॉइंट, स्टेटस और माइग्रेशन स्थिति के आधार पर मेट्रिक्स को टैग करें; केवल कुल मिलाकर (aggregate) ट्रैफ़िक का उपयोग न करें क्योंकि कम वॉल्यूम वाला क्लाइंट भी व्यवसाय के लिए महत्वपूर्ण हो सकता है।
2. डेप्रिकेशन का सटीक संकेत दें
Deprecation रिस्पॉन्स हेडर यह बताता है कि कोई संसाधन अप्रचलित (deprecated) हो गया है; Sunset हेडर एक नियोजित तिथि बताता है जिसके बाद वह अनुपलब्ध हो सकता है। ये केवल सिग्नल्स हैं, यह कोई गारंटी नहीं है कि हर क्लाइंट उन्हें समझता ही है। दस्तावेज़ीकरण और स्वामियों के नोटिफिकेशन्स में इस तिथि को दोहराएं, और रिस्पॉन्स बॉडी या API कॉन्ट्रैक्ट द्वारा परिभाषित लिंक रिलेशन में एक स्थिर माइग्रेशन संदर्भ शामिल करें।
3. चरणों में माइग्रेट और एनफोर्स करें
चेतावनियों और डैशबोर्ड के साथ शुरुआत करें, फिर उन क्लाइंट्स के लिए स्पष्ट अपवादों (exceptions) की मांग करें जो समय सीमा से चूक जाते हैं। डिफ़ॉल्ट बदलने से पहले शैडो तुलना या ऑप्ट-इन ट्रैफ़िक की पेशकश करें। एनफोर्समेंट गेट पर, केवल उसी पुराने ऑपरेशन को अस्वीकार करें जिसे रिटायर करना सुरक्षित है, मशीन द्वारा पढ़ा जा सकने वाला एरर लौटाएं, और एक सपोर्ट पाथ बनाए रखें। जोखिम अलग होने पर केवल पढ़ने योग्य कम्पैटिबिलिटी को म्यूटेटिंग कम्पैटिबिलिटी की तुलना में अधिक समय तक बढ़ाया जा सकता है।
4. रोलबैक और गवर्नेंस को वास्तविक बनाए रखें
सनसेट की तारीख, स्वामी, अपवाद का कारण और अनुमोदन को एक परिवर्तन रिकॉर्ड (change record) में संग्रहीत करें। माइग्रेशन के बाद के एरर डेल्टा और अज्ञात क्लाइंट्स से आने वाले अनुरोधों पर अलर्ट सेट करें। पुराने पाथ को एक फीचर फ़्लैग के माध्यम से रूट करें ताकि रोलबैक कोड को फिर से डिप्लॉय करने के बजाय सिर्फ एक कॉन्फ़िगरेशन परिवर्तन हो। हटाने के बाद, टेलीमेट्री और एक टॉम्बस्टोन (tombstone) रिस्पॉन्स को इतने समय तक बनाए रखें कि गोपनीयता उजागर किए बिना विफलता की व्याख्या की जा सके।
एक उत्कृष्ट नमूना उत्तर
मैं 10,000 कॉलर्स की इन्वेंट्री बनाऊंगा और /v1 से /v2 के सटीक कॉन्ट्रैक्ट अंतरों को परिभाषित करूंगा। दोनों वर्ज़न्स प्रति-क्लाइंट मेट्रिक्स और कॉन्ट्रैक्ट टेस्ट के साथ समानांतर चलेंगे। /v1 रिस्पॉन्स में Deprecation और Sunset सिग्नल्स शामिल होंगे, जबकि दस्तावेज़ीकरण और स्वामी नोटिस तारीख और माइग्रेशन चरणों को दोहराएंगे। प्रदाता चेतावनी, ऑप्ट-इन, डिफ़ॉल्ट-टू-v2 और एनफोर्समेंट चरणों के माध्यम से आगे बढ़ेगा, जिसमें स्पष्ट अपवाद और मशीन द्वारा पढ़ा जा सकने वाला टर्मिनल एरर शामिल होगा। एक फीचर फ़्लैग रोलबैक को संभव बनाए रखता है; सनसेट गेट कुल ट्रैफ़िक प्रतिशत के बजाय क्लाइंट-स्तरीय साक्ष्य पर आधारित होता है।
सामान्य गलतियां
- यह मान लेना कि हेडर माइग्रेशन कर देगा → कई क्लाइंट्स इसे अनदेखा करते हैं → स्टैंडर्ड सिग्नल्स को स्वामी की पहचान और गाइड के साथ जोड़ें।
- इन्वेंट्री के बिना तारीख तय करना → निष्क्रिय लेकिन महत्वपूर्ण क्लाइंट्स अप्रत्याशित रूप से विफल हो जाते हैं → क्लाइंट पहचान और अपवाद समीक्षा की आवश्यकता रखें।
- केवल कुल एरर दरों की तुलना करना → एक टेनेंट का आउटेज औसत में छिप जाता है → प्रति-क्लाइंट पैरिटी और वॉल्यूम की निगरानी करें।
/v2के शिप होते ही तुरंत हटा देना → क्लाइंट्स के पास कम्पैटिबिलिटी का कोई प्रमाण नहीं होता → पहले समानांतर या ऑप्ट-इन चरण चलाएं।- रोलबैक को दोबारा डिप्लॉयमेंट पर निर्भर बनाना → आउटेज के दौरान रिकवरी धीमी होती है → वर्ज़न्स को एक रिवर्सिबल फ़्लैग के पीछे रूट करें।
- सनसेट पर एक अप्रलेखित 404 लौटाना → ऑटोमेशन हटाने और टाइपो के बीच अंतर नहीं कर सकता → एक स्थिर टर्मिनल एरर और माइग्रेशन संदर्भ प्रकाशित करें।
फॉलो-अप प्रश्न और उत्तर
एक क्लाइंट कभी भी पहचान करने वाला हेडर नहीं भेजता है। माइग्रेशन गेट क्या होगा?
प्रदाता के पास पहले से उपलब्ध क्रेडेंशियल, अकाउंट, नेटवर्क या पंजीकरण पहचान का उपयोग करें। यदि कोई भी विश्वसनीय नहीं है, तो एंडपॉइंट को अधिक समय तक उपलब्ध रखें और एनफोर्समेंट से पहले स्पष्ट पंजीकरण की मांग करें।
क्या Sunset की तारीख बदली जा सकती है?
हाँ, यदि परिवर्तन रिकॉर्ड, दस्तावेज़ीकरण, हेडर्स और स्वामी के नोटिफिकेशन्स को एक साथ अपडेट किया जाए। तारीख को एक गवर्नेंस प्रतिबद्धता के रूप में मानें और उन क्लाइंट्स पर अलर्ट करें जो अभी भी पुराने पाथ पर निर्भर हैं।
क्या होगा यदि /v2 सही है लेकिन किसी एक क्लाइंट के लिए धीमा है?
क्लाइंट की लेटेंसी और एरर बजट की अलग से तुलना करें, फिर ऑप्टिमाइज़ करें या सीमित समय का अपवाद प्रदान करें। यह प्रमाण मिले बिना कि समस्या पूरे सिस्टम में है, सभी उपयोगकर्ताओं के सनसेट विंडो को न बढ़ाएं।
आप किसी म्यूटेटिंग एंडपॉइंट को सुरक्षित रूप से कैसे रिटायर करते हैं?
एविडेंस गेट के बाद नए राइट्स (writes) को रोकें, जब संभव हो तो रीड एक्सेस को बनाए रखें, और पुनः प्रयासों (retries) पर एक सुसंगत (deterministic) टर्मिनल एरर लौटाएं। हटाने से पहले पुष्टि करें कि डाउनस्ट्रीम कतारें और ऑडिट रिकॉर्ड अब पुराने म्यूटेशन पर निर्भर नहीं हैं।