Quante risorse di sistema verranno trattenute per mantenere aperto 1.000.000 di websocket? [chiuso]


122

Websocket è buono, ma sarebbe in grado di gestire 1.000.000 di connessioni simultanee?
Quante risorse di sistema verranno trattenute per mantenere aperto 1.000.000 di websocket?

Risposte:


65

Risposta aggiornata

Risposta breve : sì, ma è costoso.

Risposta lunga :

Questa domanda non è unica per i WebSocket poiché i WebSocket sono socket TCP fondamentalmente di lunga durata con un handshake simile a HTTP e un frame minimo per i messaggi.

La vera domanda è: un singolo server potrebbe gestire 1.000.000 di connessioni socket simultanee e quali risorse del server consumerebbe? La risposta è complicata da diversi fattori, ma 1.000.000 di connessioni socket attive simultanee sono possibili per un sistema di dimensioni adeguate (molta CPU, RAM e rete veloce) e con un sistema server ottimizzato e software server ottimizzato.

Il numero di connessioni non è il problema principale (questa è principalmente solo una questione di ottimizzazione del kernel e memoria sufficiente), è l'elaborazione e l'invio / la ricezione di dati a / da ciascuna di queste connessioni. Se le connessioni in entrata sono distribuite su un lungo periodo e sono per lo più inattive o inviano raramente piccoli blocchi di dati statici, potresti probabilmente ottenere molto più di 1.000.000 di connessioni simultanee. Tuttavia, anche in queste condizioni (connessioni lente che sono per lo più inattive) si verificheranno comunque problemi con reti, sistemi server e librerie server che non sono configurati e progettati per gestire un gran numero di connessioni.

Vedi la risposta di Alessandro Alinone sull'utilizzo approssimativo delle risorse per 500.000 connessioni.

Di seguito sono riportate alcune risorse meno recenti ma ancora applicabili per leggere come configurare il server e scrivere il software del server per supportare un gran numero di connessioni:


1
Apparentemente sono possibili 12 milioni di connessioni socket su una singola JVM. Guarda come hanno fatto mrotaru.wordpress.com/2013/10/10/…
Jacques Koorts

@JacquesKoorts thx
BG BRUNO

159

Sui sistemi odierni, la gestione di 1 milione di connessioni TCP simultanee non è un problema.

Posso affermarlo sulla base dei nostri test (divulgazione completa: sono il CTO di Lightstreamer).

Abbiamo dovuto dimostrare più volte, ad alcuni dei nostri clienti, che 1 milione di connessioni può essere raggiunto su una singola scatola (e non necessariamente una macchina super-mostro). Ma lasciatemi ricapitolare la configurazione in cui abbiamo testato 500.000 connessioni simultanee, poiché si tratta di un test molto più recente eseguito su Amazon EC2.

Abbiamo installato Lightstreamer Server (che è un server WebSocket, tra le altre cose) su un'istanza m2.4xlarge. Ciò significa 8 core e 68,4 GiB di memoria.

Abbiamo lanciato 11 macchine client per creare 500.000 connessioni simultanee al server Lightstreamer. Il test è stato configurato in modo che il throughput totale in uscita dal server fosse di 90.000 aggiornamenti / s, con conseguenti picchi di larghezza di banda in uscita di 450 Mbit / s.

Il server non ha mai utilizzato più di 13 GiB di RAM e la CPU è rimasta stabile intorno al 60%.

Con almeno 30 GiB di RAM puoi gestire 1 milione di socket simultanei. La CPU necessaria dipende dalla velocità di trasmissione dati necessaria.


7
Suppongo che questo fosse un po 'di linux. Potresti condividere ulteriori informazioni su come è stato ottimizzato il kernel? max descrittori di file / dimensioni della finestra tcp ecc.?
quixver

14
Era Amazon Linux vanigliato. Il numero massimo di descrittori di file è stato aumentato. Il buffer di invio TCP è stato ridotto a 1600 byte (fatto di default da Lightstreamer, sebbene possa essere regolato manualmente). MSS era l'impostazione predefinita.
Alessandro Alinone

Questo software è completamente gratuito o necessita di una tariffa per usarlo?
Avtandil Kavrelishvili

@AvtandilKavrelishvili: esistono sia un'edizione gratuita che un'edizione a pagamento.
Alessandro Alinone

Sarebbe più facile sul server se invece dei websocket usassi il polling regolare?
mFeinstein
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.