2013-11-02 10 views
6

Ho visto 3 post diversi sull'utilizzo di ELB con i websocket, ma sembrano tutti usare i client javascript o avere qualche altra variabile che non si applica alla nostra situazione.È possibile utilizzare Amazon ELB in modalità TCP per distribuire le connessioni Websocket su più server Websocket basati su Tomcat?

Abbiamo più server web socket in esecuzione in Tomcat. Desideriamo li davanti con ELB e hanno tutti i clienti websocket (cioè 100s di 1000s) collegarsi al ELB, che ha la necessità di:

  • avanti la richiesta di aggiornamento/collegamento a 1 dei nostri server websocket
  • poi fare quella connessione appiccicosa in modo che tutto il traffico bidirezionale passi tra lo stesso client e server per tutta la durata della connessione

E 'possibile oggi con ELB? Se possibile, ci sono particolari configurazioni/configurazioni che devono essere fatte? Quali limiti ci sono sul numero di connessioni simultanee supportate da Amazon ELB in modalità TCP?

Abbiamo provato a testarlo in modalità TCP, ma dopo alcune 100 connessioni, le connessioni hanno avuto esito negativo. Se ci colleghiamo direttamente a un singolo server websocket, tuttavia, possiamo stabilire connessioni a websocket 80K (o più).

Grazie, Bob

+0

Probabilmente si desidera esplorare il bilanciamento L4 con la distribuzione appiccicosa basata sull'hash di IP/porta di origine (ad esempio, OpenBSD 'relayd' può farlo). Un L4 LB non consuma (significativo) mem per TCP. Vedi qui: https://forums.aws.amazon.com/thread.jspa?threadID=120775# – oberstet

+0

Un'altra opzione potrebbe essere per i server Web dietro l'ELB per rispondere alla connessione iniziale con l'EIP del server web stesso, quindi il resto della sessione client passa direttamente allo specifico server web. – jarmod

+0

Usa nginx o haproxy invece di ELB? http://johan.heapsource.com/post/31047804966/the-state-of-websockets-ssl-and-sticky-sessions-in – jarmod

risposta

4

In sintesi, quando si collega attraverso ELB si prega di essere a conoscenza di quanto segue:

  • se si prevede un gran numero di connessioni, inviare una richiesta di supporto per EC2 chiedendo loro di "pre-riscaldare" il tuo ELB. Ciò richiede la compilazione di un modulo che fornisca loro la finestra temporale, il numero di connessioni, le dimensioni dei messaggi di richiesta/risposta, la frequenza del msg e alcuni altri parametri. Sotto la cappa, ELB distribuisce macchine in grado di distribuire il carico pianificato attraverso le istanze di backend configurate
  • se le connessioni sono persistenti (come abbiamo richiesto con websockets), è importante sapere che ELB ha un minimo di 1 minuto inattivo tempo scaduto. Dopo tale orario, se non viene rilevato alcun traffico, la connessione viene chiusa. È possibile richiedere che aumentino il tempo a 15 minuti. NOTA: questo è il motivo per cui è importante sfruttare un meccanismo di ping/heartbeat se le connessioni devono essere mantenute aperte più a lungo di quanto consentito da ELB.