Nimm das Transactional-Outbox-Pattern: schreib das Event in derselben Transaktion wie die Statusänderung in eine Outbox-Tabelle, und lass dann einen separaten Relay pollen oder das Log mitlesen, publishen und als gesendet markieren. So gibt es einen Commit, du kannst also nie eine Zeile ohne Event oder ein Event ohne Zeile haben. Der Relay liefert At-least-once, Consumer müssen also weiterhin idempotent sein.
Warum Interviewer das fragen
Das Dual-Write-Problem ist einer der prägenden Fehlermodi verteilter Systeme, und viele Kandidaten haben es nie benannt. Der Interviewer will sehen, dass du erkennst: Publishen nach dem Commit kann Events verlieren, Publishen vor dem Commit kann Events erfinden. Die Outbox zu kennen, und zu wissen, dass Change Data Capture dieselbe Idee vom Write-Ahead-Log aus ist, signalisiert echte Erfahrung mit eventgetriebenen Systemen.
So baust du deine Antwort auf
- Benenn das Dual-Write-Problem und beide Richtungen, in denen es scheitert.
- Beschreib die Outbox mechanisch: eine Transaktion, separater Relay.
- Erwähn Change Data Capture als log-basierte Variante.
- Nenn die Konsequenzen: Reihenfolge, At-least-once, Outbox-Aufräumen.
Beispielantwort
Die Falle ist, dass ein Datenbank-Commit und ein Broker-Publish zwei getrennte Systeme sind, jede Reihenfolge, die du wählst, hat also einen Fehlermodus. Publishst du zuerst, kann die Transaktion zurückrollen, und Consumer handeln auf etwas, das nie passiert ist. Committest du zuerst, kann der Prozess vor dem Publish sterben, das Event ist verloren und nichts wiederholt es. Das Outbox-Pattern schließt die Lücke: die Event-Zeile wird innerhalb derselben Transaktion wie die fachliche Änderung in eine Outbox-Tabelle eingefügt, entweder landen also beide oder keins. Danach liest ein Relay ungesendete Zeilen der Reihe nach, publisht sie und markiert sie als gesendet, und wenn er mitten im Publish abstürzt, publisht er einfach nochmal, weshalb Consumer idempotent sein müssen. Bin ich auf Postgres und will weniger Polling, nehme ich Change Data Capture vom Write-Ahead-Log mit etwas wie Debezium, dieselbe Garantie mit weniger selbstgebautem Code. Die operativen Details, die man einplanen sollte, sind das Aufräumen der Outbox und das Monitoring der Relay-Verzögerung, denn eine Outbox, die nicht mehr abfließt, sieht aus Sicht der Anwendung komplett gesund aus.
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 esNachfragen, mit denen du rechnen solltest
- Wie würdest du überwachen, dass der Relay hinterherkommt?
- Welche Reihenfolgegarantien gibt dir die Outbox tatsächlich?
- Wann würdest du Change Data Capture einer selbst geschriebenen Outbox vorziehen?
Weitere Fragen für Backend-Entwickler
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