Wie wird die State-Synchronisation in einer Multi-Region-Aktive-Aktive-Konfiguration von Azure Cosmos DB unter Berücksichtigung von Conflict Resolution Policies gelöst?

In einer Multi-Region-Aktive-Aktive-Konfiguration synchronisiert Azure Cosmos DB den State über eine Multi-Master-Replikation. Schreibvorgänge werden lokal in der jeweiligen Region ausgeführt und anschließend asynchron an alle anderen konfigurierten Regionen propagiert. Da dies zu Konflikten führen kann, wenn dasselbe Dokument zeitgleich in verschiedenen Regionen aktualisiert wird, kommen Conflict Resolution Policies zum Einsatz.

Wir unterscheiden hierbei primär zwei Ansätze zur Konfliktlösung:

  1. Last Write Wins (LWW): Dies ist die Standardkonfiguration. Das System nutzt eine numerische Eigenschaft (standardmäßig _ts), um den neuesten Schreibvorgang zu identifizieren. Der Datensatz mit dem höchsten Zeitstempel überschreibt alle anderen Versionen.
  2. Custom Conflict Resolution: Hierbei wird eine benutzerdefinierte Stored Procedure hinterlegt. Diese Logik wird aufgerufen, sobald ein Konflikt erkannt wird, und erlaubt es, Datenfelder zu mergen oder spezifische Business-Regeln anzuwenden, um den finalen State zu bestimmen.

Die technische Umsetzung lässt sich wie folgt zusammenfassen:

PolicySteuerungsmechanismusAnwendungsfall
Last Write Wins (LWW)System-Zeitstempel (_ts)Einfache Überschreibungen, maximale Performance
CustomJavaScript Stored ProcedureKomplexe Geschäftslogik, Datenzusammenführung

Zusätzlich bietet Cosmos DB einen Conflict Feed. Dokumente, die über eine Custom Policy nicht automatisch gelöst werden konnten, landen in diesem Feed und können manuell oder über externe Prozesse bereinigt werden. Diese Architektur ist ein zentraler Bestandteil moderner Data Engineering Strategien, um globale Latenzen zu minimieren und eine hohe Verfügbarkeit zu gewährleisten.

Die Wahl der Policy beeinflusst direkt die Konsistenzgarantien. Während LWW eine schnelle Lösung bietet, führt sie bei hoher Schreiblast auf dasselbe Dokument zu Datenverlusten (Lost Updates), da ältere Schreibvorgänge ohne Prüfung verworfen werden. Custom Policies hingegen erhöhen die Rechenlast auf dem Server, sichern jedoch die Datenintegrität durch eine gezielte Zusammenführung der Zustände.

Wir empfehlen für geschäftskritische Anwendungen konsequent den Einsatz von Custom Conflict Resolution Policies, da LWW in verteilten Systemen zu unvorhersehbaren Datenverlusten führt, die im Nachgang nicht mehr rekonstruierbar sind.

Sergej Wiens

Sergej Wiens

Gründer & Software Architekt