2013-07-03 15 views

risposta

37

risposta Aggiornato

Risposta breve: sì, ma è costoso.

Risposta lunga:

Questa domanda non riguardano solo WebSockets dal WebSockets sono fondamentalmente socket TCP longevi con una stretta di mano HTTP-like e inquadramento minimo per i messaggi.

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

Il numero di connessioni non è il problema principale (che è principalmente solo una questione di ottimizzazione del kernel e memoria sufficiente), è l'elaborazione e l'invio/ricezione di dati a/da ciascuna di tali connessioni. Se le connessioni in entrata sono distribuite su un lungo periodo e sono per lo più inattive o inviano di frequente piccoli blocchi di dati statici, è probabile che si ottenga molto più in alto di anche 1.000.000 di connessioni simultanee. Tuttavia, anche in queste condizioni (connessioni lente che sono in gran parte inattive) si incontrano ancora problemi con reti, sistemi server e librerie server che non sono configurate e progettate per gestire un numero elevato di connessioni.

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

Ecco alcune risorse più anziani, ma ancora applicabili a leggere su come si dovrebbe configurare il server e scrivere il software del server per supportare un gran numero di connessioni:

91

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

Posso affermare che in base ai nostri test (divulgazione completa: I am the CTO presso 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 permettetemi di ricapitolare la configurazione in cui abbiamo testato connessioni concomitanti 500K, 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 di memoria GiB.

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 un conseguente picco di larghezza di banda in uscita di 450 Mbit/s.

Il server non ha mai utilizzato più di 13 GB di RAM e la CPU era stabile attorno al 60%.

Con almeno 30 RAM GiB è possibile gestire 1 milione di prese simultanee. La CPU necessaria dipende dal throughput di dati di cui hai bisogno.

+4

Sto assumendo che questo fosse un po 'il sapore di Linux. Potresti per favore condividere informazioni aggiuntive su come è stato sintonizzato il kernel? max descrittori di file/dimensioni della finestra tcp ecc.? – quixver

+9

Era vanilla Amazon Linux. I descrittori di file massimi sono stati aumentati. Il buffer di invio TCP è stato ridotto a 1600 byte (fatto per impostazione predefinita da Lightstreamer, sebbene possa essere regolato manualmente). MSS era predefinito. –

+0

Questo software è completamente gratuito o richiede un costo aggiuntivo per utilizzarlo? –

Problemi correlati