Idempotency
Einleitung
Idempotency stellt sicher, dass die mehrfache Ausführung derselben Operation denselben Effekt hat wie die einmalige Ausführung.
In verteilten Systemen ist das kein Komfort-Feature, sondern Voraussetzung für:
- Retries
- Event-Redelivery
- Transactional Outbox
- Netzwerk-Instabilität
Grundsatz:
At-least-once Delivery verpflichtet zu Idempotenz.
Einordnung
Idempotency ist ein Micro-Pattern für Zuverlässigkeit und Stabilität.
Typische Einsatzfelder:
- Microservices
- Event-Driven Architecture
- Saga-Implementierungen
- Zahlungs- und Bestellprozesse
Es wirkt auf der Operationsebene, nicht auf Architekturebene.
Zwei Arten von Idempotenz
1️⃣ Natürliche Idempotenz
Operation ist inhärent idempotent:
PUT /resource/123mit gleichem Payload- Status auf „SHIPPED“ setzen
- „Mark as processed“
Mehrfache Ausführung verändert nichts.
2️⃣ Erzwungene Idempotenz
Operation ist nicht natürlich idempotent:
- Zahlung ausführen
- Bestellung anlegen
- E-Mail versenden
Hier braucht es:
- Idempotency-Key
- Deduplizierung
- Zustandsprüfung
Grundprinzip
Zentrale Mechanismen
1️⃣ Idempotency-Key
- Eindeutiger Identifier pro Operation
- Vom Client generiert oder serverseitig vergeben
- Muss stabil über Retries hinweg sein
2️⃣ Deduplizierung
Speicherung von:
- Key
- Status
- Response
- Timestamp
Speicherorte:
- Datenbank
- Cache (Redis)
- Event-Log
3️⃣ Event-Idempotenz
Bei Event-Processing:
- Event-ID prüfen
- Verarbeitete IDs persistieren
- Seiteneffekte nur einmal ausführen
Besonders kritisch bei:
- Payments
- Inventar
- Reservierungen
Vorteile
- Sichere Retries
- Stabilität bei Netzwerkausfällen
- Schutz vor Doppelbuchungen
- Voraussetzung für Outbox + Saga
Risiken / typische Fallstricke
1️⃣ Unklare Key-Strategie
Wenn Clients neue Keys pro Retry generieren:
→ Idempotenz bricht.
2️⃣ TTL zu kurz
Keys werden gelöscht, bevor Retries eintreffen:
→ Doppelverarbeitung möglich.
3️⃣ Fehlende Seiteneffekt-Kontrolle
Datenbank ist idempotent – aber E-Mail, Payment oder Webhook nicht.
4️⃣ Verwechslung mit Transaktionssicherheit
Idempotenz:
- ersetzt keine ACID-Transaktion
- löst keine Konsistenzlogik
Sie verhindert nur doppelte Ausführung.
Wann besonders wichtig?
- At-least-once Messaging
- Transactional Outbox
- Retry mit Exponential Backoff
- Finanz- oder Bestellprozesse
- Externe Webhooks
Wann weniger relevant?
- Reine GET-Operationen
- Natürlich idempotente Updates
- Single-Process-System ohne Retries
Strategische Perspektive
Idempotenz ist:
- die Sicherheitsleine verteilter Systeme
- Voraussetzung für resiliente Kommunikation
- elementar bei asynchroner Architektur
Ohne Idempotenz entstehen:
Doppelbuchungen Inkonsistente Zustände Nicht reproduzierbare Fehler
Fazit
Idempotency ermöglicht:
- sichere Wiederholungen
- robuste Event-Verarbeitung
- kontrollierte Fehlerbehandlung
In verteilten Systemen ist sie kein optionales Feature – sondern integraler Bestandteil der Zuverlässigkeit.