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.
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.
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.
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 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.
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.
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.
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.
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.
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).
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.
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.
|