SOA-Grundlagen

SOA richtig verstehen und verwenden

18.11.2014
Von   
Bernhard Steppan arbeitet als IT-Chefarchitekt bei DB Systel GmbH (Deutsche Bahn) in Frankfurt am Main. Er hat 100+ Artikel und zahlreiche Bücher über C++ und Java verfasst. Er betreibt mehrere Blogs, unter anderem http://steppan.net, http://artouro.org und http://tourbine.com
Serviceorientierte Architekturen (SOA) orientieren sich an den Geschäftsprozessen des Unternehmens und fördern die Wiederverwendung innerhalb der IT. Dieser Beitrag gibt eine Einführung, was die Motivation einer serviceorientierten Architektur ist und auf welchen Konzepten sie basiert.
Foto: tavi - Fotolia.com

Bisherige IT-Landschaften sind von verschiedenen Anwendungen geprägt, die viel Wissen über einen speziellen Bereich des Unternehmens enthalten. Selbst wenn diese Anwendungen sauber aufgebaut sein sollten, ist es meistens schwierig, Teile der Anwendungen für andere Zwecke einzusetzen. Das liegt daran, dass kaum ein Projekt ohne massiven Druck von außen wiederverwendbare Komponenten für andere Projekte entwickeln wird. Die Entwicklung solcher Komponenten ist aufwendig und schwer planbar. Solche Komponenten sind daher nicht im Interesse eines Teams, sein Projekt zeitgerecht fertig zu stellen. Im Gegenteil: Nicht selten entwerfen die Entwicklungsteams einzelne Teile ihrer Anwendungen so, dass eine Wiederverwendung sogar innerhalb der eigenen Anwendung schwierig ist. Die Folge dieser Fehlentwicklung: Es entstehen Anwendungslandschaften mit vielen Redundanzen. Die Wartung ist solcher Anwendungen ist aufwendig, Änderungen und Neuentwicklungen oftmals sehr ineffizient.

Ende des Burgendenkens

Serviceorientierte Architekturen sind angetreten, dieses "Burgendenken" zu beenden. Eine serviceorientierte Architektur legt hierzu die verborgenen Funktionen innerhalb der Anwendungen bloß und versucht, sie für alle Anwendungen zu öffnen. Das wichtigste Rezept hierzu ist eigentlich sehr einfach und altbekannt: Die Anwendungen werden in wiederverwendbare Services aufgeteilt, zu denen öffentliche Schnittstellen existieren.

Mit Hilfe von Services lassen sich teure Individuallösungen vermeiden und stattdessen durch generische Services die Wiederverwendung erhöhen
Mit Hilfe von Services lassen sich teure Individuallösungen vermeiden und stattdessen durch generische Services die Wiederverwendung erhöhen
Foto: Steppan

Ein Beispiel hierzu: Es besteht die Anforderung an mehrere Anwendungen eines Unternehmens, tabellarische Ansichten in PDF-Dokumente umzuwandeln. Die verschiedenen Anwendungen haben das bisher so gelöst, dass sie einen speziellen Dokumentgenerator innerhalb einer Anwendung implementiert haben. Jedes Team hat hierbei immer wieder die gleiche Probleme lösen müssen. Die historisch gewachsenen Strukturen werden beim Wechsel zu einer serviceorientierten Architektur aufgebrochen: Hier tritt an die Stelle der verschiedenen internen Dokumentgeneratoren ein singulärer Service, der für alle Anwendungen Dokumente an einer zentralen Stelle zeugen kann (siehe Bild).

Die speziellen Dokumentgeneratoren der verschiedenen Anwendungen waren maßgeschneidert auf die Anwendungsfälle und Dokumentvorlagen, die die Anwendungen benötigten. Mit der Implementierung eines zentralen Services ist der Anspruch an diesen generischen Dokumentgenerator sehr viel höher. Durch die höhere Last im Vergleich zur Einzelanwendung muss er über eine sehr robuste Implementierung verfügen. Dadurch, dass die Last viel höher ist, muss er zudem skalierbar sein. Der Service muss außerdem alle Anwendungsfälle der verschiedenen Clients abdecken, damit er seine Aufgabe erfüllen kann. Durch die Vielzahl der Anforderungen ist das Design einer öffentlichen Schnittstelle schwieriger als bei einer speziellen Implementierung für nur eine Anwendung.

Vorteile: Zentrale Verantwortung

Was sind die Vorteile eines solchen Services? Das Wissen über die Dokumentgenerierung liegt bei einem Team, das den Service verwaltet, und ist nicht mehr verstreut in diversen Anwendungsteams. Es gibt eine zentrale Stelle, die gewartet und verbessert werden muss. Es ist viel lohnender, den Service hochverfügbar auszulegen, so dass viele Verbraucher gleichzeitig darauf zugreifen können. Würde das eine der Anwendungen selbst übernehmen, müsste sie sich mit einer Infrastruktur beschäftigen, die abseits des Tagesgeschäfts liegt. Und nicht zuletzt gibt es strategische Pluspunkte: Dem Servicekonsumenten ist vollkommen egal, welche Implementierung mit welchem Framework sich hinter dem Service verbirgt. Er hat eine generische Schnittstelle, die für ihn das Maß der Dinge ist. Ein gutes Servicedesign erlaubt es der IT, Datenbankschemata, DBMS und Frameworks einfach hinter einer Fassade auszutauschen, wenn das aus strategischen und Kostengesichtspunkten angesagt ist.

Nachteile: Der Startaufwand

Was sind die Nachteile eines solchen Services? Der größte Nachteil ist, dass es zunächst länger dauern wird, einen Service zu etablieren. Dafür gibt es mehrere Gründe, zum Beispiel die Abstimmung der Anforderungen. Auch das Servicedesign ist anspruchsvoller als die spezielle Schnittstelle innerhalb einer Anwendung. Ein weiteres Problem ist die Verfügbarkeit der Services. Jede Anwendung möchte dem Endanwender natürlich mindestens die Verfügbarkeit der Servicefunktion garantieren, über den die gesamten Anwendung verfügt. Die Praxis zeigt, dass sich die Anforderungen verschiedener Anwendungen eines großen Unternehmens selten unter einem Hut bringen lassen. Zum Beispiel ist eine häufige Anforderung an Services, dass diese generell hochverfügbar sind, obwohl sich das aus Kostengründen natürlich ausschließt."

SOA ist aktueller denn je, weil einfacher umsetzbar

Die ganze Diskussion über SOA ist natürlich überhaupt nichts Neues. Verteilte Anwendungen auf Servicebasis sind so alt wie das Internet. So wurde bereits zu Zeiten von CORBA über die gleichen Services und ihre Verfügbarkeit diskutiert, über die wir jetzt im Rahmen einer SOA-Architektur reden. Wo ist der Unterschied? Der Unterschied ist, dass es deutlich einfacher geworden ist, solche "Servicelandschaften" aufzubauen, da mittlerweile leistungsfähigere Bausteine und Werkzeuge zum Aufbau einer serviceorientierten Architektur zur Verfügung stehen: moderne Services, Client-Anwendungen, Serviceverträge, Enterprise Service Bus, BPM, Mediation, Governance, Entwicklungsumgebungen sowie Frameworks und Konnektoren.

In moderne SOA-Entwicklungsumgebungen wie dem Anypoint-Studio von Mule können Services grafisch als Flowservices entwickelt werden.
In moderne SOA-Entwicklungsumgebungen wie dem Anypoint-Studio von Mule können Services grafisch als Flowservices entwickelt werden.
Foto: Steppan