Was ist ein ESB und wofür ist es gut?


87

Bei einem früheren Job wurde viel über "Enterprise Service Bus" (ESB) gesprochen. Ich habe Teile eines konzeptionellen Buches darüber gelesen, aber nie wirklich verstanden, wie Sie es konkret umsetzen / integrieren würden. Ich bin mit SOA / queuing / directory services / etc. Vertraut. aber ich verstehe nicht, was genau ein ESB ist.

Ist es eine konkrete Sache (Service / Server / Broker / etc.), Dass Sie einfach alle Ihre Apps auf unterschiedliche Weise daran anschließen, oder ist es eher eine konzeptionelle Art, Systeme zu entwerfen?

Alle Erklärungen oder Links zu guten Beispielen wäre sehr dankbar. Vielen Dank.


4
Wenn Sie Martin Fowler fragen, wird er Ihnen sagen, dass es Egregious Spaghetti Box bedeutet.
Anataliocs

Informationen zu ESB finden Sie auch hier: wso2.com/library/articles/2017/07/what-is-wso2-esb, obwohl es speziell um wso2 esb geht.
Riyafa Abdul Hameed

Antworten:


53

Es ist ein ziemlich hohes Konzept der Abstraktion. Das zentrale Konzept besteht darin, dass der ESB die Middleware und Schnittstellen bereitstellt, mit denen Unternehmen ihre Anwendungen verbinden können, ohne Code schreiben zu müssen.

Dies kann eine Mediation umfassen, um inkompatible Protokolle, Daten und Interaktionen miteinander in Einklang zu bringen.

Die Idee eines zentralen Busses, an dem alles vorbeifährt, bietet Gelegenheit für zusätzliche Abstraktionsebenen. Durch die Verwendung von Industriestandards zum "Einstecken" anderer Anwendungen, Clients und dergleichen in diesen Bus ist es relativ einfach, neue Dienste, Datenquellen und Clients mit unterschiedlichen Anforderungen zu verbinden.

Aktuelle Implementierungen

Bei den tatsächlichen Implementierungen ist dies die Domäne sehr großer Unternehmen, die Unternehmen unterstützen. Obwohl es sehr Modewort ist, ist das Ziel ein Ideal, das auf einer kleinen Ebene durch Vergleich mit dem Internet verstanden werden kann:

Ähnlichkeit mit dem Internet

Ein großer Kommunikationsbus mit sehr unterschiedlichen Verwendungszwecken und Daten, die jedoch alle standardisierte Protokolle ausführen.

Tatsächlich kann man einen HTTP-zu-FTP-Connector schreiben, der es Browsern ermöglicht, auf FTP-Sites zuzugreifen, ohne einen FTP-Client aufzurufen (normalerweise jetzt im Browser integriert).

Mashups

Mashups zeigen eine interessante Implementierung: Nehmen Sie einige Busroutendaten der Behörde von San Francisco, Karten von Google und Sushi-Bar-Standorte von Yahoo mit Bewertungen und führen Sie eine einfache Abfrage aus, die Ihnen die nächstgelegene Sushi-Bar gibt und sie so gewichtet, dass Sie es sind bereit, ein wenig weiter zu reisen für eine bessere Bar.

Alle völlig unterschiedlichen Dienste, die für sich genommen nicht kompatibel sind, aber mithilfe von Standardverbindern (z. B. Yahoo-Pipes) zu einem zusammenhängenden und nützlichen Ganzen zusammengefasst werden können.

-Adam


45

Haftungsausschluss: Ich arbeite für IBM und berate über WebSphere ESB, ein IBM Produkt, mit dem ESBs erstellt werden können. Das Folgende ist meine Meinung und spiegelt nicht unbedingt die Position von IBM wider.

Ein ESB ist leider für verschiedene Menschen etwas anderes.

Für mich ist ein ESB eine beliebige Technologie, die Sie in eine SOA (Service-Oriented Architecture) einfügen können, um unterschiedliche Systeme miteinander zu verbinden. Es führt häufig die Funktionen der Protokolltransformation, Nachrichtenänderung, Weiterleitung, Protokollierung, Funktion als Sicherheitsgateway usw. aus. Beispielsweise können Sie einen ESB verwenden, um einen Dienst, der zuvor nur als Webdienst verfügbar war, auch als JMS-basierten Dienst verfügbar zu machen.

In dieser Hinsicht ähneln ESB-Implementierungen (genauer gesagt Software, die zum Erstellen von ESBs verkauft wird - wie ich sie konsultiere) häufig technologisch dem, was früher als Messaging- oder Queuing-Broker bekannt war, obwohl der Zweck etwas anders ist , weil es (wie die Akronyme andeuten) sich eher an Diensten orientiert als Nachrichten von einem Ort zum anderen zu verschieben. Wie wichtig die Unterscheidung technologisch ist, ist Ansichtssache.



37

Meine Erfahrung mit kommerziellem ESB ist, dass es sich um eine überzogene und teure Technologie handelt, die so viele Probleme verursacht, wie sie löst. Der ESB wird neue Systeme und Legacy verbinden, Nachrichten werden über den Bus fliegen und alles wird nahtlos mit allem anderen kommunizieren können. Wenn Sie etwas Ausfallsicherheit und Orchestrierung einsetzen, verfügen Sie über eine sehr leistungsstarke Unternehmensanwendungssoftware.

Das Problem tritt auf, wenn Sie versuchen, sie tatsächlich zu verwenden. Der Aufwand für das Schreiben für den Bus, das Erstellen der Nachrichtenstrukturen usw. kann die Vorteile übersteigen. Als kostenintensives Element wird der ESB als Allheilmittel für alle technischen Probleme angesehen, die es nicht sind. Es wird zu viel Zeit für den Bus und nicht für die Anwendungen / Daten aufgewendet, die verbunden werden. Es ist häufig der Fall, dass mehrere konkurrierende Standards in derselben Organisation um die Vorherrschaft kämpfen, was zu den klassischen, von der Technologie dominierten Silos führt, die diese Systeme tatsächlich reparieren sollten.

IMHO ist es weitaus besser, eine kleine Anzahl spezifischer Schnittstellen zu erstellen, wobei normalerweise Webdienste nur zwischen den Systemen verwendet werden, die sie benötigen.


1
Ich stimme dem Teil "überzogene und teure Technologie" zu. Sie benötigen jedoch noch etwas, um einzelne Webdienste zusammenzukleben. Dies kann sein: neuer Webdienst (wahrscheinlich der starrste), BPEL auf ESB - eine große Infrastruktur, aber weniger starr, oder etwas Agileres und Flexibleres wie Mashup-Server. Dies sind gute agile Alternativen für die App-Entwicklung, die nicht so viel Zeremonie (Modellierung usw.)
Dan

Der Mashup-Ansatz gefällt mir am besten - wir haben früher 'monolithische' HTML + JS-Webseiten erstellt, jetzt erstellen wir Mashups aller Arten von Inhalten, die auf verschiedene Browser / Geräte ausgerichtet sind. Das Anwendungsdesign wird den gleichen Weg gehen.
MrTelly

3
Übrigens können Sie in meiner Antwort wahrscheinlich ein wenig Ermüdung des Anbieters feststellen - neu haben so viele so viel für so wenig für so wenig bezahlt.
MrTelly

Sie haben nicht gesagt, was ein ESB ist, sondern sich auf bestimmte Probleme bei der
Einführung

1
".... Der ESB wird neue Systeme und Legacy verbinden, Nachrichten werden über den Bus fliegen und alles wird nahtlos mit allem anderen kommunizieren können. Mit etwas Ausfallsicherheit, Orchestrierung und einer sehr leistungsstarken Unternehmensanwendungssoftware. ... "- Ich dachte, das fasst es in Ordnung zusammen?
MrTelly

12

Es ist im Grunde eine konzeptionelle Art, ein System zu entwerfen - Softwareunternehmen versuchen, Ihnen mehr zu verkaufen, indem sie den ESB-Aufkleber darauf kleben, und Manager mögen es, weil ein ESB von einer höheren Ebene aus gut aussieht.

Ein ESB ist im Grunde eine MOM (Message Oriented Middleware) mit einem zusätzlichen Datenmodell- und Strukturdefinitionsmanagement. Sie haben eine gemeinsame Datendefinition für alle Anwendungen und Adapter auf diesem Bus (möglicherweise XML mit einer gemeinsam genutzten XSD). Alles, was eine Verbindung herstellt, MUSS Informationen senden, die dieser Datendefinition entsprechen. Der ESB unterstützt das Laden, Freigeben und Versionieren dieser gemeinsamen Datendefinition. Wenn Sie eine neue Komponente an einen ESB anschließen, können Sie sofort mehr Kompatibilität erwarten als beim Anschließen an eine MOM. Jede Komponente auf diesem Bus wird konzeptionell als "Ressource" behandelt. Daher wird eine zusätzliche Abstraktion eingeführt, um den Sender vom Empfänger zu entkoppeln.

