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

बैकएंड इंटरव्यू: रीप्ले-सुरक्षित (Replay-Safe) HTTP Early-Data API डिज़ाइन करना

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

प्रश्न

आपकी API एज लेटेंसी कम करने के लिए TLS 1.3 0-RTT सक्षम करने वाली है, लेकिन व्यवसाय में ऑर्डर्स, चार्जेस और आइडेम्पोटेंट क्वेरीज़ शामिल हैं। आप अनुरोधों को कैसे वर्गीकृत करेंगे, रीप्ले को कैसे रोकेंगे, 425 Too Early का उपयोग कैसे करेंगे, और क्लाइंट रीट्राई को कैसे नियंत्रित करेंगे ताकि एक अनुरोध दो बार निष्पादित न हो सके?

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

यह प्रश्न यह जांचता है कि क्या आप ट्रांसपोर्ट-स्तरीय लेटेंसी अनुकूलन को एक स्पष्ट व्यावसायिक सुरक्षा सीमा में बदल सकते हैं। TLS 1.3 early data कनेक्शन पूरी तरह से स्थापित होने से पहले भेजा जा सकता है, और RFC 8470 स्पष्ट रूप से रीप्ले जोखिम की चेतावनी देता है। इसलिए अनुरोध की सुरक्षा केवल HTTP मेथड के नाम से तय नहीं की जा सकती। अनुरोध वर्गों, स्थिति परिवर्तनों (state transitions), आइडेम्पोटेंसी, कैश और प्रॉक्सी, क्लाइंट रीट्राई, मॉनिटरिंग और फॉलबैक को कवर करें।

इंटरव्यूअर क्या मूल्यांकन कर रहा है

  • क्या आप हानिरहित बार-बार होने वाले रीड्स और बार-बार होने वाले साइड इफेक्ट्स के बीच अंतर करते हैं।
  • क्या आप early data को एक स्पष्ट सुरक्षित सेट तक सीमित करते हैं और अनिश्चित अनुरोधों को एक स्पष्ट अस्वीकृति पथ (rejection path) प्रदान करते हैं।
  • क्या 425, आइडेम्पोटेंसी कीज़, डिडुप्लिकेशन (deduplication) और रीट्राई बैकऑफ़ एक साथ मिलकर काम करते हैं।
  • क्या आप प्रॉक्सी चेन्स, लॉग्स, मेट्रिक्स, रोलबैक और चरणबद्ध रोलआउट नियंत्रणों को समझा सकते हैं।

पहले पूछे जाने वाले स्पष्टीकरण प्रश्न

पुष्टि करें कि किन अनुरोधों में early data हो सकता है, TLS कहाँ समाप्त (terminate) होता है, और क्या एज के बाद प्रॉक्सी या संदेश रीट्राई होते हैं। कौन से ऑपरेशन्स बैलेंस, इन्वेंट्री, ऑर्डर्स, अनुमतियों या सूचनाओं को बदलते हैं? क्या व्यवसाय के पास पहले से ही आइडेम्पोटेंसी कीज़, अनुरोध-स्थिति तालिका (request-state table) और अद्वितीय बाधाएं (unique constraints) हैं? क्या क्लाइंट्स, SDKs और गेटवे 425 को समझते हैं? कौन रीट्राई करता है, कितनी बार, और किस एक्सपोनेंशियल बैकऑफ़ और जिटर के साथ? यदि डिडुप्लिकेशन स्टोरेज अनुपलब्ध है, तो क्या सेवा को अस्वीकार करना चाहिए, पूर्ण हैंडशेक पर वापस जाना चाहिए, या केवल-पढ़ने (read-only) के ट्रैफ़िक को जारी रखना चाहिए?

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

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

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

1. early data के लिए ट्रस्ट बाउंड्री परिभाषित करें

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

2. व्यावसायिक साइड इफेक्ट के आधार पर वर्गीकृत करें

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

3. 425 और पूर्ण-हैंडशेक फॉलबैक डिज़ाइन करें

