क्लाउड इंजीनियर इंटरव्यू सवाल

जिस queue में at least once delivery की गारंटी है, उसके लिए consumer आप कैसे डिजाइन करते हैं?

इंटरव्यूअर असल में क्या परख रहा है, अपना जवाब कैसे स्ट्रक्चर करें, और एक बोला हुआ उदाहरण जिसे आप अपना सकते हैं।

छोटा जवाब

मान लें कि हर message एक से ज्यादा बार आ सकता है और processing को idempotent बनाएं। message से एक स्थिर key निकालें, और या तो काम करने से पहले उसे किसी store में जांचकर दर्ज करें या conditional write इस्तेमाल करें ताकि दोहराव कुछ करे ही नहीं। visibility timeout अपने सबसे खराब processing time से ऊपर रखें, लंबे काम के लिए उसे बढ़ाएं, और कुछ नाकामियों के बाद message को dead letter queue में भेजें ताकि जहरीले message आगे का रास्ता न रोकें।

इंटरव्यूअर यह क्यों पूछते हैं

duplicate delivery उन हकीकतों में से है जो distributed systems चला चुके लोगों को उनसे अलग करती है जिन्होंने सिर्फ उनके बारे में पढ़ा है। इंटरव्यूअर पहले जवाब में idempotency चाहता है, एक शब्द के बजाय ठोस रूप में बताई गई, साथ में visibility timeout और dead letter queue जैसी ऑपरेशनल डिटेल। ordering और आंशिक नाकामी को ठीक से संभालना ही एक चलते हुए consumer को भरोसेमंद consumer बनाता है।

अपना जवाब कैसे स्ट्रक्चर करें

  • duplicate को सामान्य मानें और idempotency को डिजाइन का केंद्र बनाएं।
  • सिर्फ शब्द नहीं, idempotency का एक ठोस तरीका दें।
  • visibility timeout और लंबे चलने वाले काम कवर करें।
  • जहरीले message, backoff के साथ retry, और ordering संभालें।

उदाहरण जवाब

बोला हुआ उदाहरण, पहले व्यक्ति में

मैं इस मान्यता से शुरू करता हूं कि हर message किसी न किसी वक्त कम से कम दो बार आएगा, आमतौर पर इसलिए कि consumer धीमा था और काम commit हो जाने के बाद visibility timeout खत्म हो गया। तो consumer को idempotent होना चाहिए, और मैं चाहता हूं कि वह इच्छा नहीं, एक ठोस चीज हो। आमतौर पर वह message से निकली एक idempotency key होती है, या तो producer की सेट की हुई id या अर्थपूर्ण content का hash, जिसे काम के उसी transaction के भीतर unique constraint वाली table में दर्ज किया जाता है। अगर insert टकराता है, तो हम यह पहले कर चुके हैं, acknowledge करके आगे बढ़ो। जहां असर किसी store में write होना है वहां मैं इसके बजाय conditional update पसंद करता हूं, ताकि उसे दो बार लगाने पर भी वही स्थिति बने। ऑपरेशनल तौर पर visibility timeout को सबसे धीमे वास्तविक processing time से ऊपर होना चाहिए, और सचमुच लंबे काम के लिए मैं एक बड़ा global timeout रखने के बजाय चलते चलते lease बढ़ाता रहता हूं। नाकामियां exponential backoff और jitter के साथ retry होती हैं, और थोड़ी कोशिशों के बाद message error के साथ dead letter queue में चला जाता है, ताकि एक खराब message बाकी सब को कभी न रोके।

जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।

देखें यह कैसे काम करता है

फॉलो-अप सवाल जिनकी उम्मीद रखें

  • जिस side effect को idempotent नहीं बनाया जा सकता, जैसे email भेजना, उसे आप कैसे संभालते हैं?
  • dead letter queue को दोबारा सुरक्षित तरीके से process आप कैसे करेंगे?
  • अगर सख्त ordering भी चाहिए तो क्या बदल जाता है?

क्लाउड इंजीनियर के और सवाल

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

मेरे सवाल प्रेडिक्ट करें

मुश्किल सवाल पूछे जाने से पहले उनकी रिहर्सल कीजिए

एक लाइव कोपायलट के साथ प्रैक्टिस कीजिए, फिर तैयार होकर अंदर जाइए। $29 Session Pass आपको इंटरव्यू पार करा देता है, न कोई सब्सक्रिप्शन, न कोई लॉक-इन।

GhostPilot पाएं