Idempotenz
Idempotenz ist die Eigenschaft eines Aufrufs, bei jeder weiteren Ausführung nichts mehr zu verändern: Der zweite und jeder folgende Durchlauf lässt den Zustand des Zielsystems so, wie ihn der erste hergestellt hat.
Zwischen zwei Systemen entscheidet diese Eigenschaft darüber, ob ein abgebrochener Übertragungsversuch einfach noch einmal gestartet werden darf.
In einfachen Worten
Zwischen zwei Systemen gibt es eine Unsicherheit, die sich technisch nicht auflösen lässt: Läuft eine Übertragung in eine Zeitüberschreitung, kennt der Absender das Schicksal seiner Nachricht nicht. Sie kann unterwegs verloren gegangen sein, sie kann aber auch angekommen und bereits verarbeitet worden sein, während nur die Rückmeldung fehlt. Beide Fälle sehen für ihn gleich aus. Die praktische Antwort darauf lautet, es noch einmal zu versuchen, und damit verlagert sich die Anforderung auf die Empfängerseite. Sie muss eine zweite Zustellung derselben Sache erkennen können. Dafür trägt jede Nachricht eine Kennung, die das fachliche Geschehen bezeichnet und über alle Versuche hinweg gleich bleibt. Der Empfänger führt Buch über die Kennungen, die er abgearbeitet hat, und beantwortet eine bekannte Kennung mit dem Ausgang von damals. Fehlt diese Vorkehrung, wächst aus einer einzigen Bestellung ein zweiter Auftrag samt zugehörigem Beleg.
Wozu brauche ich das?
Die Anforderung stellt sich an jeder Stelle, an der ein Geschäftsvorfall eine Systemgrenze überschreitet: beim Weiterreichen einer Bestellung an die Warenwirtschaft, bei der Rückmeldung einer Zahlung an den Verkaufskanal, bei Versandmeldungen eines Logistikpartners. Auch Ereignismeldungen, die über eine Webhook-Verbindung eintreffen, werden vom Sender erneut zugestellt, solange keine Bestätigung zurückkommt, und verlangen deshalb dieselbe Vorkehrung.
Beispiel aus der Praxis
Ein Verkaufskanal reicht eine Bestellung an die Warenwirtschaft weiter. Dort dauert die Verarbeitung länger als die eingestellte Wartezeit; der Kanal wertet das als Fehlschlag, obwohl der Auftrag längst angelegt ist. Sein zweiter Anlauf erzeugt daraufhin einen weiteren Auftrag über dieselbe Ware, und der Innendienst bemerkt das erst bei der Kommissionierung. Trüge die Bestellung eine gleichbleibende Kennung, hätte die Warenwirtschaft beim zweiten Anlauf auf den vorhandenen Auftrag verwiesen und nichts Neues angelegt.
Wirtschaftlicher Nutzen
Wer diese Eigenschaft herstellt, erspart sich das Aufräumen hinter versehentlich verdoppelten Vorgängen und schützt die Übereinstimmung beider Systeme. Sie macht Wiederholversuche zu einer unauffälligen Routine und erlaubt es, Übertragungen automatisch zu wiederholen, ohne dass jemand den Erfolg jedes Einzelfalls prüfen muss.
Typische Fehler
- Auf der Senderseite automatisch nachgefasst, ohne die Empfängerseite darauf einzurichten – jede Störung der Leitung vervielfacht dann den Vorgang.
- Die Kennung beim Absenden erzeugt und nicht beim Anlegen des Geschäftsvorfalls – sie fällt beim zweiten Anlauf anders aus und läuft ins Leere.
- Den Schlüssel nur kurz gespeichert – eine späte Wiederholung trifft auf eine Gegenstelle, die den Vorgang nicht mehr kennt.
- Lediglich mit einer Empfangsbestätigung geantwortet – der Sender erfährt dadurch nicht, wie der Vorgang ausgegangen ist, und fasst weiter nach.
- Die Doppelerkennung über einen Vergleich des ganzen Inhalts gelöst – schon eine veränderte Bemerkung lässt den Vorgang als neu erscheinen.
Worauf achten?
- Die Kennung aus dem Geschäftsvorfall selbst ableiten, etwa aus der Bestellnummer, damit sie über alle Anläufe hinweg gleich bleibt.
- Die Kennungen mindestens so lange vorhalten, wie ein später Nachfassversuch überhaupt eintreffen kann.
- Auf eine bereits bekannte Kennung mit dem Ausgang des früheren Durchlaufs antworten, damit die Senderseite Bescheid weiß.
- Idempotenz für jede Richtung einer Schnittstelle getrennt betrachten; sie gilt nicht automatisch für die Gegenrichtung.
- Den Mechanismus mit einem Test absichern, der dieselbe Nachricht bewusst zweimal schickt.
Häufig gestellte Fragen
Warum brauchen Schnittstellen Idempotenz?
Weil bei einer Zeitüberschreitung offenbleibt, ob die Nachricht verloren ging oder ob nur die Rückmeldung fehlt. Da der Sender beide Fälle gleich sieht, fasst er nach, und die Empfängerseite muss die zweite Zustellung derselben Sache als solche erkennen.
Wie wird ein Idempotenzschlüssel gebildet?
Sie wird aus dem Geschäftsvorfall abgeleitet, etwa aus der Bestellnummer, und beim Anlegen vergeben. Werte, die erst im Moment des Sendens entstehen, fallen bei jedem Anlauf anders aus und taugen deshalb nicht.
Wie lange muss der Schlüssel gespeichert bleiben?
Mindestens über den Zeitraum, in dem ein später Nachfassversuch noch eintreffen kann. Wird zu früh aufgeräumt, erscheint eine verspätete Zustellung der Empfängerseite als neuer Vorgang.