2013-06-06 15 views
20

In che modo un server Web gestisce più richieste in entrata contemporaneamente su una singola porta (80)?In che modo un server Web può gestire più richieste in entrata di utenti alla volta su una singola porta (80)?

Esempio: Allo stesso tempo 300k utenti vogliono vedere un'immagine da www.abcdef.com che è assegnato IP 10.10.100.100 e porta 80. Così come si può gestire il carico www.abcdef.com questo in arrivo degli utenti?

Un solo server (che è assegnato con IP 10.10.100.100) gestisce questa vasta quantità di utenti in entrata? In caso contrario, come può un indirizzo IP essere assegnato a più di un server per gestire questo carico?

risposta

10

Da tcpipguide

Questa identificazione di connessioni utilizzando sia i socket client server ed è ciò che fornisce la flessibilità nel consentire più connessioni tra i dispositivi che diamo per scontato su Internet. Ad esempio, i processi del server delle applicazioni (come i server Web) devono essere in grado di gestire le connessioni da più di un client, o il World Wide Web sarebbe praticamente inutilizzabile. Poiché la connessione viene identificata utilizzando sia il socket del client che il server, questo non è un problema. Allo stesso tempo che il server Web mantiene la connessione menzionata appena sopra, può facilmente avere un'altra connessione da dire, porta 2.199 all'indirizzo IP 219.31.0.44. Questo è rappresentato dalla identificatore di connessione:

(41.199.222.3:80, 219.31.0.44:2199). 

In realtà, siamo in grado di avere più connessioni dallo stesso client allo stesso server. Ad ogni processo client verrà assegnato un numero di porta effimero diverso, quindi anche se tutti provano ad accedere allo stesso processo del server (come il processo del server Web 41.199.222.380), avranno tutti un socket client diverso e rappresenteranno univoco connessioni. Questo è ciò che ti permette di fare diverse richieste simultanee allo stesso sito Web dal tuo computer.

Ancora una volta, TCP tiene traccia di ciascuna di queste connessioni in modo indipendente, in modo che ciascuna connessione non sia a conoscenza delle altre. TCP può gestire centinaia o addirittura migliaia di connessioni simultanee. L'unico limite è la capacità del computer che esegue TCP e la larghezza di banda delle connessioni fisiche ad esso: più connessioni sono in esecuzione contemporaneamente, più ognuno deve condividere risorse limitate.

+3

Citazione di scarsa qualità, totalmente confusa tra prese e porte. Le connessioni sono identificate da indirizzo IP e * porte, * non da prese. – EJP

9

Una porta è solo un numero magico. Non corrisponde ad un pezzo di hardware. Il server apre un socket che 'ascolta' alla porta 80 e 'accetta' nuove connessioni da quel socket. Ogni nuova connessione è rappresentata da un nuovo socket la cui porta locale è anche la porta 80, ma la cui porta ip: è uguale a quella del client che ha effettuato la connessione. Quindi non si confondono. Pertanto, non è necessario disporre di più indirizzi IP o di più porte sul server.

+0

Questa è anche una buona risposta in combinazione con la 1a risposta. –

+0

@ManoharReddyPoreddy Meglio, in quanto meno non ha la confusione che ho menzionato. – EJP

+0

D'accordo, tuttavia ha più informazioni che sono rilevanti, come "L'unico limite è la capacità del computer che esegue TCP e la larghezza di banda delle connessioni fisiche ad esso", quindi suggerirei a qualcuno di rendere la tua risposta il 1 °, e quindi la prima risposta ora per essere il 2 °. –

0

risposta è: host virtuali, in HTTP Header è il nome del dominio in modo che il web server sapere quali file eseguire o inviare al cliente

+1

Niente nella domanda su più domini. – EJP

2

TCP si occupa di identificazione del cliente
Come pm said, TCP si occupa dell'identificazione del client e il server vede solo un "socket" per client.
Supponiamo che un server alla 10.10.100.100 ascolti la porta 80 per le connessioni TCP in entrata (HTTP è costruito su TCP). Il browser di un client (alla 10.9.8.7) si connette al server utilizzando la porta client 27143. Il server vede: "il client 10.9.8.7:27143 vuole connettersi, accettate?". L'app server accetta e riceve un "handle" (un socket) per gestire tutte le comunicazioni con questo client e l'handle invierà sempre i pacchetti a 10.9.8.7:27143 con le intestazioni TCP appropriate.

pacchetti sono mai simultanea
Ora, fisicamente, v'è generalmente solo connessioni uno (o due) che collegano al server di internet, quindi i pacchetti possono arrivare solo in ordine sequenziale. La domanda diventa: qual è il massimo throughput attraverso la fibra e quante risposte il server può calcolare e inviare in cambio. A parte il tempo impiegato dalla CPU oi colli di bottiglia della memoria durante la risposta alle richieste, il server deve anche mantenere alcune risorse attive (almeno 1 socket attivo per client) fino a quando la comunicazione non è terminata, e quindi consumare RAM. La velocità effettiva viene raggiunta tramite alcune ottimizzazioni (non esclusive a vicenda): socket non bloccanti (per evitare latenze pipeline/socket), multi-threading (per utilizzare più core/thread della CPU).

Miglioramento della richiesta di throughput ulteriormente: equilibrare
E per ultimo, il server sul "front-side" di siti web in genere non fare tutto il lavoro da soli (in particolare la roba più complicata, come l'esecuzione di query di database di carico, i calcoli ecc.) e rinviare le attività o inoltrare le richieste HTTP ai server distribuiti, mentre continuano a gestire banalmente (ad es. inoltro) quante più richieste al secondo possono. La distribuzione del lavoro su più server è denominata bilanciamento del carico.