समस्या और लागू होने वाले परिदृश्य
कई इंजीनियरिंग टीमों द्वारा साझा किया जाने वाला एक मेट्रिक्स मॉनिटरिंग और अलर्टिंग सिस्टम डिज़ाइन करें। यह 50,000 सर्विस इंस्टेंसेस को मॉनिटर करता है, जिनमें से प्रत्येक 200 एक्टिव टाइम सीरीज़ एक्सपोज़ करता है, और हर 15 सेकंड में डेटा कलेक्ट करता है। यह काउंटर्स, गेज और हिस्टोग्राम; लेबल्स द्वारा फ़िल्टरिंग और एग्रीगेशन; डैशबोर्ड; और नियम-आधारित अलर्ट का समर्थन करता है। एक नई विफलता p99 पर 60 सेकंड के भीतर नोटिफिकेशन रूटिंग में प्रवेश करनी चाहिए। पिछले छह घंटों की सामान्य डैशबोर्ड क्वेरीज़ p95 पर दो सेकंड के भीतर पूरी होनी चाहिए। रॉ सैंपल्स सात दिनों के लिए, एक-मिनट के रोलअप 90 दिनों के लिए और एक-घंटे के रोलअप 13 महीनों के लिए रखे जाते हैं।
मान लें कि तीन उपलब्धता क्षेत्रों (availability zones) वाला एक क्षेत्र (region) है और टेनेंट पहचान के स्रोत के रूप में विश्वसनीय प्रमाणीकरण (trusted authentication) है। मौजूदा ईमेल, चैट और फ़ोन प्रदाता नोटिफिकेशन डिलीवर कर सकते हैं; इस डिज़ाइन को उन्हें विश्वसनीय रूप से जनरेट, डिडुप्लिकेट, ग्रुप और रूट करना होगा। लॉग और ट्रेस मुख्य दायरे से बाहर हैं। इंटरव्यू में हाई-कार्डिनैलिटी लेबल्स, डुप्लिकेट और देर से आने वाले सैंपल्स, अनुपलब्ध डेटा, अलर्ट स्थिति, क्वेरी आइसोलेशन, और मॉनिटरिंग प्लेटफ़ॉर्म में ही किसी विफलता का पता लगाने पर ध्यान केंद्रित किया जाना चाहिए।
2026 की वर्तमान अंग्रेज़ी और चीनी सामग्री मेट्रिक्स मॉनिटरिंग और अलर्टिंग को टाइम-सीरीज़ इनजेशन, क्वेरी, अलर्ट और उच्च उपलब्धता से जुड़े एक प्रत्यक्ष सिस्टम डिज़ाइन इंटरव्यू प्रश्न के रूप में प्रस्तुत करती है। Prometheus दस्तावेज़ सीरीज़ की पहचान, पुल कलेक्शन, WAL, पेंडिंग और फ़ायरिंग अलर्ट, ग्रुपिंग और इनहिबिशन के लिए प्राथमिक सिमेंटिक्स प्रदान करता है। Google SRE कम-शोर वाले अलर्ट और ब्लैक-बॉक्स मॉनिटरिंग के सिद्धांत प्रदान करता है। इसलिए यह प्रश्न वर्तमान में प्रासंगिक और तकनीकी रूप से सत्यापन योग्य है।
इंटरव्यूअर क्या मूल्यांकन कर रहा है
पहला, क्या उम्मीदवार सैंपल थ्रूपुट को एक्टिव टाइम-सीरीज़ कार्डिनैलिटी से अलग कर सकता है? इंस्टेंस की संख्या, प्रति इंस्टेंस सीरीज़ और कलेक्शन अंतराल राइट्स को निर्धारित करते हैं। मेमोरी, इंडेक्स और क्वेरी फ़ैन-आउट कार्डिनैलिटी के कारण सबसे पहले विफल हो सकते हैं। लेबल्स में user_id या request_id जोड़ने से ट्रैफ़िक बढ़ाए बिना कई गुना अधिक सीरीज़ बन सकती हैं।
दूसरा, क्या ड्यूरेबल इनजेशन, डैशबोर्ड क्वेरीज़ और फेल्योर डिटेक्शन एक पूरा पाथ बनाते हैं? किसी कलेक्टर द्वारा सैंपल प्राप्त करने का अर्थ यह नहीं है कि सैंपल ड्यूरेबल है। अलर्ट नियम ऐसे साझा पूल पर निर्भर नहीं होने चाहिए जिसे भारी ऐड-हॉक क्वेरीज़ समाप्त कर सकें। एक उत्कृष्ट उत्तर एक्नॉलेजमेंट बाउंड्री को परिभाषित करता है, अलर्ट के लिए क्षमता आरक्षित करता है, और देर से आने वाले, डुप्लिकेट, अनुपलब्ध और आंशिक-परिणाम सिमेंटिक्स को निर्दिष्ट करता है।
तीसरा, क्या स्टोरेज एक्सेस पैटर्न से मेल खाता है? हालिया डेटा को लगातार अपेंड और अक्सर क्वेरी किया जाता है। ऐतिहासिक डेटा इम्यूटेबल ब्लॉक्स, कम्प्रेशन, इंडेक्स और ऑब्जेक्ट स्टोरेज के अनुकूल होता है। डाउनसैंपलिंग औसतों का औसत नहीं निकाल सकती। इसे कम से कम sum, count, min और max को बनाए रखना चाहिए; हिस्टोग्राम को मर्ज करने से पहले संगत बकेट सीमाओं की आवश्यकता होती है।
अंत में, अलर्टिंग सिस्टम को घटनाओं (incidents) के दौरान भी चालू रहना चाहिए। कोई घटना एक साथ एरर मेट्रिक्स, क्वेरीज़ और नोटिफिकेशन्स को बढ़ा सकती है। उम्मीदवार को रूल शार्डिंग, स्टेट रिकवरी, नोटिफिकेशन डिडुप्लिकेशन, अलर्ट स्टॉर्म्स, नोइज़ी टेनेंट्स, सेल्फ़-मॉनिटरिंग और प्लेटफ़ॉर्म के फेल्योर डोमेन से बाहर एक एंड-टू-एंड लाइवनेस प्रोब को कवर करना चाहिए।
उत्तर देने से पहले स्पष्ट करने वाले प्रश्न
- क्या कलेक्शन टारगेट्स स्थिर हैं? अधिकांश प्लेटफ़ॉर्म द्वारा खोजे गए लंबे समय तक चलने वाले (long-running) सर्विसेज हैं; छोटे जॉब्स और प्रतिबंधित नेटवर्क पुश गेटवे का उपयोग करते हैं।
- क्या बताई गई स्केल ग्लोबल है या रीजनल? इसे रीजनल पीक मानें। अतिरिक्त रीजन्स स्वतंत्र रूप से डेटा कलेक्ट करते हैं और नियंत्रित ग्लोबल क्वेरीज़ एक्सपोज़ करते हैं।
- एक्नॉलेजमेंट बाउंड्री क्या है? राइट गेटवे तभी सफल होता है जब सैंपल उपलब्धता क्षेत्रों में रेप्लिकेट किए गए ड्यूरेबल लॉग में प्रवेश कर जाता है।
- क्या डुप्लिकेट और आउट-ऑफ़-ऑर्डर सैंपल्स की अनुमति है? नेटवर्क रिट्राई डेटा को डुप्लिकेट कर सकते हैं, और सैंपल्स एक सीमित देरी वाली विंडो के भीतर आ सकते हैं। समान सीरीज़ और टाइमस्टैम्प एक डिटर्मिनिस्टिक कॉन्फ़्लिक्ट नियम का उपयोग करते हैं।
- क्या अनुपलब्ध सैंपल का अर्थ शून्य है? नहीं। यह एक मृत टारगेट, विफल कलेक्शन या पार्टीशन का संकेत दे सकता है, जो मापे गए शून्य से भिन्न होता है।
- क्या प्रत्येक क्वेरी को दो सेकंड में समाप्त होना चाहिए? नहीं। SLO सीमित, सामान्य छह-घंटे की क्वेरीज़ को कवर करता है। हाई-कार्डिनैलिटी और महीनों लंबे रॉ स्कैन्स के लिए कोटा होता है या वे एसिंक्रोनस एनालिसिस का उपयोग करते हैं।
- अलर्ट रिकवरी का निर्णय कैसे लिया जाता है? नियम इवैल्यूएशन इंटरवल, होल्ड ड्यूरेशन, मिसिंग-डेटा पॉलिसी और रिकवरी स्थिति को परिभाषित करता है। नोटिफिकेशन सर्विस इनका अनुमान नहीं लगाती है।
- क्या टेनेंट्स मनमाने लेबल्स बना सकते हैं? कोटा के भीतर, जो लेबल काउंट, लंबाई, एक्टिव-सीरीज़ और न्यू-सीरीज़-रेट सीमाओं के अधीन हैं।
- क्या एक्ज़ैक्टली-वंस नोटिफिकेशन आवश्यक है? नहीं। डिलीवरी कम से कम एक बार (at least once) होती है, जिसमें अलर्ट फ़िंगरप्रिंट और स्टेट ट्रांज़िशन के आधार पर इडेमपोटेंसी होती है।
- रॉ और रोल्ड-अप डेटा कैसे संबंधित हैं? जब तक सोर्स ब्लॉक्स बने रहते हैं, तब तक रोलअप की पुनर्गणना की जा सकती है, और यह अपने रिज़ॉल्यूशन और कवरेज वॉटरमार्क को रिकॉर्ड करता है।
30-सेकंड का उत्तर फ़्रेमवर्क
“स्केल 10 मिलियन एक्टिव सीरीज़ का है, यानी लगभग 667,000 सैंपल्स प्रति सेकंड, या प्रति दिन 57.6 बिलियन सैंपल्स। शार्डेड कलेक्टर्स सर्विस डिस्कवरी से टारगेट्स को पुल करते हैं, जबकि शॉर्ट जॉब्स पुश गेटवे का उपयोग करते हैं। नॉर्मलाइज़्ड सैंपल्स टेनेंट और सीरीज़ फ़िंगरप्रिंट द्वारा एक क्रॉस-ज़ोन ड्यूरेबल लॉग में प्रवेश करते हैं, फिर एक रीसेंट-डेटा टियर और इम्यूटेबल टाइम ब्लॉक्स में जाते हैं। लेबल इंडेक्स क्वेरीज़ को सर्व करते हैं, और कार्डिनैलिटी बजट user_id जैसे खतरनाक लेबल्स को सीमित करते हैं। एक अलग से प्रोविज़न किया गया रूल इंजन निश्चित टाइमस्टैम्प्स का मूल्यांकन करता है और इनएक्टिव, पेंडिंग और फ़ायरिंग स्टेट्स बनाए रखता है। एक अलर्ट मैनेजर अलर्ट्स को डिडुप्लिकेट, ग्रुप, साइलेंस, इनहिबिट और रूट करता है। मैं इस पाथ को दस गुना न्यू-सीरीज़ सर्ज, डुप्लिकेट और देर से आने वाले सैंपल्स, ज़ोन फेल्योर और एक एक्सटर्नल कैनरी के साथ सत्यापित करूँगा।”
चरण-दर-चरण विस्तृत विश्लेषण
छह इनवेरिएंट्स के साथ शुरुआत करें: सैंपल लेबल्स टेनेंट पहचान घोषित नहीं कर सकते; एक्नॉलेज किए गए सैंपल्स एक ड्यूरेबल लॉग में प्रवेश कर चुके हैं; एक ही रिट्राई कोई भिन्न परिणाम नहीं दे सकता; मिसिंग डेटा को कभी भी चुपचाप शून्य में नहीं बदला जाता; डैशबोर्ड लोड अलर्टिंग को बाधित (starve) नहीं कर सकता; और प्रत्येक रिजेक्शन, ड्रॉप, देरी और डिग्रेडेशन की एक देखने योग्य (observable) संख्या होती है।
चरण एक: स्केल की पुनर्गणना करें और कार्डिनैलिटी को एक फ़र्स्ट-क्लास रिसोर्स मानें।
एक्टिव-सीरीज़ की गणना इस प्रकार है:
50,000 instances × 200 series/instance = 10,000,000 active series
10,000,000 ÷ 15 seconds ≈ 666,667 samples/second
666,667 × 86,400 ≈ 57.6 billion samples/dayPrometheus स्टोरेज दस्तावेज़ प्रति सैंपल एक से दो बाइट्स का एक मोटा लोकल-स्टोरेज प्रारंभिक बिंदु देता है। उस दर पर, कंप्रेस्ड सैंपल चंक्स प्रति दिन लगभग 57.6–115.2 GB, या तीन प्रतियों के साथ प्रति दिन 172.8–345.6 GB स्थान लेंगे। इस अनुमान में लेबल इंडेक्स, WAL, हेड, ऑब्जेक्ट मेटाडेटा, रेप्लिका से परे सुरक्षा मार्जिन और देखे गए डिस्ट्रीब्यूशन प्रभाव शामिल नहीं हैं। यह एक सैनिटी चेक है, प्रतिनिधि मेट्रिक्स के साथ बेंचमार्क का विकल्प नहीं।
नई सीरीज़ अधिक खतरनाक हैं। यदि रिक्वेस्ट-लेवल user_id लेबल सेट में प्रवेश करता है, तो हर मान के साथ सीरीज़ की पहचान बदल जाती है। प्लेटफ़ॉर्म को स्पष्ट चेतावनी (warn), क्वारंटीन और अस्वीकार (reject) नीतियों के साथ एक्टिव सीरीज़, नई सीरीज़ निर्माण दर, लेबल संख्या, लेबल लंबाई और प्रति टेनेंट और मेट्रिक अनुमत कुंजियों को सीमित करना चाहिए।
चरण दो: डिफ़ॉल्ट रूप से पुल कलेक्शन का उपयोग करें और जहाँ आवश्यक हो वहाँ पुश का।
सर्विस डिस्कवरी टारगेट सेट की आपूर्ति करती है। एक कंट्रोल प्लेन कंसिस्टेंट या रेंडेवू हैशिंग के साथ कलेक्टर्स को टारगेट्स असाइन करता है। हर 15 सेकंड में, कलेक्टर्स HTTP पर पुल करते हैं, विश्वसनीय टेनेंट, क्लस्टर, जॉब और इंस्टेंस फ़ील्ड्स संलग्न करते हैं, और up, स्क्रैप अवधि, सैंपल काउंट और एरर्स जैसे कलेक्शन मेट्रिक्स उत्पन्न करते हैं। पुल करने से “टारगेट मौजूद था लेकिन कलेक्शन विफल रहा” सीधे दिखाई देता है और प्लेटफ़ॉर्म को गति नियंत्रित करने देता है।
अल्पकालिक बैच जॉब्स, इनबाउंड एक्सेस के बिना नेटवर्क, और OTLP उत्सर्जित करने वाले परिवेश एक रीजनल गेटवे का उपयोग करते हैं। गेटवे पहचान को प्रमाणित करता है, बैच आकार को सीमित करता है, फ़ील्ड्स को सामान्य करता है, और उसी इनजेशन अनुबंध में प्रवेश करता है। क्लाइंट की सेंड सफलता अंतिम स्टोरेज सफलता नहीं है; गेटवे सफलता का अर्थ है कि प्लेटफ़ॉर्म अपनी ड्यूरेबल सीमा तक पहुँच गया। कलेक्टर्स डिस्कनेक्शन के दौरान सीमित लोकल स्पूल का उपयोग करते हैं और स्थान समाप्त होने पर डिस्क को अनिश्चित काल तक भरने के बजाय काउंटरों के साथ अस्वीकार कर देते हैं।
चरण तीन: सीरीज़ पहचान और इनजेशन अनुबंध को परिभाषित करें।
एक सीरीज़ को tenant_id + metric_name + canonical_labels द्वारा विशिष्ट रूप से पहचाना जाता है। हैशिंग से पहले लेबल्स को सॉर्ट किया जाता है और कैनोनिकली एनकोड किया जाता है। फ़िंगरप्रिंट टकराव के लिए अभी भी पूर्ण पहचान की तुलना करने की आवश्यकता होती है; केवल हैश पर्याप्त नहीं है। एक सैंपल में सीरीज़ पहचान, सोर्स टाइम, ऑब्जर्व्ड टाइम, वैल्यू या हिस्टोग्राम, डेटा प्रकार और कलेक्शन सोर्स शामिल होते हैं।
WriteBatch {
tenantId, sourceId, requestId,
samples: [{ metric, labels, sourceTimestamp, value }]
}गेटवे प्रमाणीकरण, लेबल नॉर्मलाइज़ेशन, प्रकार सत्यापन, कार्डिनैलिटी बजटिंग, टाइम-रेंज चेक और बैच सीमाएँ लागू करता है। फिर यह एक क्रॉस-ज़ोन रेप्लिकेटेड लॉग में tenant_id + series_fingerprint द्वारा पार्टीशन करता है। लॉग कमिट ही ack सीमा है। उसी requestId को सुरक्षित रूप से पुनः आजमाया जा सकता है, और स्टोरेज (series_id, source_timestamp) द्वारा डिडुप्लिकेट करता है। एक ही सीरीज़ और टाइमस्टैम्प पर अलग-अलग मान एक निश्चित कॉन्फ़्लिक्ट पॉलिसी का पालन करते हैं और एक कॉन्फ़्लिक्ट मेट्रिक को बढ़ाते हैं; आगमन क्रम को चुपचाप निर्णय नहीं लेना चाहिए।
चरण चार: हालिया डेटा, ऐतिहासिक ब्लॉक्स और इंडेक्स को अलग करें।
एक अपेंडेबल हेड सबसे हाल के घंटों का डेटा रखता है और देर से आने वाले डेटा के लिए सीमित परिवर्तनों की अनुमति देता है। बैकग्राउंड वर्कर्स इसे इम्यूटेबल, टाइम- और शार्ड-पार्टीशन्ड ब्लॉक्स में फ़्रीज़ करते हैं, टाइमस्टैम्प-डेल्टा और वैल्यू कम्प्रेशन का उपयोग करते हैं, फिर उन्हें ऑब्जेक्ट स्टोरेज पर अपलोड करते हैं। ब्लॉक मेटाडेटा में न्यूनतम और अधिकतम समय, टेनेंट, रिज़ॉल्यूशन, चेकसम और कवरेज वॉटरमार्क शामिल होते हैं। कॉम्पेक्शन छोटे ब्लॉक्स को मर्ज करता है और केवल सत्यापित प्रतिस्थापनों द्वारा पूरी तरह से कवर किए गए ब्लॉक्स को हटाता है।
एक इनवर्टेड इंडेक्स लेबल की/वैल्यू युग्मों को सीरीज़ आईडी से मैप करता है, जो डेटा ब्लॉक्स का पता लगाते हैं। हॉट लेबल और सीरीज़ मेटाडेटा को कैश किया जा सकता है, लेकिन टेनेंट पहचान हर कैश की का हिस्सा होती है। डाउनसैंपलिंग sum/count/min/max के साथ एक-मिनट और एक-घंटे के ब्लॉक्स बनाती है। काउंटर्स को रीसेट हैंडलिंग की आवश्यकता होती है, और हिस्टोग्राम केवल संगत बकेट स्कीमा के साथ मर्ज होते हैं। रॉ ब्लॉक्स सात दिनों तक, एक-मिनट के ब्लॉक्स 90 दिनों तक और एक-घंटे के ब्लॉक्स 13 महीनों तक रहते हैं।
चरण पाँच: क्वेरी लागत को पूर्वानुमानित बनाएं।
क्वेरी कोऑर्डिनेटर टाइम रेंज, लेबल सिलेक्टर्स, एग्रीगेशन और स्टेप को पार्स करता है। यह पहले अधिकृत करता है, सीरीज़ खोजने के लिए इंडेक्स का उपयोग करता है, और समानांतर में प्रासंगिक ब्लॉक्स को पढ़ता है। एक रोलअप तभी चुना जाता है जब अनुरोधित स्टेप और फ़ंक्शन इसकी अनुमति देते हैं। sum/count से एक औसत की पुनर्गणना की जाती है; किसी मौजूदा पर्सेंटाइल को दूसरे सही पर्सेंटाइल में रोल अप नहीं किया जा सकता है। हालिया क्वेरीज़ हेड को पर्सिस्टेड ब्लॉक्स के साथ मर्ज करती हैं और एक शेयर्ड वॉटरमार्क पर डिडुप्लिकेट करती हैं।
प्रत्येक क्वेरी में सीरीज़, स्कैन किए गए पॉइंट्स, समवर्तीता (concurrency), मेमोरी और समय सीमा (deadline) की सीमाएं होती हैं। सामान्य डैशबोर्ड्स छह हालिया घंटों में p95 पर दो सेकंड का लक्ष्य रखने के लिए फिक्स्ड स्टेप्स, प्री-एग्रीगेशन और शॉर्ट रिज़ल्ट कैशिंग का उपयोग करते हैं। महीनों लंबी हाई-कार्डिनैलिटी खोज एक एसिंक्रोनस जॉब बन सकती है। जब कोई शार्ड विफल हो जाता है, तो API partial=true और अनुपलब्ध रेंज लौटाता है। अलर्ट नियम डिफ़ॉल्ट रूप से आंशिक परिणामों को अस्वीकार करते हैं।
QueryRange {
tenantId, expression, start, end, step, maxSeries
}
QueryResult { data, resolution, watermark, partial, warnings }चरण छह: नोटिफिकेशन रूटिंग से नियम मूल्यांकन को अलग करें।
एक शेड्यूलर टेनेंट द्वारा नियम समूहों को शार्ड करता है और एक स्पष्ट इवैल्यूएशन टाइमस्टैम्प पर हर 15 या 30 सेकंड में मूल्यांकन करता है। एक अलर्ट इंस्टेंस में नियम और परिणाम लेबल्स से प्राप्त एक स्थिर फ़िंगरप्रिंट होता है, और यह inactive -> pending -> firing के माध्यम से चलता है। for अवधि क्षणिक स्पाइक्स को फ़िल्टर करती है। keep_firing_for या स्पष्ट हिस्टैरिसीस थोड़े समय के मिसिंग डेटा को बार-बार समाधान (resolution) उत्पन्न करने से रोकता है। प्रत्येक नियम यह भी घोषित करता है कि मिसिंग डेटा सामान्य है, अलर्टिंग है, या अज्ञात है।
दो उच्च-उपलब्धता वाले इवैल्यूएटर्स अलर्ट मैनेजर्स को एक ही फ़िंगरप्रिंट भेज सकते हैं, जो इसे डिडुप्लिकेट करते हैं। अलर्ट मैनेजर्स टीम, सर्विस और गंभीरता के आधार पर रूट करते हैं; एक ही घटना से संबंधित इंस्टेंसेस को ग्रुप करते हैं; क्लस्टर के अगम्य होने पर डाउनस्ट्रीम इंस्टेंस अलर्ट को रोकते हैं (inhibit); और मेंटेनेंस के दौरान एक्सपायरिंग साइलेंस लागू करते हैं। नोटिफिकेशन की स्थिति रेप्लिकेटेड स्टोरेज में रहती है। डिलीवरी कम से कम एक बार होती है और इडेमपोटेंसी की के रूप में alert_fingerprint + state_transition + receiver का उपयोग करती है। नियम गणना, स्थिति और नोटिफिकेशन कतारें ऐड-हॉक डैशबोर्ड क्वेरीज़ से अलग क्षमता का उपयोग करती हैं।
चरण सात: विफलताओं, टेनेंट आइसोलेशन और सेल्फ़-मॉनिटरिंग को संभालें।
जब कोई कलेक्टर क्रैश होता है, तो टारगेट लीज़ स्वस्थ इंस्टेंसेस पर चले जाते हैं। थोड़े समय के ओवरलैपिंग कलेक्शन को डिडुप्लिकेशन द्वारा संभाल लिया जाता है। जब लॉग या स्टोरेज बैकप्रेशर लागू करता है, तो गेटवे बैच कम करते हैं और अनबाउंडेड मेमोरी कतार बनाने के बजाय स्पष्ट रूप से अस्वीकार करते हैं। ऑब्जेक्ट-स्टोर आउटेज के दौरान, रेप्लिकेटेड लॉग और सीमित हेड डेटा स्वीकार करना जारी रखते हैं और ब्लॉक डिलीशन रुक जाता है। सुरक्षित वॉटरमार्क से परे, टेनेंट कोटा अलर्ट-क्रिटिकल मेट्रिक्स की सुरक्षा करता है। क्वेरी विफलता से नियमों को पुष्ट वॉटरमार्क पढ़ने से नहीं रोकना चाहिए।
टेनेंट पहचान mTLS या सर्वर द्वारा जारी किए गए टोकन से आती है, कभी भी tenant सैंपल लेबल से नहीं। इनजेशन, क्वेरीज़ और नियमों पर अलग-अलग सीमाएं लागू होती हैं। RBAC डैशबोर्ड और अलर्ट कॉन्फ़िगरेशन को नियंत्रित करता है, और नियमों, साइलेंस और रूट्स में परिवर्तनों का ऑडिट किया जाता है। प्लेटफ़ॉर्म इनजेशन लेटेंसी, लॉग बैकलॉग, हेड वॉटरमार्क, ब्लॉक एज, स्कैन किए गए क्वेरी पॉइंट्स, रूल-इवैल्यूएशन डिले, पेंडिंग और फ़ायरिंग काउंट और नोटिफिकेशन विफलताओं का निरीक्षण करता है।
सेल्फ़-मॉनिटरिंग प्लेटफ़ॉर्म के फेल्योर डोमेन को साझा करती है, इसलिए एक बाहरी ब्लैक-बॉक्स कैनरी एक स्वतंत्र परिवेश से लगातार एक ज्ञात मेट्रिक लिखता है, इसके नियम के फ़ायर होने और इसके नोटिफिकेशन के आने की प्रतीक्षा करता है, फिर इसे रीसॉल्व करता है। यदि अपेक्षित हार्टबीट बंद हो जाते हैं तो एक बाहरी डेड-मैन चेक एक स्वतंत्र नोटिफिकेशन पाथ का उपयोग करता है। यह पूरी तरह से शांत (silent) मॉनिटरिंग प्लेटफ़ॉर्म का पता लगाता है।
चरण आठ: लोड और फ़ॉल्ट इंजेक्शन के साथ वादों को मान्य करें।
स्थिर-अवस्था (steady-state) लोड कम से कम 667,000 सैंपल्स प्रति सेकंड तक पहुँचना चाहिए, इसके बाद दोगुना बर्स्ट होना चाहिए। फिर दस गुना न्यू-सीरीज़ रेट उत्पन्न करें और सत्यापित करें कि प्रभावित टेनेंट अलग-थलग (isolated) है जबकि अन्य टेनेंट्स और नियम मूल्यांकन अभी भी अपने SLOs को पूरा करते हैं। शुद्धता परीक्षण डुप्लिकेट बैचों, एक टाइमस्टैम्प पर परस्पर विरोधी मानों, लेट विंडो, काउंटर रीसेट, हिस्टोग्राम मर्ज, रोलअप पुनर्गणना, और ब्लॉक कॉम्पेक्शन से पहले और बाद में समान परिणामों को कवर करते हैं।
फ़ॉल्ट परीक्षण एक कलेक्टर, एक ज़ोन की लॉग रेप्लिका, एक हेड नोड, एक क्वेरी शार्ड, एक रूल इवैल्यूएटर और एक नोटिफिकेशन प्रदाता को समाप्त करते हैं। वे सत्यापित करते हैं कि एक्नॉलेज किए गए सैंपल्स बने रहें, लीज़ ओवरलैप डिडुप्लिकेट हो, नियम स्थिति पुनर्प्राप्त हो, और नोटिफिकेशन रिट्राई बिना किसी सीमा के न बढ़े। अंत में, इनजेशन, रूल होल्ड अवधि, ग्रुप वेट और डिलीवरी में कैनरी लेटेंसी को मापें। p99 पर 60 सेकंड की पुष्टि करें या उस चरण की पहचान करें जिसने अपना बजट समाप्त किया।
ठोस नमूना उत्तर
“मैं पहले 10 मिलियन एक्टिव सीरीज़ प्राप्त करने के लिए 50,000 इंस्टेंसेस को 200 सीरीज़ से गुणा करूँगा। 15 सेकंड से विभाजित करने पर लगभग 667,000 सैंपल्स प्रति सेकंड, या 57.6 बिलियन प्रति दिन मिलते हैं। क्षमता योजना में सैंपल चंक्स और लेबल इंडेक्स दोनों शामिल होने चाहिए। एक्टिव-सीरीज़ और न्यू-सीरीज़-रेट बजट user_id जैसे लेबल्स को प्लेटफ़ॉर्म को समाप्त करने से रोकते हैं।
मुख्य पाथ सर्विस डिस्कवरी और शार्डेड पुल कलेक्टर्स का उपयोग करता है; शॉर्ट जॉब्स पुश गेटवे का उपयोग करते हैं। प्रमाणीकरण, लेबल नॉर्मलाइज़ेशन और कोटा जांच के बाद, सैंपल्स टेनेंट और सीरीज़ फ़िंगरप्रिंट द्वारा एक क्रॉस-ज़ोन रेप्लिकेटेड लॉग में प्रवेश करते हैं। केवल एक कमिट किए गए लॉग राइट को एक्नॉलेज किया जाता है। हालिया डेटा हेड में प्रवेश करता है, फिर ऑब्जेक्ट स्टोरेज में इम्यूटेबल कंप्रेस्ड ब्लॉक्स और एक लेबल इनवर्टेड इंडेक्स में फ़्रीज़ हो जाता है। बैकग्राउंड जॉब्स एक-मिनट और एक-घंटे के रोलअप उत्पन्न करते हैं; औसतों को sum/count से पुनर्निर्मित किया जाता है।
एक क्वेरी कोऑर्डिनेटर सीरीज़, पॉइंट्स, मेमोरी और समय सीमा के बजट के साथ समय, लेबल्स और रिज़ॉल्यूशन द्वारा ब्लॉक्स को प्रून करता है। एक अलग से प्रोविज़न किया गया रूल इंजन निश्चित टाइमस्टैम्प्स का मूल्यांकन करता है और इनएक्टिव, पेंडिंग और फ़ायरिंग स्थिति को सुरक्षित रखता है। अलर्ट मैनेजर्स फ़िंगरप्रिंट द्वारा डिडुप्लिकेट करते हैं, फिर ग्रुप, इनहिबिट, साइलेंस और रूट करते हैं। मिसिंग डेटा एक स्पष्ट नियम नीति का पालन करता है, और नोटिफिकेशन्स कम से कम एक बार डिलीवरी का उपयोग करते हैं।
मैं प्रति सेकंड 667,000 सैंपल्स, दोगुने बर्स्ट और दस गुना न्यू-सीरीज़ उछाल का लोड टेस्ट करूँगा। फिर मैं डुप्लिकेट और देर से आने वाले सैंपल्स, एक ज़ोन फेल्योर, एक विफल क्वेरी शार्ड, और एक विफल नोटिफिकेशन प्रदाता को इंजेक्ट करूँगा। एक स्वतंत्र परिवेश में कैनरी लगातार नोटिफिकेशन के माध्यम से इनजेशन का परीक्षण करता है, 60-सेकंड के p99 की पुष्टि करता है और प्लेटफ़ॉर्म की पूर्ण शांति का पता लगाता है।”
सामान्य गलतियाँ
- केवल सैंपल्स प्रति सेकंड की गणना करना → लेबल इंडेक्स और एक्टिव सीरीज़ सबसे पहले मेमोरी समाप्त कर सकते हैं → 10 मिलियन एक्टिव सीरीज़ और न्यू-सीरीज़ रेट का भी बजट बनाएं।
- मनमाने
user_idलेबल्स की अनुमति देना → प्रत्येक मान एक और सीरीज़ बनाता है → लेबल नीति, कार्डिनैलिटी बजट और क्वारंटीन लागू करें। - अनुरोध प्राप्ति पर एक्नॉलेज करना → कोई प्रोसेस या ज़ोन विफलता एक्नॉलेज किए गए डेटा को खो सकती है → केवल रेप्लिकेटेड-लॉग कमिट के बाद ही ack करें।
- अनुपलब्ध को शून्य मानना → कलेक्शन विफलता व्यवसाय के शून्य तक गिरने जैसी दिखती है → स्टेल या अज्ञात स्थिति को सुरक्षित रखें और नियमों को एक नीति चुनने दें।
- औसतों का औसत निकालना → अलग-अलग गणनाओं वाले बकेट एक पक्षपाती परिणाम उत्पन्न करते हैं →
sum/countको बनाए रखें और पुनर्गणना करें। - हर क्वेरी को दो सेकंड में पूरा करने का वादा करना → असीमित लेबल्स और टाइम रेंज की असीमित लागत होती है → SLO को सीमित करें और क्वेरी बजट और एसिंक पाथ लागू करें।
- अलर्ट नियमों को आंशिक परिणाम स्वीकार करने देना → एक अनुपलब्ध शार्ड रिकवरी जैसा लग सकता है → एक पूर्ण वॉटरमार्क की आवश्यकता रखें या अज्ञात स्थिति में प्रवेश करें।
- प्रत्येक इंस्टेंस के लिए सूचित करना → एक बड़ा आउटेज अलर्ट स्टॉर्म उत्पन्न करता है → घटनाओं को ग्रुप करें और इनहिबिशन, साइलेंस और रेट लिमिट्स का उपयोग करें।
- एक्ज़ैक्टली-वंस नोटिफिकेशन का दावा करना → एक टाइमआउट यह साबित नहीं कर सकता कि डिलीवरी हुई या नहीं → स्थिर इडेमपोटेंसी कीज़ के साथ कम से कम एक बार डिलीवरी का उपयोग करें।
- प्लेटफ़ॉर्म की मॉनिटरिंग केवल उसी से करना → कुल आउटेज कोई सिग्नल नहीं देता → एक स्वतंत्र ब्लैक-बॉक्स कैनरी और डेड-मैन पाथ जोड़ें।
फ़ॉलो-अप प्रश्न और उत्तर
फ़ॉलो-अप 1: प्रत्येक क्लाइंट को सीधे पुश क्यों नहीं करने दिया जाता?
लंबे समय तक चलने वाली सेवाएं पुल कलेक्शन के अनुकूल होती हैं: प्लेटफ़ॉर्म टारगेट सेट और फ़्रीक्वेंसी जानता है, मापे गए मान को विफल कलेक्शन से अलग करता है, और विश्वसनीय रिसोर्स लेबल्स को लगातार संलग्न करता है। छोटे जॉब्स, प्रतिबंधित नेटवर्क और मौजूदा OTLP क्लाइंट्स पुश के अनुकूल होते हैं। दोनों प्रवेश अंततः एक ही वैलिडेशन और ड्यूरेबल-इनजेशन अनुबंध का उपयोग करते हैं, जिससे दो क्वेरी सिमेंटिक्स से बचा जा सकता है।
फ़ॉलो-अप 2: आप वैध वर्कलोड को अवरुद्ध किए बिना कार्डिनैलिटी को कैसे नियंत्रित करते हैं?
स्टॉक और फ़्लो दोनों को मापें: प्रति टेनेंट और मेट्रिक एक्टिव सीरीज़ को सीमित करें, और प्रति मिनट नई सीरीज़ को सीमित करें। रोलआउट से पहले एक कार्डिनैलिटी पूर्वावलोकन प्रदान करें। थ्रेशोल्ड के करीब चेतावनी दें, फिर कॉन्फ़िगर किए गए खतरनाक लेबल को छोड़ दें, मेट्रिक को क्वारंटीन करें, या टेनेंट नीति के अनुसार नई सीरीज़ को अस्वीकार करें। ड्रॉप काउंट और प्रतिनिधि डायग्नोस्टिक्स को बनाए रखें, लेकिन संवेदनशील रॉ लेबल्स को साधारण लॉग में कॉपी न करें।
फ़ॉलो-अप 3: देर से आने वाले सैंपल्स अलर्टिंग को कैसे प्रभावित करते हैं?
नियम एक निश्चित इवैल्यूएशन टाइमस्टैम्प पर एक पुष्ट वॉटरमार्क पढ़ते हैं और सामान्य देरी के लिए थोड़ा विलंब जोड़ सकते हैं। उस वॉटरमार्क के बाद आने वाले पुराने सैंपल्स ऐतिहासिक क्वेरीज़ को अपडेट कर सकते हैं, लेकिन डिफ़ॉल्ट रूप से किसी मानवीय नोटिफिकेशन को वापस नहीं लेना चाहिए। यदि उत्पाद को सुधार की आवश्यकता है, तो एक वर्ज़न किया गया करेक्शन इवेंट उत्सर्जित करें। लेट विंडो, अधिकतम क्लॉक स्क्व्यू और कॉन्फ़्लिक्ट नियम का दस्तावेजीकरण और परीक्षण किया जाना चाहिए।
फ़ॉलो-अप 4: पर्सेंटाइल को सीधे स्टोर क्यों नहीं किया जाता?
ग्लोबल p95 प्राप्त करने के लिए कई इंस्टेंसेस या टाइम बकेट्स से p95 मानों का औसत नहीं निकाला जा सकता है या किसी अन्य p95 ऑपरेशन से नहीं गुज़ारा जा सकता है। मर्ज करने योग्य हिस्टोग्राम बकेट्स या स्केचेस को स्टोर करें, क्वेरी समय पर वितरण को मर्ज करें, और फिर पर्सेंटाइल की गणना करें। असंगत बकेट सीमाएं या स्केच पैरामीटर अलग परिणामों या एक स्पष्ट माइग्रेशन की मांग करते हैं।
फ़ॉलो-अप 5: उच्च-उपलब्धता वाले रूल इंजन डुप्लिकेट नोटिफिकेशन्स से कैसे बचते हैं?
दोनों इवैल्यूएटर्स एक ही अलर्ट इंस्टेंस की गणना और उसे भेज सकते हैं। इंस्टेंस फ़िंगरप्रिंट नियम और परिणाम लेबल्स में स्थिर रहता है। अलर्ट मैनेजर्स फ़िंगरप्रिंट, स्थिति और रिसीवर द्वारा डिडुप्लिकेट, ग्रुप और रूट करने के लिए रेप्लिकेटेड स्थिति का उपयोग करते हैं। इवैल्यूएशन को सिंगलटन बनने की आवश्यकता नहीं है। एक पार्टीशन अभी भी एक दुर्लभ डुप्लिकेट उत्पन्न कर सकता है, इसलिए रिसीवर समान इडेमपोटेंसी की बनाए रखते हैं।
फ़ॉलो-अप 6: ऑब्जेक्ट स्टोरेज अनुपलब्ध होने पर क्या होता है?
रेप्लिकेटेड लॉग और बाउंडेड हेड में नए सैंपल्स लिखना जारी रखें। ब्लॉक अपलोड, कॉम्पेक्शन डिलीशन और सुरक्षित वॉटरमार्क से परे स्वीकृति को रोकें। टेनेंट कोटा के साथ अलर्ट-क्रिटिकल मेट्रिक्स को सुरक्षित रखें। यदि लॉग रिटेंशन के भीतर रिकवरी नहीं हो सकती है, तो नए राइट्स को स्पष्ट रूप से अस्वीकार करें और ऑपरेटरों को सूचित करें; कभी भी यह दावा न करें कि सारा डेटा स्वीकार किया जा रहा है।
फ़ॉलो-अप 7: ग्लोबल मल्टी-रीजन क्वेरीज़ कैसे काम करेंगी?
प्रत्येक क्षेत्र स्वतंत्र रूप से डेटा कलेक्ट और अलर्ट करता है ताकि एक वाइड-एरिया पार्टीशन स्थानीय अलर्ट को शांत न कर सके। एक ग्लोबल कोऑर्डिनेटर प्रकाशित इम्यूटेबल ब्लॉक्स या नियंत्रित क्वेरी एंडपॉइंट्स को पढ़ता है और प्रत्येक क्षेत्र का वॉटरमार्क और partial स्थिति लौटाता है। वास्तव में ग्लोबल अलर्ट मेट्रिक्स के छोटे सेट को पहले क्षेत्रीय रूप से एग्रीगेट किया जाता है, फिर एक अलग रूल डोमेन में लो-कार्डिनैलिटी परिणामों के रूप में रेप्लिकेट किया जाता है।
फ़ॉलो-अप 8: आप कैसे पता लगाते हैं कि किस चरण ने 60-सेकंड के अलर्ट लक्ष्य को तोड़ा?
कैनरी सैंपल्स के लिए, सोर्स टाइम, ऑब्जर्व्ड टाइम, लॉग-कमिट वॉटरमार्क, रूल-इवैल्यूएशन टाइम, पेंडिंग इंटरवल, ग्रुपिंग वेट और नोटिफिकेशन प्राप्ति को रिकॉर्ड करें। एंड-टू-एंड हिस्टोग्राम को चरण दर चरण विभाजित करें और बाहरी रूप से अंतिम आगमन को सत्यापित करें। किसी नियम का पांच मिनट का for क्लॉज एक उत्पाद स्थिति है, न कि प्लेटफ़ॉर्म डिटेक्शन लेटेंसी, इसलिए प्लेटफ़ॉर्म प्रोसेसिंग और कॉन्फ़िगर की गई होल्ड अवधि की अलग से रिपोर्ट करें।