Geh davon aus, dass jede Message mehr als einmal ankommen kann, und mach die Verarbeitung idempotent. Leit einen stabilen Key aus der Message ab und prüf und speicher ihn entweder vor der Aktion in einem Store, oder nutz einen Conditional Write, sodass eine Wiederholung ein No-op ist. Setz das Visibility Timeout über deine schlimmste Verarbeitungszeit, verlänger es für lange Jobs, und schick Messages nach ein paar Fehlversuchen in eine Dead Letter Queue, damit Poison Messages den Fortschritt nicht blockieren.
Warum Interviewer das fragen
Doppelte Zustellung ist eine dieser Realitäten, die Leute, die verteilte Systeme betrieben haben, von Leuten trennt, die darüber gelesen haben. Der Interviewer will Idempotenz als erste Antwort, konkret ausgedrückt statt als Wort, dazu operative Details wie Visibility Timeouts und Dead Letter Queues. Ordering und Teilfehler korrekt zu behandeln macht aus einem funktionierenden Consumer einen verlässlichen.
So baust du deine Antwort auf
- Akzeptier Duplikate als normal und mach Idempotenz zum Zentrum des Designs.
- Gib einen konkreten Idempotenz-Mechanismus an, nicht nur den Begriff.
- Geh auf Visibility Timeouts und lang laufende Arbeit ein.
- Behandle Poison Messages, Retries mit Backoff und Ordering.
Beispielantwort
Ich starte mit der Annahme, dass jede Message irgendwann mindestens zweimal ankommt, meistens weil ein Consumer langsam war und das Visibility Timeout ablief, während die Arbeit schon committet war. Der Consumer muss also idempotent sein, und ich will das konkret statt als Absichtserklärung. Meistens ist das ein Idempotenz-Key aus der Message, entweder eine ID, die der Producer gesetzt hat, oder ein Hash des bedeutungstragenden Inhalts, festgehalten in einer Tabelle mit Unique Constraint innerhalb derselben Transaktion wie die Arbeit. Wenn das Insert kollidiert, haben wir das schon gemacht, also acknowledgen und weiter. Wo der Effekt ein Write in einen Store ist, nehme ich lieber ein Conditional Update, dann landet zweimaliges Anwenden im selben Zustand. Operativ muss das Visibility Timeout über der langsamsten realistischen Verarbeitungszeit liegen, und bei wirklich langen Jobs verlängere ich das Lease unterwegs, statt ein riesiges globales Timeout zu setzen. Fehler werden mit exponentiellem Backoff und Jitter wiederholt, und nach wenigen Versuchen geht die Message mit angehängtem Fehler in eine Dead Letter Queue, damit eine schlechte Message nie den Rest blockiert.
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 gehst du mit einem Seiteneffekt um, den du nicht idempotent machen kannst, etwa einer E-Mail?
- Wie würdest du eine Dead Letter Queue sicher erneut verarbeiten?
- Was ändert sich, wenn du zusätzlich striktes Ordering brauchst?
Weitere Fragen für Cloud 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