यह cache stampede है, जिसे कभी कभी thundering herd भी कहते हैं। हजारों रिक्वेस्ट एक ही पल में miss होती हैं और सब वही वैल्यू दोबारा निकालती हैं। इसे single flight locking से ठीक करें ताकि सिर्फ एक worker दोबारा गिने और बाकी इंतजार करें या पुराना डेटा दें। TTL में jitter जोड़ें ताकि keys एक साथ एक्सपायर न हों, hot keys को एक्सपायरी से पहले बैकग्राउंड में रिफ्रेश करें, और एरर पर पुराना डेटा परोसें।
इंटरव्यूअर यह क्यों पूछते हैं
यह पसंदीदा सवाल है क्योंकि सीधा जवाब (TTL बढ़ा दो) कुछ ठीक नहीं करता, वह बस घटना को कम बार पर और बड़ा बना देता है। इंटरव्यूअर रिक्वेस्ट coalescing, probabilistic early expiry और stale while revalidate देखना चाहते हैं। इससे यह भी पता चलता है कि आप एक साथ जुड़ी नाकामी के बारे में सोचते हैं या नहीं, जो रिलायबिलिटी के ज्यादातर सवालों का असली विषय है।
अपना जवाब कैसे स्ट्रक्चर करें
- नाकामी का नाम लें और बताएं कि miss समय में एक साथ क्यों होती हैं।
- मुख्य हल दें: एक साथ होने वाली गणनाओं को एक में जोड़ना।
- hot keys के लिए TTL jitter और बैकग्राउंड रिफ्रेश जोड़ें।
- पुराना डेटा परोसने को सोचा समझा degraded मोड बताकर समझाएं।
- जो miss कुछ नहीं लौटातीं, उनके लिए negative cache का जिक्र करें।
उदाहरण जवाब
यह stampede है। key एक्सपायर होती है, चल रही दस हजार रिक्वेस्ट एक साथ miss होती हैं, और सब वही महंगी query चलाती हैं, तो डेटाबेस को उस query की दस हजार नकलें दिखती हैं जो उसे आम तौर पर मिनट में एक बार दिखती है। पहला हल coalescing है, यानी कैश में एक single flight lock का मतलब है कि एक worker दोबारा गिनता है और बाकी सब उसी नतीजे का इंतजार करते हैं या पुरानी वैल्यू पाते हैं। हमने इसके लिए छोटे TTL वाला Redis SETNX lock इस्तेमाल किया और उस रास्ते पर डेटाबेस का लोड करीब सौ गुना गिर गया। इसके ऊपर मैं हर TTL में jitter जोड़ता हूं, तो ठीक 300 सेकंड की जगह वह 300 जमा घटा 10% होता है, जिससे keys की एक्सपायरी आपस में जुड़ी नहीं रहती। सच में hot keys के लिए मुझे probabilistic early recomputation पसंद है, जिसमें TTL के आखिर के पास आई रिक्वेस्ट कैश की वैल्यू देते हुए बैकग्राउंड में रिफ्रेश कर देती है। और मैं negative नतीजे हमेशा कैश करता हूं, वरना एक गायब row अंतहीन query लूप बन जाती है।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- बिना distributed lock के आप single flight कैसे लागू करेंगे?
- पुराना डेटा परोसने का जोखिम क्या है, और यह कहां नामंजूर है?
- key एक्सपायर होने के बजाय कोई cache node मर जाए तो आप कैसे संभालेंगे?
साइट रिलायबिलिटी इंजीनियर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें