Interviewfrage für DevOps Engineer

Wie lieferst du eine brechende Datenbank-Schemaänderung ohne Downtime aus?

Worauf der Interviewer abzielt, wie du deine Antwort aufbaust und ein gesprochenes Beispiel zum Anpassen.

Kurzantwort

Nutze das Expand-and-Contract-Muster. Erst expand: die neue Spalte oder Tabelle rückwärtskompatibel hinzufügen, sodass der aktuell deployte Code weiter funktioniert. Dann Code deployen, der alt und neu schreibt, bestehende Zeilen in kleinen Batches backfillen, die Lesepfade auf die neue Form umstellen und erst in einem späteren Release die alte Spalte droppen. Jede Migration muss mit der Anwendungsversion davor und danach kompatibel sein.

Warum Interviewer das fragen

Der Interviewer will wissen, ob du Schemaänderungen gegen Live-Traffic ausgeliefert hast oder nur in der Entwicklung. Er hört auf Expand and Contract, auf Backfill in Batches, um lange Locks und Replikationslag zu vermeiden, und auf die Entkopplung von Migration und Deploy. Konkrete Lock-Gefahren zu nennen, etwa Indexerstellung, zeigt echte Produktionserfahrung statt Theorie.

So baust du deine Antwort auf

  • Nenne das Muster und die Invariante: jeder Schritt ist rückwärtskompatibel.
  • Geh die Phasen der Reihe nach durch: expand, dual write, backfill, umschalten, contract.
  • Deck Lock- und Replikationsgefahren ab und wie du sie vermeidest.
  • Sag, wie du verifizierst und wie du in jeder Phase zurückrollst.

Beispielantwort

Gesprochenes Beispiel, erste Person

Meine Regel ist, dass jedes deployte Schema mit der vorherigen und der nächsten Codeversion funktionieren muss, denn während eines Rolling Deploy laufen beide gleichzeitig. Ich benenne also nie eine Spalte um, ich expand und contract. Sagen wir, wir teilen ein Namensfeld auf. Die erste Migration fügt die neuen nullable Spalten hinzu, das ist billig und fasst keine bestehende Zeile an. Dann ein Release, in dem die Anwendung alt und neu schreibt, aber weiter die alte Form liest, sodass noch nichts Nutzersichtbares von den neuen Daten abhängt. Dann ein Backfill in Batches von ein paar tausend mit Pausen dazwischen, damit ich keine lange Transaktion halte und den Replikationslag auf den Replicas nicht sprengen lasse. Dann ein Release, das die neuen Spalten liest, während die alten weiter geschrieben werden als Notausgang. Erst wenn das ein, zwei Releases stabil war, höre ich mit dem Dual Write auf und droppe die alten Spalten. Ich halte Migrationen außerdem aus dem Deploy-Pfad raus, und alles, was einen schweren Lock nimmt, etwa ein Indexaufbau, läuft concurrently und außerhalb der Spitzenzeiten.

Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.

So funktioniert es

Nachfragen, mit denen du rechnen solltest

  • Wie verifizierst du, dass der Backfill vollständig und korrekt ist?
  • Wie sieht dein Rollback-Plan aus, wenn die Leseumstellung schiefgeht?
  • Wie würdest du das bei einer Tabelle mit einer halben Milliarde Zeilen machen?

Weitere Fragen für DevOps Engineer

Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.

Meine Fragen vorhersagen

Üb die harten Fragen, bevor sie gestellt werden

Trainier mit einem Live-Copiloten und geh dann vorbereitet rein. Ein $29 Session Pass bringt dich durch das Vorstellungsgespräch, ohne Abo und ohne Bindung.

GhostPilot holen