Frage

Meine aktuellen Entwicklung Projekt hat zwei Aspekte.Erstens, es ist eine öffentliche Webseite auf dem externe Benutzer senden können und aktualisieren von Informationen für verschiedene Zwecke.Diese Informationen werden dann gespeichert, um eine lokale SQL Server auf dem colo-Anlage.

Der zweite Aspekt ist eine interne Anwendung, die Mitarbeiter zu verwalten, die gleichen Einträge (konzeptionell) und status-updates, Genehmigungen, etc.Diese Anwendung gehostet wird, die innerhalb der Unternehmens-firewall mit eigenen lokalen SQL Server-Datenbank.

Die beiden Netzwerke sind miteinander verbunden durch ein hardware-VPN-Lösung, die anständig ist, aber offensichtlich nicht die Schnellste Sache der Welt.

Die beiden Datenbanken ähnlich und teilen viele der gleichen Tabellen, aber Sie sind nicht 100% die gleiche.Viele der Tabellen auf den beiden Seiten sind sehr spezifisch für entweder die interne oder externe Anwendung.

Die Frage ist also:wenn ein Benutzer aktualisiert die Informationen oder legt einen Datensatz auf der öffentlichen website, wie tun Sie übertragen die Daten auf die interne Anwendung der Datenbank, damit es verwaltet werden kann, indem die internen Mitarbeiter?Und Umgekehrt...wie tun Sie push-Aktualisierungen, die die Mitarbeiter zurück an die website?

Es ist erwähnenswert, dass die mehr "Echtzeit" diese updates auftreten, desto besser.Nicht, dass es zu sofortigen, nur ziemlich schnell.

So weit, ich habe gedacht, über die Verwendung der folgenden Arten von Ansätzen:

  1. Bi-direktionale Replikation
  2. Web-service-Schnittstellen auf beiden Seiten mit code zum synchronisieren der änderungen, wie Sie gemacht wird (in Echtzeit).
  3. Web-service-Schnittstellen auf beiden Seiten mit code asynchron synchronisieren der änderungen (mit einem queueing-Mechanismus).

Irgendwelche Ratschläge?Hat jemand dieses problem vor?Haben Sie eine Lösung, die gut funktioniert für Sie?

War es hilfreich?

Lösung

Dies ist eine ziemlich häufige integration-Szenario, glaube ich.Ich persönlich glaube, dass eine asynchrone messaging-Lösung, die mit einer Warteschlange ist ideal.

Sie sollten in der Lage sein zu erreichen, in der Nähe von Echtzeit-Synchronisation, ohne den overhead oder die Komplexität der so etwas wie die Replikation.

Synchrone web-services sind nicht ideal, weil der code wird zu sehr anspruchsvoller zu behandeln Ausfall-Szenarien.Was passiert, wenn ein system neu gestartet wird, während die andere weiterhin auf " änderungen veröffentlichen?Funktioniert das senden von system-timeouts?Was hat es zu tun mit denen?Wenn Sie bereit sind, Daten zu verlieren, Sie wollen eine Art von transaktionale Warteschlange (wie MSMQ) zu erhalten, die Wechsel dar und sorgen dafür, dass Sie auf dem anderen system.Wenn entweder das system heruntergefahren ist, werden die änderungen (übergeben als Nachrichten) wird nur ansammeln, und sobald eine Verbindung hergestellt werden kann, kann die re-Start-server die Verarbeitung aller Nachrichten in der Warteschlange und aufholen, so dass die Integrität des Systems zu viel, viel einfacher zu erreichen.

Es gibt einige open-source-tools, die kann wirklich machen dies einfach für Sie, wenn Sie verwenden .NETTO (vor allem, wenn Sie verwenden möchten MSMQ).

  1. nServiceBus von Udi Dahan
  2. Mass Transit durch Dru Sellers und Chris Patterson

Es gibt kommerzielle Produkte, und wenn Sie erwägen, einen kommerziellen option finden Sie unter hier für eine Liste von Optionen auf .NET.Natürlich, WCF tun können, asynchronen messaging mit MSMQ-Bindungen, sondern ein Werkzeug wie nServiceBus oder MassTransit geben Sie ein sehr einfaches Senden/Empfangen oder Pub/Sub-API, die werden machen Ihre Anforderung eine sehr einfache Aufgabe.

Wenn Sie Java verwenden, gibt es eine Reihe von open-source-service-bus-Implementierungen, um diese Art der bidirektionalen, asynchronen messaging-ein Kinderspiel, wie Mule oder vielleicht auch nur ActiveMQ.