Beispiel: Angenommen, Sie möchten Anwendung A mit Anwendung B in einer standardmäßigen nachrichtenorientierten Middleware verbinden. Nehmen wir JMS. Sie sprechen mit Ihren Kollegen, die an Anwendung B arbeiten, vereinbaren ein Thema, einen Nachrichtentyp und Felder und senden es (Pseudocode): sendJms ("TRADE.MSFT", {MapMessage trader = "pete" price = 101,4 vol = 100})

Wenn Sie dasselbe in einer serviceorientierten Architektur tun, müssen Sie dies tun

  1. Installieren Sie zusätzliche Software
  2. lerne viele neue Konzepte
  3. Definieren Sie Ihre neue Java-Komponente in der Admin-GUI des ESB
  4. Implementieren Sie einige Schnittstellen, die vom ESB gesteuert werden
  5. sendJms (getDestination (), {MapMessage trader = "pete" price = 101,4 vol = 100}) - Beachten Sie, dass das Ziel vom ESB injiziert wird

Das erste Mal ist es wahrscheinlich ein bisschen schmerzhaft, aber ich denke, man kann sich daran gewöhnen, genauso wie man sich an EJBs gewöhnen kann ;-)

Man könnte sagen, ein MOM-System ist "untypisiert" (dynamische Struktur), während ein ESB "typisiert" ist (statische Struktur). Die Kompromisse zwischen rohem Messaging und ESB ähneln denen anderer untypisierter / typisierter Optionen:

  • REST vs. SOAP
  • nicht validiertes XML vs. XML, das mit einer XSD validiert wurde
  • Groovy gegen Java
  • interpretierte Sprache vs. kompilierte Sprache

Für kleinere Projekte ist es schön, die Funktionalität schnell zu überprüfen (z. B. Groovy-Code), aber für größere Projekte ist es gut, einen Debugger (z. B. Java) zu haben, um im Voraus gewarnt zu werden, wenn etwas kaputt geht, und einen Standard für Leute zu haben, bevor sie sich dazu verpflichten Projekt.

Wenn Ihr Projekt unter zu vielen Personen leidet, die das System durch Einchecken nicht validierter Änderungen beschädigen, gehen Sie zu mehr Struktur über (ESB anstelle von MOM). Wenn Ihre Projekte nicht rechtzeitig erledigt werden, wählen Sie die einfachere, untypisierte Lösung. Wenn es beides ist - holen Sie sich einen Berater (nur ein Scherz ;-)


4

Nun, das hängt davon ab, wen Sie fragen ... Viele würden sagen, dass es sich um eine "Middleware" handelt, die verschiedene Teile der "Geschäftslogik" miteinander verbindet, um die Codierung aus dem Messaging zwischen diesen Modulen zu entfernen. Ich denke, das ist eine allgemein genug definierte Definition, aber ich bin sicher, dass Sie bereits über Wikipedia dorthin gekommen sind und so weiter.

Diejenigen, die den großen ESB haben würden, um die Welt zu retten, sehen ihn als den am häufigsten präsentierten, als Drehscheibe für alles. Die meisten ESB-Implementierungen bemühen sich, alle sich wiederholenden Aufgaben zu kapseln, die wir in Unternehmenssoftware sehen. Das bedeutet, dass die meisten ESBs sich um Datenübertragung, Sicherheit, Protokollierung, Protokollübersetzung, Ereignissysteme, API-Exposition über Webdienste usw. kümmern.

Ich denke, das ist so klar wie ich nur kann ... Ich hoffe, das hilft.



2

Über die Standarddefinition hinaus können Sie von Wikipedia erhalten . Ich finde, dass es ein großartiges Werkzeug ist, um eine Reihe von Legacy-Systemen über mehrere Plattformen und Technologien hinweg zu verbinden. Es ist auch ein gutes Werkzeug zum Erstellen verteilter Workflows und Zustandsverwaltungssysteme (z. B. Hauptbuch).

Es ist jedoch ziemlich teuer, komplex und unpraktisch zu warten und zu erweitern, was es zu einer schlechten Wahl für die Technologie als Allzweckwerkzeug zur Skalierung Ihrer Anwendungen macht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.