Ich habe drei eingehende Projekte, die ein gemeinsames Problem haben:
Sie benötigen die Logik auf einem Websystem und eine lokale Anwendung (z. B. eine Verkaufsstelle), die über einen RESTful-Webservice mit einem solchen System kommuniziert.
Meine Lösung
Die Lösung, die ich gefunden habe, besteht darin, die Nachrichtenwarteschlange der Desktopanwendung zu implementieren , um Vorgänge zu speichern, während der Dienst offline ist, genauer gesagt, die asynchrone Nachrichtenwarteschlange . Dies ist jedoch der einfache Teil (falls dies die beste Lösung ist). Ich beschäftige mich auch mit Datensynchronisation und Konfliktlösung.
Das Hauptsystem muss webbasiert sein, da für die Berichte und die Überwachung durch die Beteiligten eine Web-App erforderlich ist und die Webservices Anfragen für mehrere Einrichtungen bearbeiten würden.
Die Desktop-Clients (vorzugsweise Thin) werden mit Java (genauer Netbeans) und das Web-System mit Symfony2 implementiert. Zwei der Projekte erfordern eine Hardwareintegration für den Client, sodass die Desktop-Anwendung mit Web-Technologie (z. B. Appcelerator Titanium) zu einem großen Problem werden kann.
Meine Frage
Was ist eine bessere skalierbare Lösung, die maximale Effizienz bei minimalem Aufwand bedeutet (und möglichst keine zusätzlichen Kosten wie den Kauf eines Backup-Servers für den lokalen Betrieb)?
Wer hat sich sonst noch damit beschäftigt? Wie haben Sie Ihr Problem gelöst? Welche Lektionen kannst du teilen?
Wie sind Sie mit der Synchronisation umgegangen?
Bearbeiten: Ein fehlender Teil wurde zu meiner Frage in Punkt 3 hinzugefügt
quelle
Machen Sie alles lokal und synchronisieren Sie es regelmäßig .
Folgendes würde ich tun, wenn ich Sie wäre (mir ist das Synchronisierungsframework in Java wie in .NET nicht bekannt).
Behalten Sie in der lokalen Anwendung einen Zeitstempel bei, der das letzte Mal enthält, wenn Sie eine Verbindung erfolgreich hergestellt haben.
Unabhängig davon, wann Sie die Verbindung wiederherstellen, wird dieser Zeitstempel verwendet, um neue Daten abzurufen und dann neue Bestellungen zu senden, die lokal generiert wurden.
Sie erhalten dann zwei Zeitstempel. Eine, um festzulegen, wann die Bestellung erstellt wurde (lokal oder online), und eine, wann sie vom Server aufgezeichnet wurde.
Ich empfehle Message Queuing dafür nicht. Ich habe MQ in der Vergangenheit für eine E-Commerce-Website verwendet, die mit Navision verbunden werden musste. Alles wurde in Navision ausgeführt und die Änderungen wurden über MQ an die E-Commerce-Website gesendet, einschließlich des Bestellstatus und aller Informationen zu Produktbeschreibungen, Preisen usw. Neue Bestellungen wurden auch über MQ an Navision gesendet.
quelle
Oder Sie sollten sich gelegentlich verbundene Systemdatenbankimplementierungen ansehen, bei denen die Synchronisierung von Remoteclients mit dem Server problematisch ist. (SQL Server hat dies zu einem gewissen Grad mit SQL CE zu tun, Outlook tut dies).
Auf diese Weise können Sie alle Ihre Änderungen lokal in einer kleinen Footprint-Datenbank vornehmen (Versionsverwaltung / logische Zeitstempel usw., damit Sie sich keine Gedanken über PC-Uhren usw. machen müssen). Wenn Sie online gehen, synchronisieren Sie diese mit der Hauptdatenbank Server.
Ich würde mich nicht für eine REST-Lösung entscheiden, wenn das System die meiste Zeit nicht online sein kann.
quelle