CodeForum.chCode ForenC#Thema: Resynchronisierung einer verteilten Working Queue
Seiten: [1]
AntwortenDrucken
Autor Thema: Resynchronisierung einer verteilten Working Queue  (Gelesen 1865 mal)
dannyyy
Neu hier
*
Offline Offline

Beiträge: 3


« am: 27. März 2009, 08:42:24 »
ZitierenZitat

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
Moderator informieren   Gespeichert
SuperMario
Globaler Moderator
*
Offline Offline

Beiträge: 2502



« Antworten #1 am: 27. März 2009, 12:23:42 »
ZitierenZitat

Was sind das für Instanzen? Sind das C# Programme oder Threads (wegen C# Unterforum)? Haben diese Instanzen einen Exit-Handler, d.h. eine Routine die aufgerufen wird, falls sich das Programm beendet (vorgesehen und unvohergesehen) oder falls ein Thread beendet wird oder abstürzt? Wenn sowas vorhanden ist, dann kannst du dort doch eine Aufräum-Aktion durchführen, d.h. alle Datensätze aus der eigenen Queue wieder auf 0 setzen im Datastore.
Moderator informieren   Gespeichert
Seiten: [1]
AntwortenDrucken
CodeForum.chCode ForenC#Thema: Resynchronisierung einer verteilten Working Queue
Gehe zu:  

 

Partner Sites

Werbung

TinyPortal v1.0.5 beta 1© Bloc