Konzept: Verteilungsmuster
Verteilungsmuster betonen die Wichtigkeit der Verteilungsaspekte in einer Systemlösung und das Ausmaß, zu dem sie andere Entscheidungen bezüglich der Architektur beeinflussen.
Beziehungen
Hauptbeschreibung

Knoten, Prozessoren und Einheiten

Prozessoren und Einheiten sind gebräuchliche Stereotypen von Knoten. Die Unterscheidung zwischen beiden scheint nur schwer verständlich, da viele Einheiten jetzt eigene CPUs enthalten. Die Unterscheidung zwischen Prozessoren und Einheiten basiert jedoch auf dem Typ der Software, die in ihnen ausgeführt wird. Prozessoren führen Programme/Software aus, die explizit für das zu entwickelnde System geschrieben wurde. Prozessoren sind vielseitig einsetzbare Recheneinheiten, die Rechenkapazität, Hauptspeicher und Ausführungsfunktionen haben.

Einheiten führen Software aus, die die Funktionalität der Einheit selbst steuert. Einheiten sind normalerweise an einen Prozessor angeschlossen, der die Einheit steuert. Sie führen normalerweise eingebettete Software aus und sind nicht in der Lage, vielseitig einsetzbare Programme auszuführen. Ihre Funktionalität wird in der Regel von Einheitentreibersoftware gesteuert.

Verteilungsmuster

Es gibt eine Vielzahl typischer Verteilungsmuster in Systemen je nach Funktionalität des Systems und Typ der Anwendung. In vielen Fällen wird das Verteilungsmuster formlos verwendet, um die 'Architektur' des Systems zu beschreiben, obwohl die vollständige Architektur dies und noch vieles mehr umfasst. Beispielsweise wird ein System häufig mit dem Satz 'hat eine Client/Server-Architektur' beschrieben, obwohl dies nur auf den Verteilungsaspekt der Architektur bezieht. Verteilungsmuster betonen die Wichtigkeit der Verteilungsaspekte in einem System und das Ausmaß, zu dem sie andere Entscheidungen bezüglich der Architektur beeinflussen.

Die im Folgenden beschriebenen Verteilungsmuster implizieren bestimmte Systemmerkmale, Leistungsmerkmale Prozessarchitekturen. Jedes Verteilungsmuster löst bestimmte Probleme, wirft jedoch eindeutige Herausforderungen auf.

Client/Server-Architekturen

In so genannten "Client/Server-Architekturen" gibt es spezielle Netzprozessorknoten, die Clients, und Knoten genannt Server. Clients sind Konsumenten von Services, die von einem Server bereitgestellt werden. Ein Client bedient häufig einen einzelnen Benutzer und bearbeitet häufig Services für die Endbenutzerpräsentation (GUIs), während der Server normalerweise Services für mehrere Clients gleichzeitig bereitstellt. Die bereitgestellten Services sind in der Regel Datenbank-, Sicherheits- oder Druckservices. Die "Anwendungslogik" oder Geschäftslogik in diesen Systemen wird normalerweise auf Client und Server verteilt. Die Verteilung der Geschäftslogik wird Anwendungspartitionierung genannt.

In der folgenden Abbildung zeigt Client A ein Beispiel für eine zweischichtige Architektur mit dem Großteil der Anwendungslogik auf dem Server. Client B zeigt eine typische dreischichtige Architektur, bei der die Geschäftsservices im Geschäftsobjektserver implementiert sind. Client C zeigt eine typische webbasierte Anwendung.

Diagramm ist im Inhalt beschrieben.

Varianten von Client/Server-Architekturen

In traditionellen Client/Server-Systemen ist der größte Teil der Geschäftslogik in den Clients implementiert. Gewisse Funktionalität sollte jedoch besser auf dem Server angesiedelt werden, z. B. Funktionalität, die häufig auf Daten zugreift, die auf dem Server gespeichert sind. Auf diese Weise kann der Datenaustausch im verringert werden, der in den meisten Fällen recht kostenintensiv ist (ungefähr halb so schnell wie die Interprozesskommunikation).

Einige Merkmale:

  • Ein System kann sich aus mehreren Typen von Clients zusammensetzen, z. B.:
    • Benutzer-Workstations
    • Netzcomputer
  • Clients und Server kommunizieren über verschiedene Technologien, z. B. CORBA/IDL oder RPC (Remote-Procedure Call, ferner Prozeduraufruf).
  • Ein System kann sich aus mehreren Typen von Servern zusammensetzen, z. B.:
    • Datenbankserver mit Datenbankmaschinen wie Sybase, Ingres, Oracle, Informix
    • Druckserver mit Treiberlogik, z. B. Steuerung der Warteschlange für einen bestimmten Drucker
    • Kommunikationsserver (TCP/IP, ISDN, X.25)
    • Window-Manager-Server (X)
    • Dateiserver (NFS unter UNIX)

Die dreischichtige Architektur

Die dreischichtige Architektur ist ein Sonderfall der 'Client/Server-Architektur', in der die Funktionalität im System auf drei logische Partitionen verteilt wird: Anwendungsservices, Geschäftsservices und Datenservices. Die 'logischen Partitionen' können drei oder mehr physischen Knoten zugeordnet werden.

