Client-Server-Modell

Aus besserwiki.de
Ein Computernetzwerkdiagramm von Clients, die über das Internet mit einem Server kommunizieren

Das Client-Server-Modell ist eine verteilte Anwendungsstruktur, bei der Aufgaben oder Arbeitslasten zwischen den Anbietern einer Ressource oder eines Dienstes, den Servern, und den Dienstanforderern, den Clients, aufgeteilt werden. Oft kommunizieren Clients und Server über ein Computernetz auf separater Hardware, aber sowohl Client als auch Server können sich auch im selben System befinden. Auf einem Server-Host laufen ein oder mehrere Serverprogramme, die ihre Ressourcen mit den Clients teilen. Ein Client gibt normalerweise keine seiner Ressourcen frei, sondern fordert Inhalte oder Dienste von einem Server an. Clients initiieren daher Kommunikationssitzungen mit Servern, die auf eingehende Anfragen warten. Beispiele für Computeranwendungen, die das Client-Server-Modell verwenden, sind E-Mail, Netzwerkdruck und das World Wide Web.

Server-basiertes Netzwerk

Die Rolle von Client und Server

Die "Client-Server"-Eigenschaft beschreibt die Beziehung der kooperierenden Programme in einer Anwendung. Die Serverkomponente stellt eine Funktion oder einen Dienst für einen oder mehrere Clients bereit, die Anfragen für solche Dienste initiieren. Server werden nach den Diensten klassifiziert, die sie anbieten. Ein Webserver stellt beispielsweise Webseiten bereit, ein Dateiserver Computerdateien. Eine gemeinsam genutzte Ressource kann jede Software und elektronische Komponente des Server-Computers sein, von Programmen und Daten bis hin zu Prozessoren und Speichergeräten. Die gemeinsame Nutzung der Ressourcen eines Servers stellt einen Dienst dar.

Ob ein Computer ein Client, ein Server oder beides ist, hängt von der Art der Anwendung ab, die die Dienstfunktionen benötigt. Auf einem einzigen Computer können zum Beispiel gleichzeitig ein Webserver und eine Dateiserver-Software laufen, um verschiedene Daten für Clients mit unterschiedlichen Anfragen bereitzustellen. Die Client-Software kann auch mit der Server-Software innerhalb desselben Computers kommunizieren. Die Kommunikation zwischen Servern, z. B. zur Synchronisierung von Daten, wird manchmal als Inter-Server- oder Server-zu-Server-Kommunikation bezeichnet.

Kommunikation zwischen Client und Server

Im Allgemeinen ist ein Dienst eine Abstraktion von Computerressourcen, und ein Client muss sich nicht darum kümmern, wie der Server bei der Erfüllung der Anfrage und der Übermittlung der Antwort vorgeht. Der Client muss lediglich die Antwort auf der Grundlage des bekannten Anwendungsprotokolls verstehen, d. h. den Inhalt und die Formatierung der Daten für den angeforderten Dienst.

Clients und Server tauschen Nachrichten in einem Anfrage-Antwort-Muster aus. Der Client sendet eine Anfrage, und der Server gibt eine Antwort zurück. Dieser Nachrichtenaustausch ist ein Beispiel für prozessübergreifende Kommunikation. Um zu kommunizieren, müssen die Computer eine gemeinsame Sprache verwenden und Regeln befolgen, damit sowohl der Client als auch der Server wissen, was sie zu erwarten haben. Die Sprache und die Regeln der Kommunikation werden in einem Kommunikationsprotokoll festgelegt. Alle Protokolle arbeiten in der Anwendungsschicht. Das Protokoll der Anwendungsschicht definiert die Grundmuster des Dialogs. Um den Datenaustausch noch weiter zu formalisieren, kann der Server eine Anwendungsprogrammierschnittstelle (API) implementieren. Die API ist eine Abstraktionsschicht für den Zugriff auf einen Dienst. Indem sie die Kommunikation auf ein bestimmtes Inhaltsformat beschränkt, erleichtert sie das Parsing. Durch die Abstraktion des Zugriffs erleichtert sie den plattformübergreifenden Datenaustausch.

