Was ist Idempotenz?
Idempotenz bezeichnet die Eigenschaft, dass die Wiederholung eines Vorgangs mit derselben Identität nach dem ersten Erfolg keine zusätzlichen unbeabsichtigten Auswirkungen hat. Sie ist wichtig, wenn ein Client nicht feststellen kann, ob eine frühere Anfrage abgeschlossen wurde.
So funktioniert Idempotenz
Ein idempotenter Dienst behandelt wiederholte Ausführungen desselben logischen Befehls so, dass sie nur eine Wirkung haben, auch wenn Netzwerkunsicherheit den Aufrufer zum erneuten Senden veranlasst. Server speichern üblicherweise einen Schlüssel zusammen mit der Anfrageidentität, dem Verarbeitungsstatus und der vorherigen Antwort oder der resultierenden Ressource. Die Garantie hat einen Geltungsbereich und eine Aufbewahrungsfrist; sie ist kein unbegrenztes Versprechen zur Deduplizierung. In Mediensystemen schützt sie das Anlegen von Uploads, das Einreichen von Encoding-Aufträgen, Abrechnungsvorgänge und die Webhook-Verarbeitung an Schnittstellen, an denen häufig Retries nötig sind.
Wichtige Fakten
- Eine robuste Implementierung vergleicht die relevanten Parameter der erneut gesendeten Anfrage mit dem gespeicherten Vorgang. Wird bei gleichem Schlüssel, aber anderer Eingabe ein altes Ergebnis zurückgegeben, können unbemerkt die falschen Medien zugeordnet werden.
- Gleichzeitige Duplikate erfordern eine atomare Reservierung oder eine Eindeutigkeitsbedingung, da bei einer Prüfung mit anschließendem separatem Einfügen zwei Worker das Fehlen eines Eintrags feststellen und die Wirkung zweimal auslösen können.
- Die Semantik von HTTP-Methoden und Idempotenz auf Anwendungsebene sind getrennte Konzepte: PUT ist auf Protokollebene als idempotent definiert, während ein POST durch einen vorgangsspezifischen Schlüssel sicher wiederholbar gemacht werden kann.
Wann Idempotenz wichtig ist
Weisen Sie Vorgängen, die Sie in selbst entwickelten Diensten oder beim Aufruf von Drittanbieter-APIs mit dokumentierter Schlüsselunterstützung erneut ausführen, einen Idempotenzschlüssel zu, damit der Server das ursprüngliche Ergebnis zurückgeben kann, statt eine weitere Ressource anzulegen. Die API von Transloadit akzeptiert beim Erstellen einer Assembly keinen Idempotenzschlüssel. Die Deduplizierung wiederholter Assembly-Einreichungen liegt daher in der Verantwortung der integrierenden Anwendung; jeder verwendete Schlüssel muss denselben logischen Vorgang kennzeichnen und darf nicht für andere Aufgaben wiederverwendet werden.