Was ist eine serviceorientierte Architektur?

Serviceorientierte Architektur ist letztlich ein Software-Architekturstil, der dem Servicemodell der Datenverarbeitung entstammt. Hierbei werden Geschäftsprozesse in Dienste überführt, auf die die Anwendung (bzw. die Orchestrierungsschicht) über fest definierte APIs (Application Programming Interfaces) zugreift. Die Orchestrierungsschicht bündelt dabei alle einzelnen Services zu einer Anwendung. Es gilt zu beachten, dass im Gegensatz zu den moderneren Microservice Architekturen, die Datenhaltung in aller Regel in einer zentralen Datenbank erfolgt, die von allen Services angesprochen wird.
Ein großer Vorteil von serviceorientierten Architekturen ist, dass verschiedene Dienste einer Anwendung, die intern völlig unterschiedliche Technologiestacks einsetzen, einheitlich über die APIs miteinander kommunizieren können.

Ähnlich wie im Ansatz der Microservice Architekturen, erfolgt die feingranulare Aufteilung der gesamten Businessfunktionalität in kleinere logisch/fachlich differenzierbare Dienste, wie z.B. die Überprüfung der Kreditwürdigkeit eines Bankkunden. Diese Dienste sind lose miteinander gekoppelt, d.h. es ist kein Wissen über die zugrunde liegenden Details der Implementierung erforderlich, und kommunizieren über das SOA-Protokoll miteinander.
Dadurch muss keine tiefe Integration der einzelnen Dienste miteinander erfolgen. Es muss nur die Kopplung über die Konsistenz der Schnittstellen, zwischen Consumer und Provider, sichergestellt sein.

Das wichtigste Prinzip der SOA, das Servicekonzept und die Aufteilung komplexer monolithischer Anwendungen in kleinere beherrschbare und weniger ressourcen-hungrige Services, ist ein integraler Bestandteil der modernen Cloud-Computing-Architekturen. SOA selbst als Architekturstil ist aber weitestgehend überholt und durch modernere Microservice-Architekturen abgelöst worden.

Die Bereitstellung der Dienste erfolgt über Netzwerkprotokolle wie SOAP (über HTTP).

SOAP

SOAP steht für:

  • Simple Object Access Protocol (ursprüngliche Bezeichnung)
  • Service Oriented Architecture Protocol (moderne/heutige Bezeichnung)

SOAP ist ein Übertragungsprotokoll, das durch die W3C standardisiert wurde. Die Darstellung der Nachrichten ist XML basiert und wird von einem technischen Wrapper umgeben. Der Header enthält hierbei die Metainformationen, während der Body die eigentlichen Nutzdaten enthält. Zudem bietet es zahlreiche Erweiterungen, z.B. für Ende-zu-Ende-Verschlüsselung.

Als Analogie könnte man sich eine SOAP Nachricht wie einen Brief vorstellen (SOAP-Header und Nutzdaten), der in einen Umschlag eingepackt ist (HTTP Übertragungsprotokoll), was natürlich zu Protokolloverhead führt. Ein Beispiel für einen schlankeren Ansatz wäre ein RESTful-Webservice, der die Nutzdaten direkt im http-Body, in Form von JSON ohne jegliche Wrapper, überträgt.

SOAP hat den Nachteil, dass es formell gesehen zu komplex und zu technisch ist. Zudem werden Requests immer in Form von HTTP-POST-Befehlen gesendet, da in jedem Fall ein komplexer Body erforderlich ist, was sich aus dem Standard selbst ergibt.

SOAP Request

SOAP Requests gehen immer an einen Endpunkt, an dem letztlich der Orchestrator sitzt und zu den richtigen Services weiterleitet. Hierfür hat man die sog. Header SOAP-Action eingeführt, die dann auf den richtigen Dienst verweist.
REST Anfragen hingegen, gehen an verschiedene definierte Endpunkte, hinter denen die eigentlichen Dienste sitzen. Natürlich kann auch hier nochmal eine Orchestrierungsinstanz z.B. ein Load-Balancing durchführen, wenn mehrere Instanzen eines Dienstes parallel laufen.

Beispiel für einen SOAP-Request:

Abbildung: SOAP-Request Beispiel

SOAP Response

SOAP Responses haben natürlich auch wieder den oben genannten Protokolloverhead. Die erfolgreichen Anfragen werden immer mit Status Code 200 quittiert (im Gegensatz zu REST, wo man üblicherweise zwischen 200, 2001 und 204 Antwort-Codes unterscheidet).

Beispiel für eine SOAP-Response:

Abbildung: SOAP-Response Beispiel

WSDL

WSDL – Web Service Description Language, ist ein W3C-Standard für die Spezifikation von SOAP-Schnittstellen. Hiermit werden die Funktionalitäten von Web-Services beschrieben. Es baut auf XML (Extensible Markup Language) bzw. dem XML-Schema (XSD) auf.
Die WSDL unterstützt sowohl den „Code-First“-Ansatz als auch den „Contract-First“-Ansatz. D.h. es kann zuerst die Schnittstellenspezifikation erfolgen (Contract) und danach die daraus generierte Implementierung. Aber es gibt auch Möglichkeiten, aus der fertigen Implementierung eine WSDL-Schnittstellenspezifikation abzuleiten (generieren zu lassen).