Muster Service-Proxy

Verwenden Sie dieses Muster zur Bereitstellung einer maximalen Entkopplung von Servicerequestern und Serviceprovidern durch Einführung einer weiteren Zwischenstufe für den Service.

In seiner einfachsten Form verdeckt das Muster 'Service-Proxy' lediglich den wahren Standort einer Serviceimplementierung. Das Muster kann aber auch zur Bereitstellung eines Verwaltungspunkts für die Zugriffssteuerung, Anforderungsüberwachung und Protokollierung verwendet werden.

Diagramm der Service-Proxy-Architektur

Kontext

Der Client muss eine Operation an einem Service aufrufen. Der Client darf nicht direkt auf den Service zugreifen, da sich die Adresse des Endpunkts, auf dem sich der Service befindet, ändern kann. Die wahre Adresse des Endpunkts bleibt verdeckt, damit der Zugriff auf den Service gesteuert werden kann.

Problem

Wie können Services auf kontrollierte Weise für Clients bereitgestellt werden, ohne die Adresse des Endpunkts, auf dem sich der Service befindet, offenzulegen.

Kriterien für die Auswahl des Musters

Verwenden Sie dieses Muster in folgenden Fällen:

Wenn Services über Unternehmens- oder Abteilungsgrenzen hinweg bereitgestellt werden, müssen Faktoren wie Sicherheit, Aufzeichnung von Prüfprotokollen, Zuverlässigkeit, Servicequalität und die Kompatibilität der Datenübertragung berücksichtigt werden.

Die Serviceimplementierung sollte möglichst flexibel sein. Es sollte zum Beispiel möglich sein, den Service auf einen anderen Server zu verlagern, ohne dass dies Auswirkungen auf die Servicenutzer hat; für diese sollte die Adressänderung des Serviceendpunkts gar nicht in Erscheinung treten.

Die vom Service unterstützten Protokollbindungen sind für bestimmte Clients unter Umständen nicht geeignet. Lösbar wäre dies durch eine Anpassung des Service an die erforderlichen Protokolle, eine Lösung, die in vielen Fällen jedoch nicht erwünscht oder nicht möglich ist.

Eventuell möchten Sie den wahren Standort des Service verdecken; der Zugriff der Clients auf den Service würde dann indirekt über einen bestimmten Kontrollpunkt erfolgen. Durch das Verdecken des Servicestandorts können Prüffunktionen oder zusätzliche Clientauthentifizierungsprüfungen hinzugefügt werden.

Lösung

Der Zielservice wird durch die Mediation mittels eines Enterprise Service Bus (ESB), durch die die gleiche Schnittstelle implementiert wird, verdeckt gehalten. Diese Mediation wirkt wie ein virtueller Service bzw. wie ein Proxy, der alle Anforderungen an den tatsächlichen Serviceprovider weiterleitet. Auf der Clientseite wird nur der virtuelle Service angezeigt, der sich wie der tatsächliche Provider des Service darstellt.

In einigen Fällen unterstützt der virtuelle Service andere Protokollbindungen als der eigentliche Service. In diesen Fällen müssen die entsprechenden Protokollkonvertierungen als Teil der Mediation bereitgestellt werden.

In ihrer einfachsten Form leitet die Mediation die einzelnen Anforderungen an eine vorkonfigurierte Endpunktadresse weiter. Flexibler wäre hingegen eine Lösung, bei der die tatsächliche Adresse mittels einer Abfrage in einem Service-Registry ermittelt und der ermittelte Wert für nachfolgende Anforderungen zwischengespeichert wird.

Durch den virtuellen Service bzw. durch die Mediation werden eine Reihe zusätzlicher Funktionen implementiert. Bei einer typischen Implementierung werden die einzelnen Anforderungen zu Prüfzwecken protokolliert. Zudem kann der virtuelle Service eine zusätzliche Stufe der Zugriffssteuerung bereitstellen, indem er die Berechtigungsnachweise der eingehenden Anforderungen überprüft. Eine erweiterte Implementierung könnte auch einen Identitätsabgleich zwischen verschiedenen Sicherheitsdomänen bereitstellen.