Skip to content

Instantly share code, notes, and snippets.

@almereyda
Last active August 29, 2015 14:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save almereyda/9abafcfcdef591c7ad5c to your computer and use it in GitHub Desktop.
Save almereyda/9abafcfcdef591c7ad5c to your computer and use it in GitHub Desktop.
PubSub Database exchange Design

PubSub Flow Chart

First in German, will be translated soonish.

Viewer Source

MMM

Schnittstellen zur Nutzbarmachung bestehender Datenbanken ökologisch-transformativer Projekte durch Webdienste zur Synchronisierung.

[TOC]

Abbildungen

Asynchroner Datenaustausch

participant Datenbank
participant Queue
participant Worker
participant Hub

Datenbank->Queue: Datensatzänderung
Note over Queue: Aufnahme in Warteschlange
Queue-->Datenbank: Empfangsbestätigung
Note over Datenbank: nächste Aufgabe
Queue->Worker: Datensatzänderung
Note over Worker: Abarbeitung starten
Worker-->Queue: Empfangsbestätigung
Note over Queue: nächste Aufgabe
Worker->Hub: Datensatzänderung
Note over Hub: Aufnahme in Stammdatenbank
Hub-->Worker: Empfangsbestätigung
Note over Worker: nächste Aufgabe
Note over Hub: Verteilung an Verbund
Note over Hub: Ergebnis zurückgeben
Hub-->Worker: Ausführungsbestätigung
Note over Hub: nächste Aufgabe
Note over Worker: Ergebnis weiterleiten
Worker-->Queue: Ausführungsbestätigung
Note over Queue: aus Warteschlange löschen
Queue-->Datenbank: Ausführungsbestätigung
Note over Datenbank: Ergebnis präsentieren

Dieses Beispielszenario schließt keine Fehlerbehandlung mit ein. Der Begriff Datenbank steht hierbei auch nicht für die jeweiligen Datenbank Management Systeme, sondern stellvertretend für die im Verbund teilnehmenden Partner.

Publish--Subscribe Strategie mit Webhooks

Ähnlich wie ein Dienst einen einzelnen Datensatz mit dem Hub der MMM synchronisiert, funktioniert auch der Abgleich untereinander.

participant MMM
participant Partner 1
participant Partner 2
participant Partner 3

Note over MMM: Publish: globale Änderungen
Partner 3->MMM: Subscribe
MMM-->Partner 3: Bestätigung
Partner 2->MMM: Subscribe
MMM-->Partner 2: Bestätigung
Partner 1->MMM: Subscribe
MMM-->Partner 1: Bestätigung

Note over Partner 3: Publish: lokale Änderungen
MMM->Partner 3: Subscribe
Partner 3-->MMM: Bestätigung
Note over Partner 2: Publish: lokale Änderungen
MMM->Partner 2: Subscribe
Partner 2-->MMM: Bestätigung
Note over Partner 1: Publish: lokale Änderungen
MMM->Partner 1: Subscribe
Partner 1-->MMM: Bestätigung

Note over Partner 1: Datensatzänderung
Partner 1->MMM: Benachrichtigung
Note over MMM: lokale Aktualisierung
MMM-->Partner 1: Empfangsbestätigung
Note over MMM: Verteilung an Abonnenten

MMM->Partner 2: Stammdatensatz hat sich geändert
Note over Partner 2: lokale Aktualisierung
Partner 2-->MMM: übernommen
MMM->Partner 3: Stammdatensatz hat sich geändert
Note over Partner 3: lokale Aktualisierung
Partner 3-->MMM: übernommen
Note over MMM: Verteilen erfolgreich

Diese beispielhafte Darstellung enthält noch keine Konfliktbehandlung oder Versionierung.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment