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

आप टाइम-सीरीज़ मेट्रिक्स रिटेंशन और डाउनसैंपलिंग सर्विस को कैसे डिज़ाइन करेंगे?

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

प्रश्न

एक मॉनिटरिंग प्लेटफ़ॉर्म प्रतिदिन अरबों लेबल्ड टाइम-सीरीज़ सैंपल्स को इंजेस्ट करता है। एक ऐसा सिस्टम डिज़ाइन करें जो 15 दिनों का हाई-रिज़ॉल्यूशन डेटा और 2 वर्षों का लो-रिज़ॉल्यूशन डेटा रखे, जिसमें डाउनसैंपलिंग, क्वेरी रूटिंग, लेबल कार्डिनैलिटी और वैलिडेशन शामिल हों।

1. प्रश्न

एक प्लेटफ़ॉर्म को सेवा, टेनेंट और क्षेत्र के अनुसार लेबल किए गए टाइम-सीरीज़ मेट्रिक्स प्राप्त होते हैं। शॉर्ट-टर्म डिबगिंग के लिए सेकंड-लेवल डेटा की आवश्यकता होती है, जबकि लॉन्ग-टर्म रिपोर्टों के लिए मिनट या घंटे के ट्रेंड्स की आवश्यकता होती है। इंजेक्शन लगातार बढ़ रहा है। लागत को नियंत्रित करते हुए और हाई कार्डिनैलिटी को क्वेरीज़ पर हावी होने से रोकते हुए 15 दिनों के रॉ सैंपल्स और 2 वर्षों के एग्रीगेट्स रखें।

2. सीमाएं और स्पष्टीकरण

  • स्क्रैप अंतराल, लेबल संख्या और कार्डिनैलिटी, क्वेरी रेंज, SLO, स्वीकार्य डेटा विलंब और डिलीशन आवश्यकताओं की पुष्टि करें।
  • रॉ सैंपल्स, फिक्स्ड-विंडो एग्रीगेट्स, रिकॉर्डिंग-रूल परिणामों और लॉन्ग-टर्म आर्काइव्स को अलग करें।
  • काउंटर्स, हिस्टोग्राम्स या क्वांटाइल्स को एक साधारण औसत (average) से न बदलें; एग्रीगेशन को मेट्रिक सिमेंटिक्स को बनाए रखना चाहिए।
  • कम से कम एक बार (at-least-once) इंजेक्शन, डुप्लिकेट सैंपल्स, आउट-ऑफ-ऑर्डर टाइमस्टैम्प्स और टेनेंट आइसोलेशन को परिभाषित करें।

3. कोर आर्किटेक्चर

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

4. संदर्भ प्रवाह

text
ingest(sample):
  series = canonicalize(metric_name, sorted_labels)
  enforce_cardinality_budget(series)
  append_to_time_partition(series, sample)

downsample(window):
  raw = read_raw(window)
  agg = aggregate_by_metric_semantics(raw, resolution=5m)
  write_versioned_block(window, agg, source_watermark)
  verify_counts_checksums_and_watermark(agg)

query(range, step):
  blocks = choose_resolution(range, step)
  return merge_with_gap_and_resolution_metadata(blocks)

काउंटर्स के लिए, इंक्रीमेंट्स और रीसेट्स को सुरक्षित रखें; गेज के लिए, न्यूनतम/अधिकतम/औसत को सुरक्षित रखें; हिस्टोग्राम्स के लिए, बकेट्स या नेटिव हिस्टोग्राम संरचनाओं को मर्ज करें। वास्तविक रिज़ॉल्यूशन, कवरेज और अंतराल (gaps) लौटाएं ताकि यूज़र्स डाउनसैंपल किए गए डेटा को रॉ प्रिसिजन समझने की भूल न करें।

5. कंसिस्टेंसी और लागत ट्रेड-ऑफ

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

6. सत्यापन और ऑब्जर्वेबिलिटी

  • प्रत्येक विंडो के लिए इनपुट/आउटपुट सैंपल काउंट्स, काउंटर इंक्रीमेंट्स, बकेट टोटल्स, चेकसम और वॉटरमार्क को मान्य करें।
  • उसी विंडो को बार-बार रीप्ले करें और इडेम्पोटेंसी तथा रिप्लेसेबल रिज़ल्ट वर्ज़न्स की पुष्टि करें।
  • इंजेक्शन रिजेक्शन रेट, सीरीज़ काउंट, क्वेरी सैंपल्स, डाउनसैंपलिंग डिले, गैप रेट और स्टोरेज लागत की निगरानी करें।
  • वास्तविक घटनाओं के लिए रॉ और एग्रीगेट परिणामों की तुलना करें ताकि यह सुनिश्चित हो सके कि स्पाइक्स, रीसेट्स और विसंगतियां (anomalies) औसत में दब न जाएं।

7. सामान्य गलतियां

  • प्रत्येक मेट्रिक को समय के अनुसार औसत निकालना और काउंटर, क्वांटाइल या हिस्टोग्राम सिमेंटिक्स को तोड़ना।
  • सीरीज़ की (key) के रूप में अनसॉर्टेड लेबल स्ट्रिंग्स का उपयोग करना, जिससे डुप्लिकेट सीरीज़ और गलत कार्डिनैलिटी उत्पन्न होती है।
  • डाउनसैंपलिंग सत्यापित होने से पहले रॉ ब्लॉक्स को हटाना, जिससे रीप्ले या लेट-डेटा सुधार असंभव हो जाता है।
  • केवल टाइम रेंज के आधार पर रूट करना और स्टेप, गैप्स व रिज़ॉल्यूशन मेटाडेटा की अनदेखी करना।

8. इंटरव्यू स्कोरिंग बिंदु

एक टियर डेटा मॉडल को परिभाषित करता है

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

मेट्रिक सिमेंटिक्स को बनाए रखता है

उम्मीदवार सभी प्रकारों पर एक औसत फ़ंक्शन लागू करने के बजाय काउंटर्स, गेज, हिस्टोग्राम्स और क्वांटाइल्स के साथ अलग-अलग व्यवहार करता है।

कार्डिनैलिटी और लागत को नियंत्रित करता है

उम्मीदवार लेबल रूल्स, टेनेंट कोटा, इंजेक्शन रिजेक्शन और स्टोरेज बजट का प्रस्ताव करता है, फिर क्वेरी-लागत संबंध की व्याख्या करता है।

रीप्लेएबल वैलिडेशन डिज़ाइन करता है

उम्मीदवार वॉटरमार्क, वर्ज़न्स, इडेम्पोटेंट राइट्स और रीप्ले चेक का उपयोग करता है, साथ ही गैप्स, डिले और विसंगतियों की सटीकता की निगरानी करता है।

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

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

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

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

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

टूल देखें