piccola discussione in chat #linux-it@irc.freenode.net
mi sono sempre chiesto... cosa accade sui server raiplay.it (ad esempio) quando 10mila persone si connettono contemporaneamente?
si aprono 10000 porte ai 10000 ip ?
sacarde: normalmente si fa multiplexing su un'unica porta. Ah, gli IP dei client sono pubblici.
multiplexing: accetti N connessioni su un'unica porta la connessione è identificata da ip locale, porta locale, ip remoto, porta remota
e' il sistema operativo che fa questo?
sacarde: sì sacarde: identificare le connessioni, sì
anche linux?
ovviamente sì pensa a un web server: accetta N connessioni sulla porta 80
anche migliaia?
anche milioni, il limite è la RAM tanto tempo fa WhatsApp aveva mostrato che gestiva oltre un milione di client con un solo server
ah
https://blog.whatsapp.com/on-e-millio-n [otr] sacarde: la chiave per scalare così è avere un unico processo che gestisce tutte le connessioni, anziché avere un processo (con la sua RAM) per ciascuna connessione
se fai un netstat ... vedi migliaia di trasmissioni CONNECTED ?
sì ESTABLISHED sacarde: https://en.wikipedia.org/wiki/C10k_problem [otr] prossimo passo "come faccio a eliminare tutte quelle connessioni in TIME_WAIT"? ;-) sacarde: ci sono alcuni limiti artificiali che il sistema operativo impone per evitare l'esaurimento delle risorse. Normalmente sui server questi limiti sono configurati in modo da non impedire di accettare migliaia/milioni/whatever di connessioni.
e se quei 10000 vogliono vedere 10000film diversi?
sacarde: a ciascuno* __lore__ è ora conosciuto come _lore_ mandi quello che chiede, ovviamente. Il processo server legge i vari file e su ciascun socket manda quello che l'utente ha richiesto le connessioni hanno tutte contenuti diversi e indipendenti tra loro
pensavo ai dati sugli HDD diversi... boh
ogni HDD può contenere tanti file, no? ogni processo può leggere tanti file, anche da "HDD" (filesystem) diversi e' la contemporaneita che mi sconvolge... metti che lo stesso film viene chiesto a distanza di 10 minuti da 10 persone
nel corso degli anni sono emersi e sono stati risolti vari problemi, ovviamente. Per esempio una volta i server usavano un processo per ogni client e tendevano a esaurire la RAM. Oppure certi sistemi caricavano in memoria tutto un file (o una porzione molto grande) prima di trasmetterlo al client (alcune JVM)
sacarde: il processo server leggerà il file 10 volte
sacarde: ovviamente tu immagini che sia servito tutto da un server unico cosa che non è ovviamente vera esistono dei dispositivi davanti che smistano il traffico tra più server Load Balancer quindi 100000 utenti potrebbero essere serviti magari ognuno da un server diverso
utente2: questo è poco rilevante: sacarde si stupiva del fatto che un singolo server può gestire N client
Vale anche per il load balancer. |