Guten Tag,
Ich bin auf der suche nach einem Algorithmus / Pattern um folgendes Problem zu lösen:
- Es gibt einen zentralen Datastore, der Datensätze enthält die einen Status von 0-2 haben.
0 = Nicht erledigt
1 = In bearbeitung
2 = Erledigt
- Eine oder mehrere Instanzen eines Verarbeitungsprogrammes, welche auf den selben Datenstore zugreifen.
Die Instanzen kennen sich untereinander nicht! Weder Anzahl noch direkte Kommunikationsmöglichkeit.
Nun gibt es folgenden funktionierenden Ablauf:
- Jede Instanz holt sich vom Datenstore eine Menge von Datensätzen die den Status 0 haben und setzt diesen auf 1 (atomar).
- Verarbeitet die Datensätze und setzt bei jedem verarbeiteten den Status 2.
- Die Datensätze werden in einer PriorityQueue in der Instanz verwaltet.
Das Problem was nun gelöst werden muss ist folgendes: Wie kann bei einer abgestürzten Queue detektiert werden, welche Datensätze noch in der Queue waren mit dem Status 1
und somit noch nicht abgearbeitet wurden.
Zwei mögliche Ansätze die dabei in Frage kommen sind:
- Alle vorhandenen Instanzen leeren ihre Queues und bauen Sie neu auf in dem Status mit 0 und 1 berücksichtigt werden
(Setzt voraus, dass alle Instanzen vom Absturtz der Queue erfahren haben und garantiert ihre Queues leeren)
- Es werden nur jene mit Status 1 neu zugeteilt, die vorhin von einer abgestürzten Queue nicht mehr verarbeitet wurden
(Setzt voraus, dass zu jedem Datensatz bekannt ist, wer diese in seiner Queue hat)
Wie kann dies bewerkstelligt werden, ohne dass bekannt ist wieviele Instanzen zur Zeit laufen und diese Untereinander kommunizieren könnten.
Einzige Kommunikation die möglich ist, ist eine Tabelle in der gemeinsamen Datenbank (Datastore) zu benutzen um eine resync. anzuzeigen.
Besten Dank für jeden lösungsbringenden Vorschlag
Freundliche Grüsse
Danny Meier
Ich bin auf der suche nach einem Algorithmus / Pattern um folgendes Problem zu lösen:
- Es gibt einen zentralen Datastore, der Datensätze enthält die einen Status von 0-2 haben.
0 = Nicht erledigt
1 = In bearbeitung
2 = Erledigt
- Eine oder mehrere Instanzen eines Verarbeitungsprogrammes, welche auf den selben Datenstore zugreifen.
Die Instanzen kennen sich untereinander nicht! Weder Anzahl noch direkte Kommunikationsmöglichkeit.
Nun gibt es folgenden funktionierenden Ablauf:
- Jede Instanz holt sich vom Datenstore eine Menge von Datensätzen die den Status 0 haben und setzt diesen auf 1 (atomar).
- Verarbeitet die Datensätze und setzt bei jedem verarbeiteten den Status 2.
- Die Datensätze werden in einer PriorityQueue in der Instanz verwaltet.
Das Problem was nun gelöst werden muss ist folgendes: Wie kann bei einer abgestürzten Queue detektiert werden, welche Datensätze noch in der Queue waren mit dem Status 1
und somit noch nicht abgearbeitet wurden.
Zwei mögliche Ansätze die dabei in Frage kommen sind:
- Alle vorhandenen Instanzen leeren ihre Queues und bauen Sie neu auf in dem Status mit 0 und 1 berücksichtigt werden
(Setzt voraus, dass alle Instanzen vom Absturtz der Queue erfahren haben und garantiert ihre Queues leeren)
- Es werden nur jene mit Status 1 neu zugeteilt, die vorhin von einer abgestürzten Queue nicht mehr verarbeitet wurden
(Setzt voraus, dass zu jedem Datensatz bekannt ist, wer diese in seiner Queue hat)
Wie kann dies bewerkstelligt werden, ohne dass bekannt ist wieviele Instanzen zur Zeit laufen und diese Untereinander kommunizieren könnten.
Einzige Kommunikation die möglich ist, ist eine Tabelle in der gemeinsamen Datenbank (Datastore) zu benutzen um eine resync. anzuzeigen.
Besten Dank für jeden lösungsbringenden Vorschlag
Freundliche Grüsse
Danny Meier
Comment