मतलब यह कि duplicates सामान्य बात हैं, अपवाद नहीं, इसलिए आपके consumer को idempotent होना ही पड़ेगा। message से एक स्थिर key निकालें, processed keys को उसी ट्रांजैक्शन में लिखें जिसमें असर होता है, और दोहराव को no op मानें। साथ ही out of order delivery की उम्मीद रखें, और यह भी कि काम करने और acknowledge करने के बीच crash होने पर redelivery होगी। सिस्टम्स के आर पार exactly once जैसा कुछ होता नहीं; आपको at least once मिलता है, और उसके साथ idempotent handling करनी होती है।
इंटरव्यूअर यह क्यों पूछते हैं
event driven सिस्टम्स में duplicate charges और duplicate emails की सबसे बड़ी वजह यही है। इंटरव्यूअर जानना चाहते हैं कि आप consumers को बचाव की सोच से डिज़ाइन करते हैं या यह मान लेते हैं कि broker आपको बचा लेगा। acknowledgment window का ज़िक्र, उसी ट्रांजैक्शन में लिखी गई dedupe टेबल, और dead letter queue बताना यह दिखाता है कि आपने consumer सिर्फ लिखा नहीं, चलाया भी है।
अपना जवाब कैसे स्ट्रक्चर करें
- साफ कहें कि duplicates आएंगे ही, और क्यों आएंगे।
- idempotency का तरीका बताएं, यह भी कि record कहां लिखा जाता है।
- ordering और acknowledgment window पर बात करें।
- failure handling जोड़ें: backoff के साथ retries और एक dead letter queue।
उदाहरण जवाब
इसका मतलब है वही message मुझे दो बार मिलेगा, आमतौर पर इसलिए कि consumer ने काम कर लिया और acknowledge करने से पहले मर गया, तो broker ने दोबारा भेज दिया। इसलिए consumer को एक ही input पर दो बार चलने लायक सुरक्षित होना चाहिए। व्यवहार में मैं message से एक स्थिर id लेता हूं, और जब असर लिखता हूं तो उसी डेटाबेस ट्रांजैक्शन में processed id भी लिखता हूं, एक unique constraint के साथ। अगर insert conflict करता है तो मुझे पता चल जाता है कि मैं इसे पहले ही संभाल चुका हूं और मैं काम दोहराए बिना acknowledge कर देता हूं। सबसे अहम बात यह है कि dedupe record और असर एक साथ commit हों; अलग अलग लिखूं तो एक ऐसा झरोखा बचता है जहां duplicate हो सकता है। मैं यह भी मानकर चलता हूं कि ordering की गारंटी नहीं है, इसलिए handlers ऐसे लिखे जाते हैं कि create से पहले update आ जाए तो भी चल जाए, आमतौर पर entity पर key लगाकर और version जांचकर। नाकामी पर मैं exponential backoff और jitter के साथ सीमित retry करता हूं, फिर alert वाली dead letter queue, क्योंकि किसी poison message को चुपचाप हमेशा retry करते रहना ही वह तरीका है जिससे रात भर में queue भर जाती है।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- deduplication key आप ठीक कहां रखेंगे, और कितने समय तक?
- जब ordering ज़रूरी हो, तो आप उसे कैसे बनाए रखते हैं?
- dead letter queue खाली करने की आपकी प्रक्रिया क्या है?
बैकएंड डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें