Interviewfrage für Backend-Entwickler

Deine Message Queue garantiert At-least-once-Delivery. Was heißt das für den Consumer, den du schreibst?

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

Kurzantwort

Es heißt, Duplikate sind normal und nicht die Ausnahme, dein Consumer muss also idempotent sein. Leite einen stabilen Key aus der Message ab, schreib verarbeitete Keys in derselben Transaktion wie den Effekt, und behandle eine Wiederholung als No-op. Rechne außerdem mit Zustellung außer der Reihe und mit erneuter Zustellung nach einem Crash zwischen Arbeit und Acknowledgment. Exactly-once von Ende zu Ende gibt es über Systemgrenzen hinweg nicht; du bekommst At-least-once plus idempotente Verarbeitung.

Warum Interviewer das fragen

Das ist die mit Abstand häufigste Quelle für doppelte Abbuchungen und doppelte E-Mails in eventgetriebenen Systemen. Der Interviewer will wissen, ob du Consumer defensiv baust oder annimmst, der Broker schütze dich schon. Wenn du das Acknowledgment-Fenster erwähnst, eine Dedupe-Tabelle, die in derselben Transaktion geschrieben wird, und eine Dead Letter Queue, zeigt das, dass du einen Consumer betrieben und nicht nur geschrieben hast.

So baust du deine Antwort auf

  • Sag klar, dass Duplikate auftreten werden, und warum.
  • Nenn den Idempotenz-Mechanismus, inklusive wo der Eintrag geschrieben wird.
  • Geh auf Reihenfolge und das Acknowledgment-Fenster ein.
  • Ergänz Fehlerbehandlung: Retries mit Backoff und eine Dead Letter Queue.

Beispielantwort

Gesprochenes Beispiel, erste Person

Es heißt, ich bekomme dieselbe Message zweimal, meistens weil der Consumer die Arbeit gemacht hat und dann vor dem Acknowledgment gestorben ist, also stellt der Broker erneut zu. Der Consumer muss daher sicher zweimal mit derselben Eingabe laufen können. In der Praxis nehme ich eine stabile id aus der Message, und wenn ich den Effekt schreibe, schreibe ich die verarbeitete id in derselben Datenbanktransaktion, mit einem Unique Constraint. Kollidiert das Insert, weiß ich, dass ich das schon erledigt habe, und acknowledge, ohne die Arbeit zu wiederholen. Entscheidend ist, dass Dedupe-Eintrag und Effekt zusammen committen; schreibe ich sie getrennt, gibt es ein Fenster, in dem ich duplizieren kann. Ich gehe außerdem davon aus, dass die Reihenfolge nicht garantiert ist, Handler sind also so geschrieben, dass sie ein Update vor dem Create verkraften, meistens über den Entity-Key plus eine Versionsprüfung. Für Fehler nutze ich begrenzte Retries mit exponentiellem Backoff und Jitter, danach eine Dead Letter Queue mit Alert, denn eine Poison Message still ewig zu wiederholen ist genau der Weg, wie eine Queue über Nacht volläuft.

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

  • Wo genau würdest du den Deduplizierungs-Key speichern, und wie lange?
  • Wie erhältst du die Reihenfolge, wenn du sie brauchst?
  • Wie sieht dein Vorgehen aus, eine Dead Letter Queue abzuarbeiten?

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

Ü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