2017-08-11 1 views
1

Bevor ich mit meinen Fragen beginnen lassen Sie mich ein wenig über die Architektur erklären wir verwenden müssen:Kommunikation und Synchronisation von Daten für leistungsstarke Hochverfügbarkeits Java EE verteilte Anwendung

  • Wir haben eine Zentrale haben Anwendungsinstanz.

    • diese Anwendungsinstanz mit BWL Webapp eingesetzt wird - er wird verwendet, „interne“ Daten zu ändern
    • diese Anwendungsinstanz ist eigentlich ein Cluster von Servern
    • (Ich werde in einem Moment darüber reden)
  • Wir werden n (n> 0 & & n < = 3000) Lokale Anwendungsinstanzen - 1 für jeden "location"

    • diese Instanzen dienen als Daten-Prozessoren für ihre Standorte
    • diese Instanz nicht vollständigen Satz von Zentral Daten nicht verwendet - Teilmenge nur darauf beschränkt, was für Datenverarbeitung
    • jeder Standort benötigt wird, können (und sollten wir es erwarten) offline gehen für längere Zeit (sagen wir mal 2 Wochen oben)
  • Jeder Standort werden mehrere hundert „Kunden“ haben (sagen wir mal bis zu 300) - außerhalb Anwendungen, die Daten für die Verarbeitung zur Verfügung stellt

Jetzt alles zusammensetzen: Wenn der Standort online ist, können die Clients entweder mit der lokalen Instanz oder mit Central kommunizieren. Wenn der Standort jedoch offline ist, ist Central nicht verfügbar und die Clients können nur mit der lokalen Instanz kommunizieren. In solchen Fällen sollten lokale Instanzen die Daten so verarbeiten, als ob sie zentral wären (entsprechend den im Central definierten Regeln - den "internen" Daten, die ich zuvor gesprochen habe), das Ergebnis zwischenspeichern und wenn der Standort online wird, synchronisieren Sie es mit Central (nur das Ergebnis, keine Neuberechnung auf Central). Gleichzeitig sollten lokale Instanzen ihre "internen" Daten immer mit Central synchronisieren (wenn sie offline sind, gehen wir davon aus, dass die Daten "frisch" sind, solange die Offline-Zeit den 2-Wochen-Schwellenwert nicht überschritten hat) . Oder, von der anderen Seite betrachtet - wenn sich etwas an Central ändert, muss es an alle verfügbaren lokalen Instanzen gesendet werden.

Also um zusammenzufassen (und schließlich meine Frage) müssen wir eine Möglichkeit, Daten von Central-Instanz zu mehreren tausend lokalen Instanzen synchronisieren, müssen wir auch eine Möglichkeit, lokale Änderungen an Central zu senden. In Anbetracht der Anzahl der lokalen Instanzen ist der mögliche hohe Traffic (jeder lokale kann bis zu 300 Clients haben, jeder Client kann mehrere Anfragen pro Minute generieren, die Berechnung jeder Anfrage kann viel Zeit in Anspruch nehmen und das Ergebnis kann groß sein)) und alle anderen Einschränkungen (zum Beispiel Zentralinstanz wird Cluster von Weblogic-Servern sein, aber jeder Local wird Single WildFly sein, die Datenbanken werden auch für Central und Local unterschiedlich sein - einschließlich anderer Schema, was wäre der beste Ansatz dafür Kommunikations- und Synchronisationsproblem?

Antwort

0

Es sieht so aus, als ob ein Nachrichtenbroker Muster am besten geeignet wäre Für die "Einheimische -> zentrale" Richtung könnten Sie Änderungen in lokal gespeicherten Punkt-zu-Punkt-Nachrichten ansammeln zentraler Server, der gesendet wird d während der Online-Zeiten. Zu diesem Zweck könnten Sie eine lokale dauerhafte Nachrichtenwarteschlange verwenden. Für die vom zentralen Server initiierten Änderungen können Sie das Publish/Subscriber-Muster mit gesicherter Zustellung verwenden. Die Auflösung von Konfliktänderungen ist spezifisch für Ihre Geschäftslogik.

Verwandte Themen