Im Begleittext beschriebene Abbildung

Beispiel für eine dreischichtige Architektur

Die logische Partitionierung in diese drei 'Schichten' spiegelt Beobachtungen darüber wider, wie Funktionalität in typischen Office-Anwendungen in der Regel implementiert und geändert wird. Anwendungsservices, die sich primär mit der GUI-Darstellung beschäftigen, werden meistens auf einer dedizierten Arbeitsplatz-Workstation mit einer grafischen, fensterorientierten Betriebsumgebung ausgeführt. Änderungen in der Funktionalität ergeben sich häufig aus Aspekten der Benutzerfreundlichkeit oder ästhetischen Gesichtspunkten, also im Wesentlichen menschlichen Faktoren.

Datenservices werden in der Regel mit Datenbankservertechnologie implementiert und auf Knoten mit höherer Leistung und höherer Bandbreite ausgeführt, die Hunderte oder Tausende von Benutzern bedienen, die über ein Netz verbunden sind. Datenservices werden in der Regel geändert, wenn sich die Darstellung und die Beziehungen zwischen gespeicherten Informationen ändern.

Geschäftsservices spiegeln das codierte Wissen von Geschäftsprozessen wider. Sie manipulieren und synthetisieren Informationen, die von den Datenservices abgerufen werden, und stellen diese den Anwendungsservices zur Verfügung. Geschäftsservices werden in der Regel von vielen Benutzern gemeinsam verwendet und befinden sich deshalb ebenfalls auf speziellen Servern, obwohl sie auch auf denselben Knoten wie die Datenservices implementiert werden können.

Eine solche Partitionierung der Funktionalität ist ein relativ zuverlässiges Muster für Skalierbarkeit. Durch Hinzufügen von Servern und Umverteilung der Verarbeitung auf Daten- und Geschäftsserver kann ein höheres Maß an Skalierbarkeit erreicht werden.

Die 'Fat-Client-Architektur'

Der Client wird als "Fat" bezeichnet, da fast die gesamte Verarbeitung auf ihm ausgeführt wird (ausgenommen hiervon ist die Variante der 'zweischichtigen Architektur', wo die Datenservices auf einem separaten Knoten ausgeführt werden). Anwendungsservices, Geschäftsservices und Datenservices sind auf der Clientmaschine implementiert. Der Datenbankserver befindet sich normalerweise auf einer anderen Maschine.

Im Begleittext beschriebene Abbildung

Traditionelle zweischichtige oder Fat-Client-Architektur

'Fat Clients' lassen sich relativ leicht entwerfen und erstellen, aber schwieriger verteilen (weil sie dazu neigen, groß und monolithisch zu sein) und verwalten. Da die Clientmaschinen in der Regel Daten lokal zwischenspeichern, um eine bessere Leistung zu erzielen, sind lokale Cache-Kohärenz und -Konsistenz Probleme und Bereiche, denen besondere Aufmerksamkeit gewidmet werden muss. Änderungen an gemeinsam genutzten Objekten in mehreren lokalen Caches sind schwierig und nur mit viel Aufwand zu koordinieren, unter anderem, weil Änderungen per Netz-Broadcasting verteilt werden.

Die 'Fat-Server-Architektur'

Am anderen Ende des Spektrums von 'Fat Client' liegt der 'Fat Server' bzw. 'Überschlanke Client'. Ein typisches Beispiel ist eine Web-Browser-Anwendung mit einer Reihe von HTML-Seiten, bei der auf dem Client nur sehr wenig Anwendung implementiert ist. Fast die gesamte Arbeit findet in einem oder mehreren Webservern und Datenservern statt.

Im Begleittext beschriebene Abbildung

Webanwendung

Webanwendungen sind leicht zu verteilen und einfach zu verwenden. Sie sind relativ kosteneffizient zu entwickeln und zu unterstützen (da ein Großteil der Anwendungsinfrastruktur vom Browser und vom Webserver bereitgestellt wird). Sie bieten jedoch möglicherweise nicht den gewünschten Grad der Steuerung über die Anwendung und können das Netz schnell überlasten, wenn sie nicht sorgfältig entworfen sind (und manchmal auch dann, wenn das Design ordentlich ist).

Verteilte Client/Server-Architektur

In dieser Architektur befinden sich Anwendungs-, Geschäfts- und Datenservices auf unterschiedlichen Knoten mit möglicherweise speziellen Servern auf den Schichten der Geschäftsservices und Datenservices. Eine vollständige Realisierung einer dreischichtigen Architektur.

Die Peer-to-Peer-Architektur

In der Peer-to-Peer-Architektur kann jeder Prozess oder Knoten im System gleichzeitig Client und Server sein. Die Verteilung der Funktionalität wird erreicht, indem zusammengehörige Services gruppiert werden, um den Datenaustausch im Netz zu minimieren, aber gleichzeitig Durchsatz und Systemauslastung zu maximieren. Solche Systeme sind in der Regel komplex, und es muss ein höheres Augenmerk auf Probleme wie Deadlocks, Blockierungen zwischen Prozessen und Fehlerbehandlung gelegt werden.