Sie können auch Lesen Udi Dahan"s blog, hören Sie einige seiner podcasts.Hier sind einige weitere gute Ressourcen um Ihnen den Einstieg.

Andere Tipps

Ich bin auf halbem Weg durch ein ähnliches Projekt sei denn, ich habe mehrere Standorte, die Notwendigkeit zu synchronisieren, die über langsame verbindungen (DFÜ-in einigen Fällen).

Zunächst müssen Sie, um änderungen zu verfolgen, wenn Sie mit SQL 2008 (auch die Express-version ist ausreichend, wenn die 2 GB-Grenze ist kein problem) diese werden lindern die Schmerzen sehr stark, nur schalten Sie die änderungsnachverfolgung in der Datenbank und jede Tabelle.Wir verwenden SQL Server 2008 in der Geschäftsstelle mit dem erweiterten schema und SQL-Express 2008 an jedem Standort, mit einer sub-Reihe von Daten-und limited-schema.

Zweitens werden Sie brauchen, um zu verfolgen Ihre änderungen, Sync-Dienste der trick funktioniert gut und unterstützt die Verwendung eines WCF-gateway in der Haupt-Datenbank.In diesem Beispiel müssen Sie die Sync mit SQL Express Client Beispiel als Ausgangspunkt, beachten Sie, dass es basiert auf SQL 2005, so dass Sie müssen aktualisieren, um die Änderung nutzen Tracking-Funktionen in 2008.Standardmäßig ist der Sync-Dienste mit SQL CE auf die Kunden, die ich bin sicher, dass nicht genug in Ihrem Fall.Benötigen Sie einen Dienst auf Ihrem Web-Server, die in regelmäßigen Abständen (werden könnte, so oft wie alle 10 Sekunden, wenn Sie wollen) läuft die Synchronize () - Methode.Dies wird Ihnen sagen, Ihre wichtigsten Datenbank über die änderungen lokal und dann Fragen Sie den server für alle änderungen gibt.Sie können festlegen, abrufen und anwenden von SQL-code zum aufrufen von gespeicherten Prozeduren und Sie können fügen Sie Ereignishandler für die Behandlung von Konflikten (z.B.Client-Update-vs-Server-Update) und lösen Sie entsprechend an jedem Ende.

Wir haben ein Geschäft als client, der mit drei Läden mit dem gleichen VPN -
Zwei der Geschäfte haben einen computer als "server" für das Geschäft und das Dritte ist die "master-Datenbank"
So synchronisieren Sie alle auf dem master haben wir nicht die beste Lösung, aber es funktioniert:es gibt einen dedizierten PC zum ausführen einer Anwendung, die überprüft den Zeitstempel für jeden Datensatz in jeder Tabelle von den beiden Läden und wenn es anders ist, dass Sie das Letzte mal synchronisieren, kopiert es die Ergebnisse
Beachten Sie, dass dies funktioniert in beide Richtungen.I. e.wenn Sie ein Produkt aktualisieren, die in der master-Datenbank ändern, wird sich ausbreiten, um die beiden anderen Geschäfte.Falls Sie eine neue Bestellung in einem der Geschäfte, es wird übertragen werden, um die "master".
Mit einigen Optimierungen können Sie alle Geschäfte synchronisieren Sie in rund 20 Minuten

Kürzlich habe ich eine Menge Erfolg mit SQL Server Service Broker bietet zuverlässigen, permanenten asynchrone messaging-out of the box mit sehr wenig Umsetzung Schmerz.

  • Es ist schnell zu set up und lernen, wie Sie mehr Sie können einige der mehr erweiterte Funktionen.
  • Unbekannt für die meisten, es ist auch ein Teil des desktop-Editionen, so es kann verwendet werden als workstation-messaging-system
  • Wenn Sie von bestehenden T-SQL-Fähigkeiten, die Sie genutzt werden können, da der gesamte code, der zum Lesen und schreiben von Nachrichten erfolgt in SQL
  • Es ist sagenhaft schnell

Es ist ein weit unter-Hype Teil von SQL Server und auch einen Blick Wert.

Ich würde sagen, einfach nur einen job, kopiert die Daten in der Kneipe Datenbank-input-Tabelle in einer eigenen Datenbank pending Tabelle.Dann, wenn Sie die Daten aktualisieren, die auf der privaten Seite haben Sie repliziert werden, um die öffentliche Seite.Wenn Sie nicht haben jede der die replizierten Daten auf der öffentlichen Seite aktualisiert, es sollte eine ziemlich einfache Transaktionsreplikation Lösung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top