उन पथों के लिए 425 Too Early लौटाएं जो early data की अनुमति नहीं देते हैं और दस्तावेज़ करें कि क्लाइंट पुनः भेजने से पहले पूर्ण हैंडशेक कैसे पूरा करता है। एक गेटवे को हमेशा के लिए 425 को रीट्राई नहीं करना चाहिए। रिकॉर्ड करें कि क्या मूल अनुरोध एप्लिकेशन तक पहुँच गया होगा ताकि एज और क्लाइंट दोनों रीट्राई करके लोड को न बढ़ाएं। जब क्लाइंट की क्षमता अज्ञात हो, तो मूक निष्पादन (silent execution) की तुलना में स्पष्ट विफलता अधिक सुरक्षित होती है।

4. आइडेम्पोटेंसी कीज़ और स्टेट मशीन का उपयोग करें

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

5. रीट्राई और प्रॉक्सी व्यवहार को सीमित करें

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

6. मॉनिटर करें, रोल आउट करें और फॉलबैक करें

रीड पथों और छोटे टेनेंट सेट के साथ शुरुआत करें, रूट, क्लाइंट और क्षेत्र के अनुसार स्विच बनाए रखें। early-data वॉल्यूम, 425 दर, डुप्लिकेट-की संघर्ष, डुप्लिकेट शुल्क या इन्वेंट्री विसंगतियाँ, रीट्राई प्रवर्धन (amplification), पूर्ण-हैंडशेक लेटेंसी और डिडुप्लिकेशन-स्टोर त्रुटियों को ट्रैक करें। यदि सीमाएं पार हो जाती हैं, तो रोलआउट रोकें, early data को अक्षम करें, या पूर्ण हैंडशेक बाध्य करें, और यह निर्धारित करने के लिए ऑडिट नमूने बनाए रखें कि क्या कोई अनुरोध वास्तव में निष्पादित हुआ था।

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

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

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

  • यह मान लेना कि एन्क्रिप्टेड TLS का अर्थ है कि early data को रीप्ले नहीं किया जा सकता।
  • वास्तविक व्यावसायिक साइड इफेक्ट्स के बजाय केवल मेथड के नाम के आधार पर वर्गीकरण करना।
  • गेटवे और क्लाइंट दोनों को बिना किसी सीमा के 425 को रीट्राई करने की अनुमति देना।
  • आइडेम्पोटेंसी की से टेनेंट और पैरामीटर बाइंडिंग को छोड़ देना।
  • केवल सफलता को कैश करना और प्रोसेसिंग स्थिति या रीट्राई योग्य विफलता सिमेंटिक्स को अनदेखा करना।
  • डुप्लिकेट चार्जेस, इन्वेंट्री विसंगतियों या रीट्राई प्रवर्धन के बिना केवल लेटेंसी लाभ को मापना।
  • रूट-स्तरीय अक्षमता, पूर्ण-हैंडशेक फॉलबैक और ऑडिट मिलान को छोड़ देना।

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

425 और 429 में क्या अंतर है?

425 का अर्थ है कि अनुरोध वर्तमान early-data स्थिति के तहत बहुत जल्दी आ गया और इसे पूर्ण हैंडशेक के बाद फिर से भेजा जाना चाहिए। 429 का अर्थ है कि अनुरोध एक दर या कोटा सीमा तक पहुँच गया है। उनकी रीट्राई स्थितियाँ, प्रतीक्षा संकेत और मॉनिटरिंग के अर्थ अलग-अलग हैं, इसलिए उन्हें एक स्वचालित रीट्राई शाखा साझा नहीं करनी चाहिए।

क्या होगा यदि क्लाइंट 425 का समर्थन नहीं करता है?

महत्वपूर्ण राइट पथों के लिए, क्लाइंट की व्याख्या पर निर्भर रहने के बजाय गेटवे पर early data को अस्वीकार करें या पूर्ण हैंडशेक बाध्य करें। अपग्रेड किए गए SDK में संगतता व्यवहार प्रदान करें। केवल-पढ़ने के पथ जारी रह सकते हैं, लेकिन क्लाइंट क्षमता और जोखिम सीमा को रिकॉर्ड करें।

यदि आइडेम्पोटेंसी स्टोर डाउन है तो क्या चार्ज जारी रहना चाहिए?

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

क्या सेवा द्वारा 425 लौटाने के बाद early-data अनुरोध निष्पादित हो सकता है?

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

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

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