Frage

Ich habe eine Menge Forschung zu tun in letzter Zeit über SOA und ESB usw.

Ich arbeite einige Legacy-Systeme bei der Arbeit jetzt auf neu zu gestalten und möchte es mit mehr einer SOA-Architektur bauen, als es zur Zeit hat. Wir nutzen diese Dienste in etwa 5 unserer Websites und eines der größten Probleme haben wir jetzt mit unserem Altsystem ist, dass fast die ganze Zeit, als wir Bug-Fixes oder Updates machen wir unsere 5 Websites erneut bereitstellen müssen, die eine sein kann recht zeitaufwendig Prozess.

Mein Ziel ist es, die Schnittstellen zwischen den Diensten lose gekoppelt zu machen, so dass Änderungen vorgenommen werden, ohne zu haben, erneut bereitstellen alle abhängigen Dienste und Websites.

brauche ich die Möglichkeit, eine bereits bestehende Service-Schnittstelle, ohne zu brechen oder die Aktualisierung eines ihrer Abhängigkeiten zu erweitern. Hat jemand von euch dieses Problem gestoßen, bevor? Wie haben Sie es lösen?

War es hilfreich?

Lösung

Ich schlage vor, schaut auf einen anderen Stil von Dienstleistungen als vielleicht haben Sie bisher getan. Betrachten wir Dienstleistungen, die miteinander unter Verwendung von Ereignissen zusammenarbeiten, anstatt Request / Response. Ich habe seit vielen Jahren mit Kunden in verschiedenen Branchen mit grossem Erfolg dieses Ansatzes im Einsatz. Ich habe ziemlich viel über diese Themen in den letzten 4 Jahren geschrieben. Hier ist ein Ort, wo Sie beginnen können:

http: // www.udidahan.com/2006/08/28/podcast-business-and-autonomous-components-in-soa/

Ich hoffe, das hilft.

Andere Tipps

Es gibt ein paar Ansätze, die Sie ergreifen können. Unsere SOA-Architektur beinhaltet XML-Nachrichten an und von den Diensten gesendet. Eine Art, wie wir das erreichen, was Sie beschreiben, ist durch die Verwendung einer Datenbindung Bibliothek zu unserem XML-Schema zu vermeiden und verwenden Sie einen generischen XML-Parser erhalten nur den Datenknoten Sie ignorieren wollen diejenigen, die Sie nicht interessiert sind. Auf diese Weise des Dienst hinzufügen zusätzlicher neuer Knoten der Nachricht, ohne sie zurzeit verwendet wird jemanden zu brechen. Wir in der Regel dies nur tun, wenn wir brauchen nur ein oder zwei Stücke von Informationen aus einer größeren Schema-Struktur.

Alternativ kann die andere (bevorzugt) Lösung, die wir verwenden ist Versionierung. Eine Version eines Service hält sich an einem bestimmten Schema / Schnittstelle. Wenn die Schemaänderungen (zum Beispiel der Schnittstelle erweitert oder geändert), schaffen wir eine neue Version des Dienstes. Zu jeder Zeit können wir haben 2 oder 3 Versionen auf dem Sprung zu einem beliebigen Zeitpunkt. Im Laufe der Zeit verbitten wir und dann ältere Versionen entfernen, während schließlich abhängigen Code auf neuere Versionen zu migrieren. Auf diese Weise diejenigen, abhängig von der Service kann mit der vorhandenen Version des Dienstes fortsetzen, während einige besondere Abhängigkeit ‚Upgrade‘ kann auf die neue Version. Welche Versionen eines Dienstes aufgerufen werden, werden in einer Konfigurationsdatei für den abhängigen Code definiert. Beachten Sie, dass es nicht nur das Schema, die versioniert wird, aber alle zugrunde liegenden Implementierungscode als auch.

Hope, das hilft.

Was Sie fragen, ist kein leichtes Thema. Es gibt viele Möglichkeiten, wie Sie gehen können, gekoppelt Service-Oriented Architecture lose um zu machen.

Ich schlage vor, Check-out Thomas Erl SOA Buchreihe . Es erklärt alles ziemlich klar und eingehende.

Es gibt ein paar gemeinsamen pratices lose Kopplung für Dienstleistungen zu erreichen.

  1. Mit doc / literal Art von Web-Service denken, in Daten (das Draht-Format) anstelle von RPC, vermeiden Schema-basierte Datenbindung.

  2. hält sie strikt an dem Vertrag beim Senden von Daten, aber halte einige Annahmen eingehende Datenverarbeitung, ist XPath ein gutes Werkzeug für die (lose in, dicht out)

  3. Mit ESB und vermeiden Sie direkt Punkt zu Punkt Kommunikation zwischen den Diensten.

Dies ist eine grobe Checkliste für die Bewertung, ob SOA implementiert Lose Kopplung:

  • Standort des gerufenen System (seine physische Adresse): Hat Ihr Anwendung Einsatz direkte URLs für den Zugriff auf Systeme oder die Anwendung über eine Abstraktionsschicht entkoppelt, die verantwortlich ist, für Verbindungen zwischen Systemen aufrechterhalten? Das Service Registry und die Dienstgruppe Paradigma verwendet in SAP NetWeaver CE sind gut Beispiele dafür, was eine solche Abstraktion aussehen könnte. Mit Hilfe eines Enterprise Service Bus (ESB) ist ein weiteres Beispiel. Der Punkt ist, dass Die Anwendung sollte die physikalische Adresse des nicht schwer Code gerufene System, um wirklich zu lose gekoppelt betrachtet werden.

  • Die Anzahl der Empfänger: spezifiziert die Anwendung, welche Systeme sind der Empfänger einer Dienstleistung zu nennen? Eine lose gekoppelten Verbund nicht beliebig insbesondere Systeme angeben, aber die Lieferung seines verlassen Nachrichten an einen Servicevertrag Umsetzung Schicht. Ein dicht gekoppelt Anwendung wird die Empfängersysteme explizit in nennen bestellen; eine lose gekoppelte Anwendung macht einfach Anrufe an die Service-Schnittstelle und ermöglicht den Dienstvertrag Umsetzung Schicht kümmern sich um die Details der Zustellung von Nachrichten nach rechts Systeme.

  • Verfügbarkeit von Systemen: Hat Ihre Anwendung erfordert, dass alle Systeme, dass Sie alle sein, und läuft die Zeit eine Verbindung herstellen? Offensichtlich ist dies eine sehr schwierige Anforderung vor allem, wenn Sie will an externe Systeme verbinden, die nicht unter Ihrer Kontrolle sind. Wenn die Antwort ist, dass alle Systeme müssen die ganze Zeit laufen, die Anwendung ist eng in dieser Hinsicht verbunden.

  • Datenformat: Ist die Anwendung Wiederverwendung der Datenformate zur Verfügung gestellt von die Backend-Systeme oder verwenden Sie ein kanonischen Datentyp System dh unabhängig von den Systemen des Typs in den gerufenen verwendet Anwendungen? Wenn Sie die Datentypen des Backends wiederverwenden Systeme, haben Sie wahrscheinlich zu kämpfen mit Datentypkonvertierungen in Ihre Anwendung, und dies ist nicht ein sehr lose gekoppelten Ansatz.

  • Reaktionszeit: Ist die Anwendung erfordern genannte Systeme reagieren innerhalb eines bestimmten Zeitrahmens oder ist es akzeptabel, für die Anwendung erhält eine Antwort Minuten, Stunden oder sogar Tage später?

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