Idempotenz bedeutet, dass eine Operation mehrfach ausgeführt denselben Zustand hinterlässt wie einmal ausgeführt. Eine Adresse auf einen bestimmten Wert zu setzen ist idempotent — zehnmal ausgeführt ist das Ergebnis dasselbe. Einen Betrag zu einem Konto zu addieren ist es nicht.
Warum Wiederholungen unvermeidbar sind
In einem verteilten System kann eine Anfrage ankommen und ihre Antwort verloren gehen. Der Sender weiss dann nicht, ob die Operation ausgeführt wurde. Er hat zwei Möglichkeiten: nicht wiederholen und riskieren, dass nichts passiert ist, oder wiederholen und riskieren, dass es doppelt passiert. Ohne Idempotenz ist beides gefährlich. Mit Idempotenz ist die Wiederholung risikolos, und das Problem verschwindet.
Der Idempotenzschlüssel
Für Operationen, die von Natur aus nicht idempotent sind, ist der übliche Weg ein Schlüssel, den der Aufrufer mitschickt. Das empfangende System merkt sich, welche Schlüssel es bereits verarbeitet hat. Kommt dieselbe Anfrage mit demselben Schlüssel erneut, wird nicht erneut ausgeführt, sondern das gespeicherte Ergebnis zurückgegeben. Entscheidend ist, dass der Schlüssel vom Aufrufer stammt und beim Wiederholungsversuch identisch bleibt — ein neu erzeugter Schlüssel macht das Verfahren wirkungslos.
Wo es in der Praxis zählt
Drei Bereiche dominieren. Zahlungen, wo eine Doppelbuchung unmittelbar Schaden verursacht. Webhook-Verarbeitung, wo Mehrfachzustellung der Normalfall ist. Und Datenimporte, wo ein abgebrochener und erneut gestarteter Vorgang keinen halben oder doppelten Zustand hinterlassen darf. In allen drei Fällen ist Idempotenz keine Verbesserung, sondern die Bedingung für Verlässlichkeit.
Der Unterschied zur Deduplizierung
Idempotenz und nachträgliches Entfernen von Duplikaten werden gelegentlich verwechselt. Idempotenz verhindert, dass ein Duplikat überhaupt entsteht. Deduplizierung räumt hinterher auf. Der zweite Weg ist unterlegen, weil zwischen Entstehen und Aufräumen ein Zustand existiert, in dem das Duplikat wirksam war — die zweite E-Mail ist versendet, bevor jemand sie entfernt.
Wo es schwierig wird
Schwierig sind Operationen mit Nebenwirkungen ausserhalb des eigenen Systems: eine versendete Nachricht, ein Aufruf bei einem Dritten. Diese lassen sich nicht zurücknehmen, weshalb die Prüfung vor der Ausführung stattfinden muss und nicht danach. Schwierig ist auch die Aufbewahrungsdauer der Schlüssel: zu kurz, und eine späte Wiederholung wird erneut ausgeführt; zu lang, und der Speicher wächst unbegrenzt.
Praktische Konsequenz
Bei jeder Schnittstelle, die einen Zustand verändert, gehört die Frage beantwortet, was bei zweimaligem Aufruf passiert. Ist die Antwort nicht dasselbe wie bei einmaligem, braucht es einen Idempotenzschlüssel — und zwar bevor das erste Duplikat in der Produktion auftritt.
