Client-Server-Modell - Client–server model

Ein Computernetzwerkdiagramm von Clients, die über das Internet mit einem Server kommunizieren

Das Client-Server-Modell ist eine verteilte Anwendungsstruktur , die Aufgaben oder Workloads zwischen den Anbietern einer Ressource oder eines Dienstes, die als Server bezeichnet werden , und Dienstanforderern, die als Clients bezeichnet werden, aufteilt . Clients und Server kommunizieren häufig über ein Computernetzwerk auf separater Hardware, aber sowohl Client als auch Server können sich im selben System befinden. Ein Server - Host läuft ein oder mehr Server - Programme, die mit den Kunden , ihre Ressourcen gemeinsam nutzen. Ein Client teilt normalerweise keine seiner Ressourcen, fordert jedoch 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, sindE-Mail , Netzwerkdruck und das World Wide Web .

Client- und Serverrolle

Das Merkmal "Client-Server" beschreibt die Beziehung kooperierender Programme in einer Anwendung. Die Serverkomponente stellt einem oder vielen Clients eine Funktion oder einen Dienst bereit, die Anforderungen für solche Dienste initiieren. Server werden nach den von ihnen bereitgestellten Diensten klassifiziert. Ein Webserver dient beispielsweise Webseiten und ein Dateiserver dient Computerdateien . Eine gemeinsam genutzte Ressource kann eine beliebige Software und elektronische Komponenten des Servercomputers sein, von Programmen und Daten bis hin zu Prozessoren und Speichergeräten . Die gemeinsame Nutzung von 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. Beispielsweise kann ein einzelner Computer gleichzeitig Webserver- und Dateiserver-Software ausführen, um Clients, die unterschiedliche Arten von Anforderungen stellen, unterschiedliche Daten bereitzustellen. Client-Software kann auch mit Server-Software innerhalb desselben Computers kommunizieren. Die Kommunikation zwischen Servern, beispielsweise zum Synchronisieren von Daten, wird manchmal als Interserver- oder Server-zu-Server- Kommunikation bezeichnet.

Client- und Serverkommunikation

Im Allgemeinen ist ein Dienst eine Abstraktion von Computerressourcen und ein Client muss sich nicht darum kümmern, wie der Server arbeitet, während er die Anforderung erfüllt und die Antwort liefert. Der Client muss lediglich die Antwort auf Basis des bekannten Anwendungsprotokolls verstehen, also den Inhalt und die Formatierung der Daten für den angeforderten Dienst.

Clients und Server tauschen Nachrichten in einem Request-Response- Messaging-Muster aus . Der Client sendet eine Anfrage und der Server gibt eine Antwort zurück. Dieser Nachrichtenaustausch ist ein Beispiel für die Interprozesskommunikation . Um zu kommunizieren, müssen die Computer eine gemeinsame Sprache haben und Regeln befolgen, damit sowohl der Client als auch der Server wissen, was sie erwartet. Die Sprache und die Regeln der Kommunikation sind in einem Kommunikationsprotokoll definiert . Alle Protokolle arbeiten in der Anwendungsschicht . Das Anwendungsschichtprotokoll 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. Durch die Beschränkung der Kommunikation auf ein bestimmtes Inhaltsformat wird das Parsen erleichtert . Durch die Abstraktion des Zugriffs erleichtert es den plattformübergreifenden Datenaustausch.

Ein Server kann in kurzer Zeit Anfragen von vielen verschiedenen Clients empfangen. Ein Computer kann zu jedem Zeitpunkt nur eine begrenzte Anzahl von Aufgaben ausführen und verlässt sich auf ein Planungssystem , um eingehende Anforderungen von Clients zu priorisieren, um sie zu berücksichtigen . 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 Verarbeitung von Anfragen auszunutzen, indem dieser mit überhöhten Anfrageraten überlastet wird. Die Verschlüsselung sollte angewendet werden, wenn sensible Informationen zwischen dem Client und dem Server übertragen werden sollen.

Beispiel

Wenn eine Bank Kunde greift auf Online - Banking - Dienste mit einem Web - Browser (Client) initiiert der Client eine Anfrage an den Webserver der Bank. Die Kunden Login Credentials können in einer gespeichert werden Datenbank und der Webserver greift auf die Server - Datenbank als Client. Ein Anwendungsserver interpretiert die zurückgegebenen Daten, indem er die Geschäftslogik der Bank anwendet und liefert die Ausgabe an den Webserver. Schließlich gibt der Webserver das Ergebnis zur Anzeige an den Client-Webbrowser zurück.

In jedem Schritt dieser Sequenz von Client-Server-Nachrichtenaustausch verarbeitet ein Computer eine Anfrage und gibt Daten zurück. Dies ist das Anforderungs-Antwort-Messaging-Muster. Wenn alle Anfragen erfüllt sind, ist der Ablauf abgeschlossen und der Webbrowser präsentiert dem Kunden die Daten.

Dieses Beispiel veranschaulicht ein Entwurfsmuster, das auf das Client-Server-Modell anwendbar ist: Trennung von Bedenken .

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, wo die Anforderung war, einen Job auszuführen , und die Antwort die Ausgabe war.

Während der Client-Server - Modell in den 1960er und 1970er Jahren zu formulieren, Informatiker bauen ARPANET (am Stanford Research Institute ) verwendet , um die Begriffe Server-Host (oder Host - Dienst ) und Benutzer-Host (oder using-Host ), und diese erscheinen in die frühen Dokumente RFC 5 und RFC 4. Diese Verwendung wurde bei Xerox PARC Mitte der 1970er Jahre fortgesetzt .

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

Client-Host und Server-Host

Client-Host und Server-Host haben subtil unterschiedliche Bedeutungen als Client und Server . Ein Host ist ein Computer, der mit einem Netzwerk verbunden ist. Während sich die Wörter Server und Client entweder auf einen Computer oder ein Computerprogramm beziehen können, beziehen sich Server-Host und Benutzer-Host immer auf Computer. Der Host ist ein vielseitiger Multifunktionscomputer; Clients und Server sind nur Programme, die auf einem Host ausgeführt werden. Im Client-Server-Modell ist ein Server eher der Aufgabe des Servings gewidmet.

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

Zentralisierte Datenverarbeitung

Das Client-Server-Modell schreibt nicht vor, dass Server-Hosts mehr Ressourcen haben müssen als Client-Hosts. Vielmehr ermöglicht es jedem Allzweckcomputer, seine Fähigkeiten zu erweitern, indem er die gemeinsam genutzten Ressourcen anderer Hosts nutzt. Zentralisiertes Computing weist jedoch speziell einer kleinen Anzahl von Computern eine große Menge an Ressourcen zu. Je mehr Berechnungen von den Client-Hosts auf die zentralen Computer ausgelagert werden, desto einfacher können die Client-Hosts sein. Es ist stark auf Netzwerkressourcen (Server und Infrastruktur) für die Berechnung und Speicherung angewiesen. Ein plattenloser Knoten lädt sogar sein Betriebssystem aus dem Netzwerk, und ein Computerterminal hat überhaupt kein Betriebssystem; es ist nur eine Eingabe/Ausgabe-Schnittstelle zum Server. Im Gegensatz dazu verfügt ein Fat-Client , wie beispielsweise ein Personal Computer , über viele Ressourcen und ist für wesentliche Funktionen nicht auf einen Server angewiesen.

Als Mikrocomputer von den 1980er bis in die späten 1990er Jahre im Preis sanken und an Leistung zunahmen, stellten viele Unternehmen die Berechnung von zentralisierten Servern wie Mainframes und Minicomputern auf Fat Clients um. Dies ermöglichte eine größere, individuellere Herrschaft über Computerressourcen, aber eine komplizierte Verwaltung der Informationstechnologie . In den 2000er Jahren sind Webanwendungen so ausgereift, dass sie mit Anwendungssoftware konkurrieren können, die für eine bestimmte Mikroarchitektur entwickelt wurde . Diese Reifung, erschwinglichere Massenspeicher und das Aufkommen serviceorientierter Architekturen waren unter anderem die Faktoren, die den Cloud-Computing- Trend der 2010er Jahre auslösten.

Vergleich mit Peer-to-Peer-Architektur

Zusätzlich zum Client-Server-Modell verwenden verteilte Computeranwendungen häufig die Peer-to-Peer (P2P)-Anwendungsarchitektur.

Beim Client-Server-Modell ist der Server oft so konzipiert, dass er als zentralisiertes System arbeitet, das viele Clients bedient. Der Rechenleistungs-, Arbeitsspeicher- und Speicherbedarf eines Servers muss entsprechend der zu erwartenden Arbeitslast skaliert werden. Load-Balancing- und Failover- Systeme werden häufig eingesetzt, um den Server über eine einzelne physische Maschine hinaus zu skalieren.

Load Balancing 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 Back-End-Servern, empfängt eingehende Anfragen und verteilt sie dann an jeden verfügbaren Server, der diese erfüllen kann.

In einem Peer-to-Peer- Netzwerk bündeln zwei oder mehr Rechner ( Peers ) ihre Ressourcen und kommunizieren in einem dezentralen System . Peers sind gleichberechtigte oder äquipotente Knoten in einem nicht-hierarchischen Netzwerk. Im Gegensatz zu Clients in einem Client-Server- oder Client-Warteschlange-Client- Netzwerk kommunizieren Peers direkt miteinander. Bei Peer-to-Peer-Netzwerken gleicht ein Algorithmus im Peer-to-Peer-Kommunikationsprotokoll die Last aus , und selbst Peers mit bescheidenen Ressourcen können dabei helfen, die Last zu verteilen. Wenn ein Knoten nicht verfügbar ist, bleiben seine gemeinsam genutzten Ressourcen verfügbar, solange andere Peers dies anbieten. Im Idealfall muss ein Peer keine hohe Verfügbarkeit erreichen, da andere, redundante Peers die Ausfallzeit von Ressourcen ausgleichen ; Wenn sich Verfügbarkeit und Belastbarkeit von Peers ändern, leitet das Protokoll Anfragen um.

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

Siehe auch

Anmerkungen