Verteilte Gleichzeitigkeitskontrolle

Ich habe diese für ein paar Tage jetzt, und ich habe mehrere Lösungen, aber keiner von Ihnen unglaublich einfach oder leicht. Das problem ist im Grunde so aus: Wir haben ein cluster von 10 Maschinen, von denen jede die gleiche software auf einem Multithread-ESB-Plattform. Ich kann Parallelitätsprobleme zwischen threads auf der gleichen Maschine ziemlich leicht, was aber über die Parallelität auf die gleichen Daten auf unterschiedlichen Rechnern?

Im wesentlichen die software empfängt Anfragen zu ernähren, den Daten eines Kunden von einem Geschäft zum anderen über web services. Dem Kunden ist jedoch der möglicherweise oder möglicherweise nicht vorhanden, noch auf dem anderen system. Wenn nicht, schaffen wir es über eine web-service-Methode. So Bedarf es einer Art von test-and-set, aber ich brauche ein semaphor eine Art zu sperren der anderen Maschinen verursacht race conditions. Ich habe Situationen vor, in denen ein remote Kunden erstellt wurde zweimal für einen einzelnen lokalen Kunden, was nicht wirklich wünschenswert.

Lösungen habe ich schon gespielt konzeptionell sind:

  1. Nutzung unserer fehlertolerante shared file system zu schaffen, "lock" - Dateien, welche überprüft, ob durch jede Maschine je nach Kunden -
  2. Mithilfe einer speziellen Tabelle in unserer Datenbank, und sperren Sie die gesamte Tabelle, um Sie zu tun, eine "test-and-set" für eine Sperre Datensatz.
  3. Verwendung von Terrakotta, eine open-source-server-software, die hilft bei der Skalierung, sondern verwendet eine hub-and-spoke-Modell.
  4. Mit EHCache, die für synchrone Replikation von meinem in-memory "sperren."

Ich kann mir nicht vorstellen, dass ich die einzige person, die jemals hatte diese Art von problem. Wie hast du es lösen? Hast du etwas Kochen im Haus, oder haben Sie eine Lieblings-3rd-party-Produkt?

InformationsquelleAutor der Frage Bob Gettys | 2008-09-18

Schreibe einen Kommentar