Frage

Wir haben zwei Systeme, bei denen System A Daten mit dem System B sendet Es ist eine Anforderung, dass jedes System unabhängig voneinander ausgeführt werden kann und weder wird die Luft sprengen, wenn der andere nach unten. Die Frage ist, was ist die beste Art und Weise für das System A mit System B zu kommunizieren, während der Entkopplungs Anforderung zu erfüllen.

System B hat derzeit einen Prozess, dass Umfragen Daten in einer Tabelle db und verarbeitet alle neuen Zeilen, die eingefügt wurden.

Eine vorgeschlagene Entwurf für System A nur Einfügen von Daten in DB-Tabelle des Systems b und System B-Prozess haben die neuen Zeilen durch den bestehenden Prozess. Die Frage ist nicht diese Lösung das Erfordernis der Entkopplung der beiden Systeme erfüllen? Ist eine Datenbank, Teil eines System B in Betracht gezogen, die nicht zur Verfügung und Ursache System A werden könnte, die Luft zu sprengen?

Eine andere Lösung ist für System A-Daten in eine MQ-Warteschlange zu stellen und einen Prozess haben, die von MQ und fügen Sie anschließend in das System B Datenbank lesen würde. Aber dies ist nur zusätzliche Aufwand? Letztlich ist ein MQ Warteschlange mehr fehlertolerant als eine Tabelle db?

War es hilfreich?

Lösung

Im Allgemeinen Datenbank-Sharing ist eine enge Kopplung und nicht außer möglicherweise für Geschwindigkeit Zwecke vorzuziehen. Nicht nur für die Verfügbarkeit Zwecke, sondern auch, weil das System A und B werden an mehreren Stellen in ihrer Zukunft geändert und aktualisiert werden und minimale Abhängigkeiten voneinander haben sollten - Message Passing ist eine offensichtliche Abhängigkeit, während gemeinsam genutzten Datenbanken Sie neigen dazu, zu beißen (oder Ihre Erben) auf dem hinteren, wenn am wenigsten erwartet. Wenn Sie den Datenbank-Sharing-Weg gehen, zumindest macht die gemeinsame Nutzung Schnittstelle mit speziellen Tabellen oder Ansichten explizit.

Es gibt vier gemeinsame Integrationsstufen:

  1. Datenbank-Sharing
  2. Dateifreigabe
  3. Remote Procedure Call
  4. Nachrichtenübergang

, die in verschiedenen Situationen angewandt und kombiniert werden können, mit unterschiedlicher Verfügbarkeit und Wartbarkeit. Sie haben einen sehr guten Überblick im Enterprise Integration Patterns Website .

Wie bei jeder zentralen Integrationsinfrastruktur, MQ sollte in einer Umgebung mit großer Verfügbarkeit, voll Failover & c gehostet werden. Es gibt noch andere Warteschlange Lösungen, die Ihnen erlauben, die Warteschlange Koordination zu verteilen.

Andere Tipps

Verwenden von Warteschlangen für die Kommunikation. Sie nicht „passieren“ Daten von System A nach System B durch die Datenbank. Sie verwenden die Datenbank als Riese, teuer, komplex Nachrichtenwarteschlange.

Verwenden Sie eine Nachrichtenwarteschlange als Nachrichtenwarteschlange.

Das ist nicht "Extra" Overhead. Dies ist die beste Art und Weise zu entkoppeln Systemen. Es nennt sich Service Oriented Architecture (SOA) und Nachrichten mit absolut zentraler Bedeutung für das Design.

Ein MQ-Warteschlange ist weit einfacher als eine DB-Tabelle.

Do vergleichen „Fehlertoleranz“ nicht, weil ein RDBMS riesig verwendet (fast unvorstellbar) Gemeinkosten ein vernünftiges Maß an Sicherheit zu erreichen, dass Ihre Transaktion ordnungsgemäß abgeschlossen. Locking. Pufferung. Schreib Queues. Speicherverwaltung. Usw. usw.

Eine zuverlässige Message Queue-Implementierung verwendet eine Hintergrundspeicher auf den Zustand der Warteschlange zu halten. Der Aufwand ist viel, viel weniger als ein RDBMS. Die Leistung ist viel besser. Und es ist viel, viel einfacher zu interagieren.

In SQL Server würde ich tun dies durch ein SSIS-Paket oder einen Job (abhängig von der Anzahl der Datensätze und der Komplexität dessen, was ich bewegte). Andere Datenbanken auch ETL-Lösungen haben. Ich mag die ETL-Lösung becasue ich halten können Protokolle von dem, was geändert wurde und welche Fehler verarbeitet wurden, kann ich Aufzeichnungen senden, die aus irgendeinem Grund nicht auf das andere System gehen (Datenstrukturen selten die gleiche zwischen zwei Datenbanken) zu einer Halte Tisch, ohne den Rest des Prozesses zu töten. Ich kann auch Änderungen an den Daten machen, wie es für die Datenbank Unterschiede anzupassen fließt (Dinge wie Lookup-Tabellenwerte, sagen die abgeschlossenen Status in db1 5 und 7 in db2 oder sagen db2 ein erforderliches Feld hat, dass DB1 nicht und Sie müssen einen Standardwert der eingereichten hinzufügen, wenn es null ist). Wenn die eine oder andere servver unten ist die Aufgabe, das SSIS-Paket ausgeführt wird fehlschlagen und keines der beiden Systeme betroffen sein werden, so dass es die datbases entkoppelt wie mit Auslöser oder Replikation hält nicht würde.

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