Ein Server kann innerhalb eines kurzen Zeitraums Anfragen von vielen verschiedenen Clients erhalten. Ein Computer kann immer nur eine begrenzte Anzahl von Aufgaben ausführen und ist auf ein Planungssystem angewiesen, um die eingehenden Anfragen von Clients nach Priorität zu ordnen und zu bearbeiten. Um Missbrauch zu verhindern und die Verfügbarkeit zu maximieren, kann die Serversoftware die Verfügbarkeit für Clients einschränken. Denial-of-Service-Angriffe zielen darauf ab, die Verpflichtung eines Servers zur Bearbeitung von Anfragen auszunutzen, indem er mit übermäßigen Anfragen überlastet wird. Wenn sensible Informationen zwischen dem Client und dem Server übertragen werden sollen, sollte eine Verschlüsselung erfolgen.

Beispiel

Wenn ein Bankkunde mit einem Webbrowser (dem Client) auf Online-Banking-Dienste zugreift, sendet der Client eine Anfrage an den Webserver der Bank. Die Anmeldedaten des Kunden können in einer Datenbank gespeichert sein, und der Webserver greift als Client auf den Datenbankserver zu. Ein Anwendungsserver interpretiert die zurückgegebenen Daten unter Anwendung der Geschäftslogik der Bank und gibt die Ergebnisse an den Webserver weiter. Schließlich gibt der Webserver das Ergebnis an den Client-Webbrowser zur Anzeige zurück.

In jedem Schritt dieser Sequenz des Client-Server-Nachrichtenaustauschs verarbeitet ein Computer eine Anfrage und gibt Daten zurück. Dies ist das Muster der Anfrage-Antwort-Nachrichten. Wenn alle Anforderungen erfüllt sind, ist die Sequenz abgeschlossen und der Webbrowser zeigt dem Kunden die Daten an.

Dieses Beispiel veranschaulicht ein auf das Client-Server-Modell anwendbares Entwurfsmuster: die Trennung von Belangen.

Frühe Geschichte

Eine frühe Form der Client-Server-Architektur ist die Remote-Job-Eingabe, die mindestens auf OS/360 (angekündigt 1964) zurückgeht, bei der die Anforderung darin bestand, einen Job auszuführen, und die Antwort die Ausgabe war.

Bei der Formulierung des Client-Server-Modells in den 1960er und 1970er Jahren verwendeten die Informatiker, die das ARPANET (am Stanford Research Institute) aufbauten, die Begriffe Server-Host (oder Serving-Host) und User-Host (oder Using-Host), die in den frühen Dokumenten RFC 5 und RFC 4 erscheinen. Diese Verwendung wurde bei Xerox PARC Mitte der 1970er Jahre fortgesetzt.

Ein Kontext, in dem Forscher diese Begriffe verwendeten, war die Entwicklung einer Programmiersprache für Computernetzwerke namens Decode-Encode Language (DEL). Der Zweck dieser Sprache bestand darin, Befehle von einem Computer (dem Benutzer-Host) entgegenzunehmen, der Statusberichte an den Benutzer zurücksenden sollte, während er die Befehle in Netzwerkpaketen kodierte. Ein anderer DEL-fähiger Computer, der Server-Host, empfing die Pakete, dekodierte sie und gab formatierte Daten an den User-Host zurück. Ein DEL-Programm auf dem User-Host erhielt die Ergebnisse, um sie dem Benutzer zu präsentieren. Dies ist eine Client-Server-Transaktion. Die Entwicklung von DEL begann gerade im Jahr 1969, dem Jahr, in dem das US-Verteidigungsministerium das ARPANET (Vorgänger des Internet) einrichtete.

Client-Host und Server-Host

Die Begriffe "Client-Host" und "Server-Host" haben eine etwas andere Bedeutung als "Client" und "Server". Ein Host ist jeder Computer, der an ein Netzwerk angeschlossen ist. Während sich die Begriffe Server und Client entweder auf einen Computer oder auf ein Computerprogramm beziehen können, beziehen sich Server-Host und Client-Host immer auf Computer. Der Host ist ein vielseitiger, multifunktionaler Computer; Clients und Server sind lediglich Programme, die auf einem Host laufen. Im Client-Server-Modell widmet sich ein Server eher der Aufgabe, zu dienen.

Eine frühe Verwendung des Wortes Client findet sich in "Separating Data from Function in a Distributed File System", einem Papier der Xerox PARC Computerwissenschaftler Howard Sturgis, James Mitchell und Jay Israel von 1978. Die Autoren achten darauf, den Begriff für die Leser zu definieren, und erklären, dass sie ihn verwenden, um zwischen dem Benutzer und dem Netzwerkknoten des Benutzers (dem Client) zu unterscheiden. Bis 1992 hatte sich das Wort Server im allgemeinen Sprachgebrauch durchgesetzt.

Zentralisierte Datenverarbeitung

Das Client-Server-Modell schreibt nicht vor, dass Server-Hosts über mehr Ressourcen verfügen müssen als Client-Hosts. Vielmehr ermöglicht es jedem Allzweckcomputer, seine Fähigkeiten zu erweitern, indem er die gemeinsamen Ressourcen anderer Hosts nutzt. Bei der zentralisierten Datenverarbeitung wird hingegen eine große Anzahl von Ressourcen einer kleinen Anzahl von Computern zugewiesen. Je mehr Berechnungen von den Client-Hosts auf die zentralen Computer verlagert werden, desto einfacher können die Client-Hosts sein. Es stützt sich stark auf Netzressourcen (Server und Infrastruktur) für Berechnungen und Speicherung. Ein plattenloser Knoten lädt sogar sein Betriebssystem aus dem Netz, und ein Computerterminal hat überhaupt kein Betriebssystem; es ist nur eine Eingabe-/Ausgabeschnittstelle zum Server. Im Gegensatz dazu verfügt ein reichhaltiger Client, wie z. B. ein Personal Computer, über viele Ressourcen und ist für wesentliche Funktionen nicht auf einen Server angewiesen.

Als in den 1980er bis Ende der 1990er Jahre die Preise für Mikrocomputer sanken und ihre Leistungsfähigkeit zunahm, verlagerten viele Unternehmen ihre Berechnungen von zentralisierten Servern wie Großrechnern und Minicomputern auf Rich Clients. Dies ermöglichte eine größere und individuellere Verfügungsgewalt über die Computerressourcen, erschwerte jedoch die Verwaltung der Informationstechnologie. In den 2000er Jahren waren die Webanwendungen so weit ausgereift, dass sie mit der für eine bestimmte Mikroarchitektur entwickelten Anwendungssoftware konkurrieren konnten. Diese Reife, erschwinglichere Massenspeicher und das Aufkommen serviceorientierter Architekturen gehörten zu den Faktoren, die den Trend zum Cloud Computing in den 2010er Jahren begründeten.

Vergleich mit der Peer-to-Peer-Architektur

Neben dem Client-Server-Modell wird bei verteilten Datenverarbeitungsanwendungen häufig die Peer-to-Peer (P2P)-Anwendungsarchitektur verwendet.

Beim Client-Server-Modell ist der Server oft so konzipiert, dass er als zentralisiertes System arbeitet, das viele Clients bedient. Die Anforderungen an Rechenleistung, Arbeitsspeicher und Speicherplatz eines Servers müssen entsprechend der erwarteten Arbeitslast skaliert werden. Lastausgleichs- und Failover-Systeme werden häufig eingesetzt, um den Server über eine einzelne physische Maschine hinaus zu skalieren.

Lastausgleich ist definiert als die methodische und effiziente Verteilung des Netzwerk- oder Anwendungsverkehrs auf mehrere Server in einer Serverfarm. Jeder Load Balancer sitzt zwischen Client-Geräten und Backend-Servern, empfängt eingehende Anfragen und verteilt sie dann an jeden verfügbaren Server, der in der Lage ist, sie zu erfüllen.

In einem Peer-to-Peer-Netzwerk legen zwei oder mehr Computer (Peers) ihre Ressourcen zusammen und kommunizieren in einem dezentralen System. Peers sind gleichberechtigte oder äquipotente Knoten in einem nicht-hierarchischen Netz. Im Gegensatz zu Clients in einem Client-Server- oder Client-Queue-Client-Netz kommunizieren Peers direkt miteinander. In Peer-to-Peer-Netzwerken sorgt ein Algorithmus im Peer-to-Peer-Kommunikationsprotokoll für einen Lastausgleich, und selbst Peers mit bescheidenen Ressourcen können dazu beitragen, die Last zu verteilen. Wenn ein Knoten nicht mehr verfügbar ist, bleiben seine gemeinsam genutzten Ressourcen so lange verfügbar, wie andere Peers sie anbieten. Im Idealfall muss ein Peer keine hohe Verfügbarkeit erreichen, da andere, redundante Peers die Ausfallzeiten der Ressourcen ausgleichen; wenn sich die Verfügbarkeit und die Lastkapazität der Peers ändern, leitet das Protokoll die Anfragen um.

Sowohl Client-Server als auch Master-Slave werden als Unterkategorien von verteilten Peer-to-Peer-Systemen betrachtet.