Titelthema Alle Wege führen nach Rom Enterprise Service Bus Arne Degenring Integration der IT-Systeme wird für viele Unternehmen immer wichtiger. Die historisch gewachsenen Strukturen und Schnittstellen zwischen den Systemen sind schwer zu warten. Ein „Enterprise Service Bus“ ist eine Middleware, die besonders für den Aufbau Service-orientierter Architekturen geeignet ist, und außerdem Ideen aus der klassischen „Enterprise Application Integration“ (EAI) übernimmt. Die teilweise über Jahrzehnte gewachsenen Punkt-zu- Punkt-Schnittstellen zwischen den Unternehmens-Applikationen sind oft unübersichtlich und nur schwer zu beherrschen bzw. zu erweitern. Ein Ansatz zur Erhöhung der Transparenz ist die klassische Enterprise Application Integration (EAI), bei der ein so genannter Integrations-Broker die Applikationen verbindet. Charakteristisch ist hierbei eine Sterntopologie, das so genannte „hub-and-spoke“-Modell. Vorteile sind ein zentrales Routing der Informationen zwischen den Anwendungen und die Möglichkeit, den Code zur Integration mit anderen Umgebungen von dem eigentlichen Business-Code zu trennen. Die EAI-Produkte haben aber den Nachteil, tendenziell proprietär und monolithisch aufgebaut zu sein. Ein zentraler Integrations-Broker ist außerdem nicht sehr gut geeignet, über Abteilungs- oder Unternehmensgrenzen hinweg Applikationen zu verbinden. Wegen der Sterntopologie droht der Broker zum Flaschenhals zu werden. Ein anderes wichtiges Stichwort sind die in letzter Zeit viel zitierten Service-orientierten Architekturen (SOA): Sie sollen die Unternehmens-IT flexibler machen. Ein Service im Sinne einer SOA kapselt eine abgegrenzte Funktionalität und bietet klare, implementierungsunabhängige Schnittstellen. Services werden lose gekoppelt und kommunizieren über interoperable Protokolle. Die Granularität sollte nicht zu fein und nicht an der Technik orientiert sein, stattdessen sollte ein Service ganze Business-Funktionen bzw. -Prozesse abbilden. Als Kommunikationsprotokolle für Service-orientierte Architekturen werden oft die Web-Services-Standards, insbesondere SOAP und WSDL, vorgeschlagen. Das ist aber kein Muss. Die Service-Orientierung hat vor allem den Vorteil, dass hier die Business-Funktionalitäten im Vordergrund stehen. Die Services können als Bausteine wiederverwendet werden, um neue Geschäftsprozesse abzubilden, und erleichtern die unternehmensübergreifende Integration von IT-Systemen. Nach wie vor stellt sich aber das Problem der direkten Punkt-zu-PunktSchnittstellen zwischen den Services, die im Laufe der Zeit immer unübersichtlicher werden können. Enterprise Service Bus Das Konzept des Enterprise Service Bus (ESB) versucht, diese Herausforderungen zu lösen. Der Begriff wurde schon Ende 2002 erstmals genannt. Ein ESB soll gewissermaßen das Rückgrat für die Unternehmens-IT bilden, indem er eine Infrastruktur zur Verbindung von Applikationen bzw. Services bereitstellt. Eine abstrakte Sicht auf eine beispielhafte ESB-Struktur zeigt Abb. 1. Eine wichtige Eigenschaft für einen ESB ist die Unterstützung eines dokumenten-orientierten Verarbeitungsmodells – etwas was auch für SOA charakteristisch ist (vgl. Kasten „Dokumenten16 Abb. 1: Beispielhafter Enterprise Service Bus Dokumenten-orientiert vs. RPC-orientiert SOAP – das Kommunikationsprotokoll für Web-Services – wurde ursprünglich hauptsächlich als Plattform-unabhängiger Standard für den entfernten Methodenaufruf, den „Remote Procedure Call“ (RPC), verwendet. In Service-orientierten Architekturen – und im Enterprise Service Bus – liegt der Fokus aber auf dem dokumenten-orientierten Verarbeitungsmodell. Dieses wird von SOAP ebenso wie RPC unterstützt. Es werden nicht einzelne Methoden nacheinander aufgerufen, sondern ein ganzes Dokument übertragen, das den Geschäftsvorfall repräsentiert. Das führt zu einer viel loseren Kopplung zwischen den Anwendungen. Den Unterschied kann man sich gut mit Hilfe einer Analogie deutlich machen. Ein Telefongespräch mit einer Bestellhotline ist RPC-orientiert: A: Hier spricht Muster, ich möchte eine Bestellung aufgeben. Die Kundennummer ist 1234. B: Das ist die Firma XY, richtig? Was möchten Sie bestellen? A: 100 Exemplare JavaSPEKTRUM, Ausgabe 04/2005. B: Wir haben leider nur noch 30 Stück am Lager. A: ... Dagegen ist eine schriftliche Bestellung dokumentenorientiert. Alle für den Geschäftsvorfall nötigen Informationen sind im Dokument enthalten. Das Bestellformular ist gewissermaßen ein Schema, gegen das die Bestellung validiert werden kann. Als Antwort sendet der Auftragnehmer eine Auftragsbestätigung, auf der z. B. auch ausverkaufte Artikel vermerkt sind. JavaSPEKTRUM 4/2005 Titelthema orientiert vs. RPC-orientiert“). Die Verarbeitung sollte möglichst ereignisorientiert sein, d. h. Geschäftsvorfälle werden sofort (online) verarbeitet und nicht erst in nächtlichen Batch-Läufen. Nicht überraschend ist deshalb, dass Message-Queues eine wichtige Komponente in einer ESB-Infrastruktur darstellen: Message-Oriented Middleware garantiert die einmalige Zustellung von Messages an den richtigen Empfänger, ermöglicht die Verarbeitung unter Transaktionskontrolle und unterstützt unterschiedliche Messaging-Modelle: Bei einer Punkt-zuPunkt-Kommunikation über Queues wird eine Message von einem Sender produziert und von höchstens einem Empfänger aus der Queue gelesen. Beim „Publish-and-Subscribe“-Modell wird eine Message von einem Sender produziert, aber ggf. mehreren Abnehmern eines sog. „Topic“ zugestellt. Abb. 2: Beispiel für einen ESB-Prozess Kommunikation über ESB-Prozesse Auf einem Enterprise Service Bus sollten die Softwareapplikationen nicht direkt miteinander kommunizieren. Stattdessen übergibt eine Applikation die zu sendenden Daten an einen Prozess, der sich um die Weiterverarbeitung kümmert. Im einfachsten Fall gibt der Prozess die Daten direkt an eine bestimmte Applikation weiter. Der Prozess kann sich aber auch um Aspekte wie zum Beispiel die folgenden kümmern (vgl. auch Abb. 2): Intelligentes Routing auf Basis der Message-Inhalte – ggf. sogar mit dynamischer Auswahl eines geeigneten Service (etwa über UDDI), Validierung der Message-Inhalte, Transformation in andere technische Formate bzw. Übersetzung der Inhalte in andere fachliche Darstellungen, Anreichern der Daten um zusätzliche Informationen, Archivierung der Eingangsdaten, Berechtigungsprüfungen, Logging, Durchsatzüberwachung, Aufrufen der Applikation – ggf. über proprietäre Schnittstellen. Auch die Antwortdaten können dann wieder auf diese Weise aufbereitet und an den Aufrufer zurückgegeben werden. Die Verwendung von Prozessen kann auch verschiedene Interaktionsstile zusammenbringen: Wenn beispielsweise eine Applikation ausschließlich einen synchronen Aufrufstil versteht und unterstützt, kann sie über einen entsprechenden Prozess in asynchrone Umgebungen eingebunden werden. Viele dieser Aspekte sind heutzutage in den Applikationen selbst enthalten. Die Idee des Enterprise Service Bus ist, dass sich die Applikationen auf den eigentlichen Fachcode konzentrieren sollen. Der Integrationscode ist Teil des Busses – und kann für andere Services wiederverwendet werden. Prozesse werden idealerweise deklarativ beschrieben und sind somit schnell änderbar – und zwar ohne dass unbedingt die Fachanwendungen geändert werden müssen. Ein Enterprise Service Bus ist ein verteiltes System. Die Prozesse und Services müssen also nicht auf einem zentralen EAI-Server laufen, sondern können über mehrere Rechner verteilt sein, mit Vorteilen hinsichtlich Skalierbarkeit und Ausfallsicherheit. XML-Standards als Basis für ESB Die ESB-Architektur ist unabhängig von den verwendeten Kommunikationsprotokollen und Datenformaten. Beson- XPath XML Path Language: Sprache zur Navigation in XML-Dokumenten (Organisation: W3C) SOAP Protokoll für Web-Services (Organisation: W3C) WSDL Web Service Definition Language: Beschreibungssprache für Web-Services (W3C) UDDI Universal Description, Discovery, and Integration: Verzeichnisdienst für Web-Services (OASIS) JMS Java Message Service: API für Messaging (Java Community Process) JSR-208/JBI Java Specification Request #208 (Java Business Integration): Standard für Integrationskomponenten und - Services (Java Community Process) WS-CDL Choreography Description Language: Beschreibungssprache für die Kollaboration von Web-Services (W3C) WS-BPEL Business Process Execution Language: Ausführbare Beschreibungssprache von Geschäftsprozessen (OASIS) WSS Web Services Security: Sicherheitsfunktionalitäten für Web-Services (OASIS) WS-Reliability Garantierte Message-Zustellung, auch wenn vom Transportprotokoll nicht garantiert (OASIS) WS-Policy Festlegung von Kommunikationsgrundlagen zwischen Web-Services, z. B. hinsichtlich Sicherheit (IBM, Microsoft u. a.) WS-Atomic Transaction Transaktionskontrolle für Web-Services (IBM, Microsoft u. a.) Tabelle 1: Einige relevante Spezifikationen http://www.javaspektrum.de 17 Titelthema ders gut zu der Architektur passt aber XML – gewissermaßen als das native Datenformat für den ESB. Denn es existieren ausgereifte, auf XML aufbauende Standards, um die ESB-Architektur umzusetzen. So können XML Schema zur Validierung und XSLT zur Transformation verwendet werden. XPath-Ausdrücke können verwendet werden, um ein inhaltsabhängiges Routing von Messages umzusetzen: Ein Ausdruck wie /bestellung/[summe>100000] kann benutzt werden, um Großbestellungen anders zu behandeln (z. B. manuelle Kontrolle oder besondere Protokollierung). Am Markt stehen ausgereifte Werkzeuge zur Verfügung, um mit XML & Co effizient umzugehen. Die auf XML aufbauenden Web-Services sind dementsprechend eine Art nativer Kommunikationsstandard des ESB. Bezüglich der Definition von Prozessen gibt es mit BPEL und WS-CDL ebenfalls Standardisierungsbemühungen. Einige wichtige Standards bzw. Spezifikationsvorschläge für den Enterprise Service Bus zeigt Tabelle 1. Neben den dort genannten gibt es noch eine ganze Menge mehr Spezifikationen, die sich aktuell in Arbeit befinden und jeweils einen bestimmten Teilaspekt abdecken. ESB und die Praxis Ein kritischer Punkt für Service-orientierte Architekturen allgemein und für den Enterprise Service Bus im Speziellen ist die Performance. Ist das Konzept auch tragfähig, wenn sehr hohe Durchsatzzahlen erreicht werden müssen? Damit dies überhaupt aussichtsreich erscheint, sollten Web-Services und XML mit Bedacht eingesetzt werden, und zwar dort, wo man echte Vorteile von ihnen hat: an den Schnittstellen. Innerhalb einer Anwendung kann die lose Kopplung zur Performance-Bremse werden: Es ist zum Beispiel nicht sinnvoll, die Daten aus der Datenbankschicht zur Business-Schicht als XML zu transportieren. Eine engere Kopplung ist hier gefragt. Das ist aber auch kein Problem, denn diese Schnittstellen sind rein applikationsintern. Wenn Web-Services eingesetzt werden, ist HTTP als Transportprotokoll für SOAP häufig nicht die beste Wahl. Besser ist es, die SOAP-Nachrichten über eine Message-Oriented Middleware zu übertragen. Wenn eine solche Middleware den Java Message Service (JMS) unterstützt, spricht man auch von SOAP über JMS. Aufgrund seiner verteilten Natur unterstützt der ESB gut seine schrittweise Einführung. Die Unternehmens-IT muss nicht auf einen Schlag auf eine neue Architektur umgestellt werden. Ein ESB kann zunächst als Infrastruktur für ein einzelnes Software-Projekt verwendet werden. Im Laufe der Zeit können weitere Applikationen in die Infrastruktur integriert werden. Produkte Der Enterprise Service Bus ist zunächst nur ein Architekturkonzept. Aber natürlich gibt es eine ganze Reihe von Anbietern, die entsprechende Produkte anbieten bzw. mehrere Produkte zu einer „ESB-Suite“ zusammenfassen, zum Beispiel Sonic Software, IBM, BEA und viele mehr. 18 Bestandteil solcher Produkte sind Service-Container, die Services aufnehmen und z. B. über die Java Management Extensions (JMX) die Administration und Überwachung des Service ermöglichen. Das Konzept der Service-Container ermöglicht eine von anderen Services unabhängige Skalierbarkeit und Lastverteilung. Viele Hersteller integrieren eine einheitliche ManagementOberfläche, mit der die verteilten Prozesse und Services konfiguriert und administriert werden können. Über JMX können auch andere Management-Oberflächen angebunden werden. Konfigurationsinformationen werden z. B. bei Sonic in einem verteilten Verzeichnisdienst abgelegt. Damit steht einerseits ein zentraler Punkt zur Verfügung, an dem die Änderungen durchgeführt werden, andererseits handelt es sich aber um eine verteilte Infrastruktur, mit entsprechenden Vorteilen hinsichtlich Ausfallsicherheit. Fazit und weitere Informationen Der Enterprise Service Bus ist ein interessantes Konzept zum Aufbau Service-orientierter Architekturen und zur Integration der Unternehmens-IT. Es handelt sich um kein Produkt, sondern ein Architekturkonzept, das auf Standards aufbaut – selbst aber kein Standard ist. Eine Architektur aus lose-gekoppelten Services, die Geschäftsprozesse kapseln, kann die Flexibilität der Unternehmens-IT erhöhen. Ein Enterprise Service Bus stellt die hierfür notwendige Infrastruktur dar. Dieser Artikel konnte nur einen Vorgeschmack auf einige wichtige Aspekte des Enterprise Service Bus bieten. Weitere Informationen finden sich in Büchern wie [ChappelESB] und [IBMRedbook]. Auf der Homepage des Autors sind einige Links zum Thema genannt. Ein Interview mit Dave Chappell von Sonic Software zum Enterprise Service Bus ist im vorigen JavaSPEKTRUM [ChaInt] zu finden. Literatur [ChappellESB] D. A. Chappell, Enterprise Service Bus, O’Reilly, 2004 [ChaInt] Interview mit Dave Chappell, in: JavaSPEKTRUM, 3/2005, http://www.sigs-datacom.de/sd/publications/pub_article_show.htm?&AID=1591 [IBMRedbook] M. Keen u. a., Patterns: Implementing an SOA Using an Enterprise Service Bus, IBM Redbook, 2004, online verfügbar unter: www.redbooks.ibm.com/abstracts/sg246346.html Dipl.-Inform. Arne Degenring beschäftigt sich seit 1995 professionell mit Softwareentwicklung. Er ist als freiberuflicher IT-Consultant im Bereich Softwareentwicklung tätig, zurzeit in einem Banken-Projekt in Frankfurt am Main. E-Mail: [email protected]. Weitere Informationsquellen http://www.degenring.de/esb/ JavaSPEKTRUM 4/2005