प्रॉम्प्ट और संदर्भ
एक टेनेंट (tenant) 6,000 की बर्स्ट क्षमता के साथ प्रति मिनट 30,000 अनुरोधों का ग्लोबल अलाउंस खरीदता है। ट्रैफ़िक तीन सक्रिय क्षेत्रों में प्रवेश करता है, और प्रत्येक अनुरोध पर क्रॉस-रीजन निर्णय लेने से लेटेंसी का उद्देश्य पूरा नहीं हो पाएगा। केवल ग्लोबल कोऑर्डिनेशन लेयर को डिज़ाइन करें; यह मान लें कि प्रत्येक क्षेत्र में पहले से ही एक सही लोकल टोकन बकेट मौजूद है।
उत्तर में यह स्पष्ट रूप से मापा जाना चाहिए कि जब मांग क्षेत्रों के बीच स्थानांतरित होती है, कोई क्षेत्र पार्टिशन (अलग-थलग) हो जाता है, या कोऑर्डिनेटर विफल हो जाता है, तब क्या होता है। HTTP 429 और Retry-After क्लाइंट को अस्वीकृति (rejection) की सूचना देते हैं, लेकिन वे आंतरिक लिमिटिंग एल्गोरिदम का चयन नहीं करते हैं।
साक्षात्कारकर्ता क्या मूल्यांकन करता है
- क्या आप यह स्पष्ट करते हैं कि कम लेटेंसी, पार्टिशन उपलब्धता (availability), और सटीक ग्लोबल सीमा (ceiling) सभी को एक साथ नहीं माना जा सकता।
- क्या कोटा हर क्षेत्र में कॉपी करने के बजाय लीज़ (leases) के माध्यम से संरक्षित रहता है।
- क्या अप्रयुक्त क्षमता को बिना डबल स्पेंडिंग के वापस प्राप्त (reclaim) किया जा सकता है।
- क्या विफलता नीति और अधिकतम ओवरशूट मापने योग्य हैं।
पूछने के लिए स्पष्टीकरण प्रश्न
- क्या ग्लोबल संख्या एक सख्त दुरुपयोग सीमा (hard abuse boundary) है या सहन करने योग्य त्रुटि वाला एक व्यावसायिक लक्ष्य है?
- पार्टिशन के दौरान, क्या किसी क्षेत्र को अपनी लीज़ खाली होने पर रुक जाना चाहिए या आपातकालीन भत्ते (emergency allowance) के भीतर जारी रखना चाहिए?
- ट्रैफ़िक कितनी तेज़ी से स्थानांतरित हो सकता है, और क्षेत्रीय मांग कितनी असमान हो सकती है?
- क्या एक अनुरोध की इकाई लागत (unit cost) होती है, या एंडपॉइंट भारित लागत (weighted cost) का उपभोग करते हैं?
- क्या ओवरशूट की तुलना में अस्थायी अल्प-उपयोग (under-utilization) बेहतर है?
एक सख्त सीमा के लिए, एक पार्टिशन किया गया क्षेत्र केवल अपनी गैर-समाप्त लीज़ का उपयोग कर सकता है। एक बेस्ट-एफ़र्ट व्यावसायिक सीमा स्पष्ट रूप से सीमित आपातकालीन भत्ते की अनुमति दे सकती है।
30-सेकंड का उत्तर
“मैं एक दृढ़ता से व्यवस्थित (strongly ordered) कोऑर्डिनेटर से दो लीज़ योग्य संसाधनों का प्रबंधन करवाऊंगा: प्रति सेकंड 500 अनुरोधों की ग्लोबल रिफ़िल दर और 6,000 की ग्लोबल बर्स्ट क्षमता। यह क्षेत्रों को छोटी अवधि की रिफ़िल-दर और बर्स्ट शेयर लीज़ पर देता है, जो अपने मौजूदा लोकल एटॉमिक टोकन बकेट के माध्यम से उपभोग करते हैं। हर समय, ओवरलैप होने वाली सक्रिय लीज़ का योग अधिकतम 500 अनुरोध प्रति सेकंड और 6,000 बर्स्ट टोकन होता है; नवीनीकरण (renewal) लोकल बैलेंस को फिर से भरे बिना मापदंडों को अपडेट करता है। ट्रैफ़िक परिवर्तन के दौरान, पुनरावंटन (reallocation) से पहले एक पुराने शेयर को वापस किया जाना चाहिए या समाप्त होना चाहिए। हार्ड-लिमिट वाला क्षेत्र पार्टिशन के दौरान लीज़ समाप्ति के बाद रुक जाता है; एक बेस्ट-एफ़र्ट क्षेत्र एक अलग आपातकालीन भत्ते का उपयोग कर सकता है जिसका योग प्रलेखित ओवरशूट सीमा है।”
चरण-दर-चरण गहन विश्लेषण
1. कोटे को संरक्षण इनवेरिएंट (conservation invariant) के रूप में बनाए रखना
प्रति मिनट 30,000 अनुरोधों को निरंतर रिफ़िल दर R = 500 req/s में परिवर्तित करें, जिसमें बर्स्ट क्षमता B = 6000 हो। हर समय, sum(active_lease.refill_rate) <= R और sum(active_lease.burst_capacity) <= B। एक लीज़ में टेनेंट, क्षेत्र, युग (epoch), दर शेयर, बर्स्ट शेयर, सक्रियण समय, समाप्ति और अद्वितीय ID शामिल होती है। प्रारंभिक क्षेत्रीय शेष राशि का योग अधिकतम B होता है, और नवीनीकरण, विस्तार या पुनर्गठन शून्य से बैलेंस नहीं बना सकता है; इसलिए किसी भी अंतराल में कुल स्वीकृतियां अधिकतम R × duration + B होती हैं। फ़ेलओवर एक टिकाऊ (durable) लीज़ लेज़र और उच्चतर युग का उपयोग करता है; मौजूदा लीज़ स्वीकृत वापसी या समाप्ति तक दोनों सीमाओं के विरुद्ध गिनी जाती हैं।
2. स्थानीय रूप से उपभोग करना और समाप्त होने से पहले नवीनीकरण करना
क्षेत्रीय बकेट अपनी लीज़ की गई दर पर रिफ़िल होती है और अपने बैलेंस को लीज़ किए गए बर्स्ट शेयर तक सीमित रखती है; प्रत्येक अनुरोध अभी भी एटॉमिक रूप से घटता है। एक निर्बाध नवीनीकरण मौजूदा बैलेंस को बनाए रखते हुए दर और क्षमता का विस्तार या परिवर्तन करता है, बकेट को फिर से भरने के बजाय क्षमता घटने पर इसे काट देता है (truncating)। लीज़ गैप के बाद, अगली लीज़ शून्य बैलेंस से शुरू होती है जब तक कि कोऑर्डिनेटर पुष्टि किए गए रिक्लेम टोकन स्थानांतरित न कर दे। छोटी लीज़ पुनर्संतुलन और विफलता सीमाओं को सख्त बनाती हैं लेकिन नवीनीकरण भार को बढ़ाती हैं। मापे गए पीक, कोऑर्डिनेटर क्षमता और सहन की गई डिस्कनेक्शन अवधि के आधार पर समय अवधि चुनें।
3. बिना डबल स्पेंडिंग के पुनर्संतुलन करना
स्वस्थ क्षेत्र बैलेंस और मांग की रिपोर्ट करते हैं। कोऑर्डिनेटर अपनी अगली लीज़ में कोल्ड क्षेत्र की दर और बर्स्ट शेयर को कम करता है, फिर जारी किए गए शेयरों को हॉट क्षेत्र को देता है। जब तक पुरानी लीज़ के वापस होने की पुष्टि नहीं हो जाती या वह समाप्त नहीं हो जाती, ओवरलैप होने वाली पुरानी और नई लीज़ दोनों को दोनों सीमाओं के विरुद्ध गिना जाता है। वापसी की पावती पहले पुरानी बकेट को अमान्य करती है; हॉट क्षेत्र में क्षमता बढ़ाने से कोई बैलेंस नहीं बनता है, जो शून्य से शुरू होता है या केवल पुष्टि किए गए स्थानांतरित टोकन प्राप्त करता है। रिटर्न इडेम्पोटेंट (idempotent) होते हैं; जब स्थिति अनिश्चित हो, तो एक ही शेयर को दो बार आवंटित करने के बजाय अस्थायी रूप से अल्प-उपयोग करना बेहतर है।
4. विफलता सिमेंटिक्स को स्पष्ट करना
एक सख्त सीमा के साथ, एक क्षेत्र केवल तभी रिफ़िल होता है जब उसकी लीज़ वैध हो। यदि यह नवीनीकरण नहीं कर सकता है, तो समाप्ति स्थानीय बकेट को अमान्य कर देती है और किसी भी ऐसे बैलेंस को छोड़ देती है जो पुष्टि की गई वापसी के माध्यम से स्थानांतरित नहीं किया गया था; इसकी लागत अस्थायी अल्प-उपयोग है। यदि प्रत्येक क्षेत्र में सामान्य बर्स्ट सीमा के बाहर आपातकालीन भत्ता E है, तो अधिकतम अतिरिक्त भत्ता उन बजटों का योग है जो डिस्कनेक्ट होने पर सक्रिय हो सकते हैं, और वह मोड सख्त शून्य ओवरशूट का दावा नहीं कर सकता है। कोऑर्डिनेटर की विफलता जारी की गई लीज़ को अमान्य नहीं करती है। एक प्रतिस्थापन टिकाऊ लेज़र को पुनर्स्थापित करता है, पुराने जारीकर्ता को उच्च युग के साथ फेंस (fence) करता है, और गैर-समाप्त पुरानी लीज़ की गिनती जारी रखता है।
एक मजबूत नमूना उत्तर
“मौजूदा क्षेत्रीय टोकन बकेट सिंक्रोनस पथ पर बने रहते हैं। मैं एक ग्लोबल कोऑर्डिनेटर जोड़ता हूँ जो प्रति मिनट 30,000 अनुरोधों को 500-अनुरोध-प्रति-सेकंड रिफ़िल दर के रूप में दर्शाता है और 6,000 अनुरोधों की बर्स्ट क्षमता का अलग से प्रबंधन करता है। यह युग-फ़ेंस्ड, समाप्त होने वाले दर और बर्स्ट शेयर जारी करता है, जबकि यह सुनिश्चित करता है कि सक्रिय लीज़ का योग अधिकतम 500 अनुरोध प्रति सेकंड और 6,000 बर्स्ट टोकन हो।
प्रत्येक क्षेत्र अपनी स्थानीय बकेट को लीज़ की गई दर पर रिफ़िल करता है और इसे लीज़ किए गए बर्स्ट शेयर पर सीमित करता है। निर्बाध नवीनीकरण बैलेंस को सुरक्षित रखते हैं, और अतिरिक्त क्षमता बैलेंस नहीं बनाती है। एक हॉट क्षेत्र केवल पुष्टि किए गए लौटाए गए टोकन प्राप्त करता है, या कोल्ड लीज़ समाप्त होने के बाद शून्य से रिफ़िल करना शुरू करता है। एक सख्त सीमा के तहत, एक पार्टिशन किया गया क्षेत्र लीज़ समाप्ति के बाद अपनी बकेट को अमान्य कर देता है। यदि व्यवसाय प्रति क्षेत्र 100 अतिरिक्त आपातकालीन टोकन अधिकृत करता है, तो प्रलेखित पार्टिशन ओवरशूट अधिकतम उन आपातकालीन बजटों का योग है जिनके सक्रियण नियम ओवरलैप हो सकते हैं। फ़ेलओवर लीज़ लेज़र को पुनर्स्थापित करता है और एक नए युग का उपयोग करता है। मैं दोनों इनवेरिएंट्स के विरुद्ध ट्रैफ़िक परिवर्तन, डुप्लिकेट रिटर्न, ओवरलैपिंग नवीनीकरण, क्लॉक स्क्यू और नेटवर्क पार्टिशन का परीक्षण करूँगा।”
सामान्य गलतियाँ
- प्रत्येक क्षेत्र को पूर्ण दर और बर्स्ट क्षमता देना → ग्लोबल लिमिट क्षेत्रीय गणना से गुणा हो जाती है → दर और बर्स्ट शेयर को अलग-अलग लीज़ पर दें।
- वापसी निश्चित होने से पहले लौटाई गई लीज़ का पुन: उपयोग करना → वही टोकन दो बार खर्च किए जा सकते हैं → रिटर्न को इडेम्पोटेंट बनाएं या समाप्ति की प्रतीक्षा करें।
- बिना किसी त्रुटि सीमा के “इवेंचुअल कंसिस्टेंसी” कहना → किसी को भी संभावित ओवरशूट का पता नहीं होता है → लीज़ और आपातकालीन-बजट सीमाओं का उल्लेख करें।
- प्रत्येक नवीनीकरण पर स्थानीय बकेट को फिर से भरना → प्रत्येक नवीनीकरण एक और बर्स्ट बनाता है → बैलेंस सुरक्षित रखें और केवल दर, क्षमता और वैधता को अपडेट करें।
- फ़ेंसिंग के बिना फ़ेलओवर करना → दो कोऑर्डिनेटर वैध कोटा जारी कर सकते हैं → प्रत्येक लीज़ के साथ एक मोनोटोनिक युग जोड़ें।
अनुवर्ती प्रश्न और उत्तर
आप लीज़ का आकार कैसे चुनते हैं?
अवधि, रिफ़िल-दर शेयर और बर्स्ट शेयर को अलग-अलग चुनें। सहन की गई डिस्कनेक्शन अवधि से समय अवधि निर्धारित करें, हालिया मांग से दर निर्दिष्ट करें, और ग्लोबल 6,000 क्षमता के भीतर पीक से बर्स्ट निर्दिष्ट करें। छोटी अवधि पुनर्संतुलन को तेज़ करती है और विफलता सीमाओं को सख्त करती है लेकिन नवीनीकरण भार को बढ़ाती है।
क्या होता है जब ट्रैफ़िक अचानक क्षेत्रों को बदल देता है?
कोऑर्डिनेटर अपनी अगली लीज़ में कोल्ड क्षेत्र की दर और बर्स्ट शेयर को कम करता है, फिर पावती वापसी या पुरानी लीज़ की समाप्ति के बाद जारी किए गए शेयरों को स्थानांतरित करता है। प्रतीक्षा करते समय अप्रयुक्त क्षमता के बावजूद सिस्टम अस्थायी रूप से अस्वीकार कर सकता है; ओवरलैपिंग ओवरएलोकेशन को रोकने की यह लागत है।
आप Retry-After कैसे लौटाते हैं?
वर्तमान लीज़ के तहत अगले स्थानीय रिफ़िल, पुष्टि किए गए नए-लीज़ सक्रियण, या अपेक्षित कोऑर्डिनेटर रिकवरी में से जो भी सबसे पहले हो उसका उपयोग करें, जिसे प्रतिक्रिया की समर्थित सटीकता के अनुसार राउंड किया गया हो। यदि रिकवरी अज्ञात है तो समय का वादा न करें; इसके बजाय एक सीमित पुनः प्रयास (retry) नीति लौटाएं।
क्या यह डिज़ाइन शून्य ओवरशूट और पूर्ण पार्टिशन उपलब्धता की गारंटी दे सकता है?
केवल तभी जब प्रत्येक पार्टिशन के पास पहले से ही पर्याप्त पूर्व-आवंटित कोटा हो, जो क्षमता को अवरुद्ध कर सकता है, या यदि अनुरोध क्षेत्रों में समकालिक रूप से समन्वय करते हैं, जो लेटेंसी और पार्टिशन उपलब्धता का त्याग करता है। उत्तर में उत्पाद की सीमा को स्पष्ट रूप से चुनना होगा।