इसे पीछे की तरफ संगत कदमों में बांटें। पहले schema का बदलाव ऐसे रूप में डालें जिसे चल रहा कोड सह ले, जैसे nullable column जोड़ना, फिर ऐसा कोड डालें जो पुराने और नए दोनों में लिखे, बैचों में backfill करें, reads बदलें, और पुराना column किसी बाद वाली release में ही हटाएं। लंबे table locks से बचें और rollback का रास्ता हमेशा टेस्ट करें।
इंटरव्यूअर यह क्यों पूछते हैं
Migrations वहीं हैं जहां सावधान इंजीनियर उन लोगों से अलग होते हैं जिन्होंने सिर्फ इतने छोटे प्रोजेक्ट किए हैं कि आउटेज ले लेना चलता था। इंटरव्यूअर expand और contract वाला तरीका चाहता है, यह समझ कि rolling deploy के दौरान पुराना और नया कोड साथ चलते हैं, और यह जानकारी कि Postgres में कौन से operations table को इतनी देर लॉक करते हैं कि साइट बैठ जाए।
अपना जवाब कैसे स्ट्रक्चर करें
- expand और contract वाले तरीके का नाम लें।
- deploys का क्रम ऐसा रखें कि कोड के दोनों वर्जन चलें।
- backfill बैचों में करें, एक ही statement में कभी नहीं।
- जिन locking operations से बचना है उन्हें बताएं।
उदाहरण जवाब
जिस नियम पर मैं टिका रहता हूं वह यह है कि rolling deploy के दौरान कोड के दो वर्जन एक ही डेटाबेस से बात कर रहे होते हैं, तो हर कदम दोनों के लिए सुरक्षित होना चाहिए। column का नाम बदलना क्लासिक जाल है। उसकी जगह मैं expand करता हूं: नया nullable column अपनी अलग migration में जोड़ता हूं, ऐसा कोड शिप करता हूं जो दोनों fields में लिखे और पढ़े अब भी पुराना, मौजूदा rows को कुछ हजार के बैचों में बीच में रुक रुककर backfill करता हूं ताकि replication पीछे न छूटे, फिर अगली release में reads पलटता हूं, और तीसरी release में ही पुराना column गिराता हूं। Postgres की बारीकियां भी मायने रखती हैं। बड़ी table पर NOT NULL constraint जोड़ना भारी लॉक लेता है, तो मैं column nullable जोड़ता हूं, backfill करता हूं, फिर constraint अलग से validate करता हूं। जरूरत पड़ने पर Django separate_database_and_state और non atomic migrations देता है, और मैं छोटा lock_timeout रखता हूं ताकि अटकी migration जल्दी फेल हो जाए, हर query को अपने पीछे कतार में न लगाए। हर migration को एक टेस्ट किया हुआ rollback भी मिलता है।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- अगर backfill में छह घंटे लगें तो?
- writes रोके बिना index कैसे जोड़ते हैं?
- schema बदलने के बाद deploy को रोलबैक कैसे करते हैं?
Python डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें