it-swarm.com.de

Wie kann ein Webserver an einem Port mehrere eingehende Anfragen eines Benutzers gleichzeitig bearbeiten (80)?

Wie verarbeitet ein Webserver mehrere eingehende Anfragen gleichzeitig an einem einzigen Port (80)?

Beispiel: Gleichzeitig möchten 300.000 Benutzer ein Bild von www.abcdef.com sehen, dem die IP 10.10.100.100 und der Port 80 zugewiesen sind. Wie kann also www.abcdef.com die Last dieser eingehenden Benutzer verarbeiten?

Kann ein Server (der mit IP 10.10.100.100 zugewiesen ist) diese große Anzahl eingehender Benutzer verarbeiten? Wenn nicht, wie kann dann eine IP-Adresse mehreren Servern zugewiesen werden, um diese Last zu handhaben? 

26
user2032344

Von tcpipguide

Diese Identifizierung von Verbindungen, die sowohl Client- als auch Server-Sockets verwenden, bietet die Flexibilität, mehrere Verbindungen zwischen Geräten zuzulassen, die wir im Internet für selbstverständlich halten. Beispielsweise müssen ausgelastete Anwendungsserverprozesse (z. B. Webserver) in der Lage sein, Verbindungen von mehr als einem Client zu verarbeiten, oder das World Wide Web wäre ziemlich unbrauchbar. Da die Verbindung sowohl über den Client-Socket als auch über den Server identifiziert wird, ist dies kein Problem. Zur gleichen Zeit, zu der der Webserver die oben erwähnte Verbindung aufrechterhält, kann er leicht eine andere Verbindung haben, z. B. Port 2.199 unter IP-Adresse 219.31.0.44. Dies wird durch die Verbindungskennung dargestellt:

(41.199.222.3:80, 219.31.0.44:2199). 

In der Tat können wir mehrere Verbindungen vom selben Client zum selben Server haben. Jedem Clientprozess wird eine andere ephemere Portnummer zugewiesen. Selbst wenn alle versuchen, auf denselben Serverprozess zuzugreifen (z. B. der Webserverprozess bei 41.199.222.3:80), verfügen alle über einen anderen Client-Socket und sind eindeutig Verbindungen. Auf diese Weise können Sie mehrere gleichzeitige Anforderungen von Ihrem Computer an dieselbe Website senden.

Wiederum verfolgt TCP jede dieser Verbindungen unabhängig voneinander, so dass jede Verbindung die anderen nicht kennt. TCP kann Hunderte oder sogar Tausende gleichzeitiger Verbindungen verarbeiten. Die einzige Einschränkung ist die Kapazität des Computers, auf dem TCP ausgeführt wird, und die Bandbreite der physischen Verbindungen zu ihm. Je mehr Verbindungen gleichzeitig ausgeführt werden, desto mehr Ressourcen müssen von jeder einzelnen gemeinsam genutzt werden.

14
a.m.

Ein Port ist nur eine magische Zahl. Es entspricht keiner Hardware. Der Server öffnet ein Socket, das an Port 80 "überwacht" wird und neue Verbindungen von diesem Socket "akzeptiert". Jede neue Verbindung wird durch einen neuen Socket dargestellt, dessen lokaler Port ebenfalls Port 80 ist, dessen Remote-IP: Port jedoch dem Client entspricht, der verbunden ist. Sie werden also nicht vermischt. Sie benötigen daher nicht mehrere IP-Adressen oder gar mehrere Ports auf der Serverseite.

12
user207421

TCP Kümmert sich um die Identifizierung des Kunden
Wie gesagt, sorgt TCP für die Clientidentifikation, und der Server sieht nur einen "Socket" pro Client.
Angenommen, ein Server am 10.10.100.100 wartet auf Port 80 auf eingehende TCP - Verbindungen (HTTP wird über TCP aufgebaut). Der Browser eines Clients (um 10.9.8.7) stellt über den Client-Port 27143 eine Verbindung zum Server her. Der Server sieht: "Der Client 10.9.8.7:27143 möchte eine Verbindung herstellen, akzeptieren Sie das?". Die Server-App akzeptiert und erhält ein "Handle" (einen Socket), um die gesamte Kommunikation mit diesem Client zu verwalten, und das Handle sendet immer Pakete mit den richtigen TCP - Headern an 10.9.8.7:27143.

Pakete sind niemals gleichzeitig
Nun, physisch gibt es im Allgemeinen nur eine (oder zwei) Verbindungen, die den Server mit dem Internet verbinden, sodass Pakete nur in sequentieller Reihenfolge ankommen können. Die Frage lautet: Was ist der maximale Durchsatz durch die Glasfaser und wie viele Antworten kann der Server berechnen und zurücksenden. Abgesehen von der CPU-Zeit oder Engpässen des Speichers bei der Beantwortung von Anforderungen muss der Server auch einige Ressourcen (mindestens einen aktiven Socket pro Client) aufrechterhalten, bis die Kommunikation beendet ist, und daher RAM beanspruchen. Der Durchsatz wird durch einige Optimierungen (nicht gegenseitig exklusiv) erreicht: Nicht blockierende Sockets (zur Vermeidung von Pipelining/Socket-Latenzen), Multithreading (zur Verwendung von mehr CPU-Kernen/Threads).

Anforderungsdurchsatz weiter verbessern: Lastverteilung
Und schließlich erledigen Server auf der "Vorderseite" von Websites im Allgemeinen nicht die gesamte Arbeit selbst (insbesondere komplizierteres Material wie Datenbankabfragen, Berechnungen usw.), verschieben Aufgaben oder verschieben sogar HTTP-Anforderungen an verteilte Server, während sie so trivial (zB Weiterleitung) so viele Anfragen pro Sekunde wie möglich bearbeiten. Die Verteilung der Arbeit auf mehrere Server wird als Load-Balancing bezeichnet.

4
maxbc

1) Wie verarbeitet ein Webserver mehrere eingehende Anforderungen gleichzeitig an einem einzelnen Port (80)?
==> a) Eine Instanz des Webdienstes (Beispiel: Spring Boot Micro-Dienst) wird auf dem Server-Rechner an Port 80 ausgeführt/überwacht.
b) Dieser Webservice (Spring Boot App) benötigt einen Servlet-Container wie meistens Tomcat.
Für diesen Container ist Thread-Pool konfiguriert.
c) Wenn jemals Anfragen von verschiedenen Benutzern gleichzeitig eingehen, wird dieser Container
weisen Sie jedem Thread aus dem Pool für jede der eingehenden Anforderungen zu.
d) Da der serverseitige Web-Service-Code hauptsächlich Beans (im Falle von Java) enthält
Singleton, jeder Thread, der sich auf jede Anfrage bezieht, ruft die Singleton-APIs auf
und wenn ein Datenbankzugriff erforderlich ist, dann Synchronisation dieser
Es werden Threads benötigt, die über die @transactional-Annotation erstellt werden. Diese
Annotation synchronisiert den Datenbankvorgang.

2) Kann ein Server (der die IP 10.10.100.100 zugewiesen hat) diese enorme Anzahl an eingehenden Benutzern verarbeiten?
Wenn nicht, wie kann eine IP-Adresse mehreren Servern zugewiesen werden, um diese Last zu bewältigen?
==> Dies wird von loadbalancer zusammen mit routetable erledigt

0

die Antwort lautet: Virtuelle Hosts. In HTTP Header ist der Name der Domäne, sodass der Webserver weiß, welche Dateien ausgeführt oder an den Client gesendet werden

0
Muflix