zurück zum Artikel

Patterns in der Softwarearchitektur: Das Broker-Muster

Rainer Grimm

(Bild: bestfoto77/Shutterstock.com)

Das Broker Pattern strukturiert verteilte Softwaresysteme, die mit entfernten Dienstaufrufen interagieren.

Patterns sind eine wichtige Abstraktion in der modernen Softwareentwicklung und Softwarearchitektur. Sie bieten eine klar definierte Terminologie, eine saubere Dokumentation und das Lernen von den Besten. Das Broker-Pattern strukturiert verteilte Softwaresysteme, die mit entfernten Dienstaufrufen interagieren. Es ist für die Koordinierung der Kommunikation, ihrer Ergebnisse und Ausnahmen verantwortlich.

Modernes C++ – Rainer Grimm

Rainer Grimm ist seit vielen Jahren als Softwarearchitekt, Team- und Schulungsleiter tätig. Er schreibt gerne Artikel zu den Programmiersprachen C++, Python und Haskell, spricht aber auch gerne und häufig auf Fachkonferenzen. Auf seinem Blog Modernes C++ beschäftigt er sich intensiv mit seiner Leidenschaft C++.

Das Broker Pattern aus dem Buch "Pattern-Oriented Software Architecture, Volume 1 [1]" hilft dabei, viele Herausforderungen verteilter Systeme zu lösen. Das kann etwa sein, den richtigen Dienstanbieter zu finden, sicher mit ihm zu kommunizieren, die richtige Programmiersprache zu verwenden oder mit Fehlern umzugehen. Ich werde in diesem Artikel nicht ins Detail gehen. Er soll nur einen groben Überblick über das Broker-Pattern geben. Weitere Informationen finden sich in dem Buch "Pattern-Oriented Software Architecture, Volume 1 [2]".

Zweck

Lösung

Struktur

Der Broker besteht aus fünf Komponenten:

Client

clientseitig Proxy

Server

serverseitig Proxy

Broker

Es gibt noch weitere interessante Aspekte der Broker-Architektur.

Normalerweise werden die Dienste, die der Server anbietet, in einer Interface Definition Language (IDL) festgelegt. Sie ist die Basis für den clientseitgen Proxy und den serverseitigen Proxy. Hier sind die beiden typischen Schritte:

  1. Verwenden der Programmiersprachen-unabhängigen IDL, um den Stub und das Skeleton für eine bestimmte Programmiersprache zu erstellen. Dies ist oft für verschiedene Programmiersprachen möglich.
  2. Implementieren des clientseitigen Stellvertreters und den serverseitigen Stellvertreter auf der Grundlage des Stubs und des Skeletts.

Die IDL kann auch innerhalb des Brokers registriert werden, damit der Broker den passenden serverseitigen Stellvertreter finden kann, wenn er vom clientseitigen gefragt wird.

Der Vorteil der Broker-Architektur ist, dass Clients und Server miteinander kommunizieren können, obwohl sie zum Beispiel unterschiedliche Programmiersprachen sprechen.

Bisher habe ich die statische Struktur des Broker-Musters beschrieben. Nun werde ich das Zusammenspiel zwischen dem Client und dem Server betrachten.

Der Client hat eine Anfrage

Wenn ein Client einen Service nutzen möchte, fragt er bei dem Broker danach. Letzterer liefert den clientseitigen Stellvertreter zurück, der die Schnittstelle des Services implementiert. Der clientseitige Stellvertreter verwaltet die Zwischenspeicherung von Daten, die Kommunikation zwischen den Prozessen oder die Vorbereitung der Daten (Marshalling [3]/Serialisierung). Er stellt eine Verbindung zum serverseitigen Stellvertreter her, der den Server aufruft. Der serverseitige Stellvertreter hat eine ähnliche Aufgabe wie der clientseitige Stellvertreter: Er bereitet die Daten auf und spricht die Sprache des Servers. Wenn der Server das Ergebnis des Funktionsaufrufs zurücksendet, ruft er seinen serverseitigen Stellvertreter auf, der mit dem clientseitigen kommuniziert.

Der Server meldet sich an

Während der Initialisierung des Systems startet der Broker sich selbst und tritt in seine Ereignisschleife ein. Der Server initialisiert und registriert sich beim Broker. Der Server erhält die Registrierungsbestätigung vom Broker und tritt in seine Ereignisschleife ein.

Zusätzliche Broker

Manchmal gibt es mehr als einen Broker. Ein Broker kann daher die Dienstanforderung an einen anderen Broker delegieren. In dieser fortschrittlichen Architektur muss jeder Broker zwei Protokolle unterstützen. Ein internes Protokoll für seinen clientseitigen Stellvertreter und serverseitigen Stellvertreter und ein externes Protokoll für den anderen Broker.

Es gibt viele Beispiele für Broker-Architekturen.

SunRPC [4]:

Das Programm rpcgen erzeugt aus einer Schnittstellenbeschreibung Stubs, Skeletons und eine XDR-Datei zur Datenkonvertierung. rpcgen bietet eine API für Remote-Funktionsaufrufe in C an.

Remote Method Invocation (RMI) [5]:

Der rmic-Compiler generiert die Stubs und Skeletons aus einer Serverschnittstelle in Java. Im Gegensatz zu den Funktionsreferenzen in SunRPC sind dies Objektreferenzen. Seit Java 5 werden die Stubs und Skeletons implizit von der Java Virtual Machine erzeugt.

Common Object Request Broker Architecture (CORBA) [6]:

CORBA verwendet die IDL für die Schnittstellenbeschreibung. Die Syntax der IDL ist C++-orientiert. CORBA verwendet ähnlich wie RMI Objekte. Standardisierte Implementierungen des IDL2Language Compilers gibt es für Ada, C, C++, Lisp, Smalltalk, Java, COBOL, PL/I und Python.

Simple Object Access Protocol (SOAP) [8]:

Als Schnittstellenbeschreibungssprache wird Web Service Definition Language (WSDL) [9] verwendet. WSDL ist ein textbasiertes Protokoll (XML). Dies Protokoll ist nicht nur deklarativ, sondern spezifiziert auch die Art der Datenübertragung und eines Services.

Einen wsdl2Compiler [10] Codegenerator gibt es in Java, C++, Python, Perl, ...

Vorteile

Nachteile

Das Model-View-Controller (MVC) ist eines der klassischen Architekturmuster. Es unterteilt die Programmlogik einer Benutzeroberfläche in die einzelnen Komponenten Model, View und Controller. Das Model verwaltet die Daten und Regeln der Anwendung. Die View stellt die Daten dar, und der Controller interagiert mit dem Benutzer. Ich werde MVC in meinem nächsten Artikel vorstellen. (rme [12])


URL dieses Artikels:
https://www.heise.de/-8717881

Links in diesem Artikel:
[1] https://en.wikipedia.org/wiki/Pattern-Oriented_Software_Architecture
[2] https://en.wikipedia.org/wiki/Pattern-Oriented_Software_Architecture
[3] https://en.wikipedia.org/wiki/Marshalling_(computer_science)
[4] https://web.cs.wpi.edu/~rek/DCS/D04/SunRPC.html
[5] https://en.wikipedia.org/wiki/Java_remote_method_invocation
[6] https://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture
[7] http://www.dre.vanderbilt.edu/~schmidt/ACE.html
[8] https://en.wikipedia.org/wiki/SOAP
[9] https://en.wikipedia.org/wiki/Web_Services_Description_Language
[10] https://en.wikipedia.org/wiki/Web_Services_Description_Language
[11] https://www.genivia.com/dev.html
[12] mailto:rme@ix.de