Das Transactional-Outbox-Pattern: Dual-Write in verteilten Systemen lösen

In fast jeder verteilten Architektur steckt dieser Bug irgendwo im Code: Die Bestellung wird in der Datenbank gespeichert, und danach wird ein order.created-Event an Kafka publiziert. Wenn dieser Publish fehlschlägt — und früher oder später wird er das —, existiert die Bestellung zwar, aber alle nachgelagerten Services bekommen für immer nichts davon mit. Man kann Retry-Logik ergänzen, aber das verschiebt das Problem nur. Die eigentliche Lösung ist architektonisch: Datenbankschreibvorgang und Broker-Publish nicht länger als zwei getrennte Operationen behandeln.

Das Transactional-Outbox-Pattern löst dieses Problem auf Infrastrukturebene. Es tauscht die Illusion von Atomarität über zwei Systeme hinweg gegen einen echten atomaren Schreibvorgang in einem einzigen System und propagiert die Änderung anschließend asynchron über einen separaten Relay-Prozess. Das Ergebnis ist konsistent, gut debugbar und horizontal skalierbar.