बैकएंड डेवलपर इंटरव्यू सवाल

आपको डेटाबेस अपडेट करना है और एक event भी publish करना है। इन दोनों को बेमेल होने से आप कैसे रोकेंगे?

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

छोटा जवाब

transactional outbox pattern इस्तेमाल करें: state बदलने वाले उसी ट्रांजैक्शन में event को एक outbox टेबल में लिखें, फिर एक अलग relay उसे poll करे या log से पढ़े और publish करके sent मार्क कर दे। इस तरह एक ही commit होता है, तो न कभी event के बिना row बचेगी और न row के बिना event। relay at least once delivery देता है, इसलिए consumers को फिर भी idempotent होना चाहिए।

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

dual write की समस्या डिस्ट्रिब्यूटेड सिस्टम्स की सबसे बुनियादी नाकामियों में से है, और बहुत से कैंडिडेट्स ने इसका नाम तक नहीं सुना होता। इंटरव्यूअर देखना चाहते हैं कि आप समझते हैं कि commit के बाद publish करने से events गुम हो सकते हैं और commit से पहले publish करने से ऐसे events बन सकते हैं जो हुए ही नहीं। outbox जानना, और यह जानना कि change data capture वही विचार है जो write ahead log से चलता है, असली event driven अनुभव की निशानी है।

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

  • dual write समस्या का नाम लें और उसकी दोनों दिशाओं की नाकामी बताएं।
  • outbox को मशीनी तरीके से बताएं: एक ट्रांजैक्शन, अलग relay।
  • log आधारित रूप के तौर पर change data capture का ज़िक्र करें।
  • नतीजे बताएं: ordering, at least once, outbox की सफाई।

उदाहरण जवाब

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

फंदा यह है कि डेटाबेस commit और broker publish दो अलग सिस्टम हैं, इसलिए आप जो भी क्रम चुनें, उसकी एक नाकामी बनी रहती है। पहले publish करें तो ट्रांजैक्शन roll back हो सकता है, और consumers ऐसी चीज़ पर काम कर बैठते हैं जो हुई ही नहीं। पहले commit करें तो publish से पहले प्रोसेस मर सकती है, तो event गुम हो जाता है और उसे कोई दोबारा नहीं भेजता। outbox pattern यह खाई मिटा देता है: event row उसी ट्रांजैक्शन के अंदर outbox टेबल में insert होती है जिसमें बिज़नेस बदलाव होता है, तो या तो दोनों टिकते हैं या कोई नहीं। फिर एक relay unsent rows क्रम में पढ़कर publish करता है और उन्हें sent मार्क करता है, और publish के बीच crash हो जाए तो वह बस दोबारा publish कर देता है, इसीलिए consumers को idempotent होना ज़रूरी है। अगर मैं Postgres पर हूं और कम polling चाहता हूं, तो Debezium जैसी चीज़ से write ahead log पर change data capture लगाता हूं, जो वही गारंटी कम खुद के लिखे कोड में दे देती है। जिन ऑपरेशनल बातों की योजना बनानी चाहिए वे हैं outbox की छंटाई और relay lag की निगरानी, क्योंकि जो outbox खाली होना बंद कर दे, वह एप्लिकेशन की तरफ से पूरी तरह स्वस्थ दिखता है।

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

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

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

  • relay पीछे तो नहीं छूट रहा, यह आप कैसे मॉनिटर करेंगे?
  • outbox असल में आपको ordering की कौन सी गारंटी देता है?
  • एप्लिकेशन में लिखे outbox की जगह आप change data capture कब चुनेंगे?

बैकएंड डेवलपर के और सवाल

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

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

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

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

GhostPilot पाएं