2016-04-04 36 views
9

Per implementare un bot lento, ho bisogno di gestire l''API di Real Time Messaging'. È un'API basata su WebSocket che consente di ricevere eventi da Slack in tempo reale e inviare messaggi come utente. maggiori info: https://api.slack.com/rtmCome ridimensionare un bot inattivo a migliaia di team

Per creare un bot solo una squadra, ho bisogno di aprire una connessione websocket e ascoltare per eventi.

Per rendere disponibile il robot lento per un'altra squadra. Devo aprire una nuova connessione websocket . Così,

  • 1 squadra di connessione => 1 websocket connessioni
  • 2 squadre => 2 websocket
  • connessioni
  • N squadre => N websocket

cosa devo fare per scalare il mio websocket connessioni per squadre infinite?

Che tipo di architettura è in grado di gestire la scalabilità automatica di migliaia di connessioni Websockets?

risposta

7

Con prese di allentamento, hai un sacco di cose da scala:

  • Numero di prese. Questo è facile perché anche server economici possono gestire migliaia di socket, come più di 50k. Ma ogni socket rappresenta un paio di altri tipi di carico, elencati di seguito.
  • Quantità di memoria utilizzata per team, che dipende dall'implementazione del proprio server. Se si sta tentando di conservare una grande quantità di cronologia dei messaggi in memoria, si raggiungerà il limite del server più rapidamente rispetto a quando il codice di elaborazione dei messaggi è in qualche modo stateless.
  • Quantità di I/O, che potrebbe rendere necessario scaricare l'immagine che serve a un bilanciamento del carico separato.

L'altra cosa da considerare è la tolleranza di errore. Supponiamo che il bilanciamento del carico sia appiccicoso e che uno dei tuoi server gestisca 50 team. Quel server è l'unico a gestire quei 50 team, quindi se va giù, tutti i 50 bot sono offline. In alternativa, è possibile aprire più socket per team su server separati e utilizzare una coda di gestione dei messaggi in modo che ogni messaggio risponda a una sola volta.

Quindi l'architettura che vorrei proporre è un sistema di bilanciamento del carico ridondante e ridondante per i socket RTM come primo livello e una coda di messaggi affidabile al di sotto di questo.

+0

È vero che Node può gestire molti socket simultanei ma la latenza diventa più imprevedibile su scala. Se si dispone di un codice sensibile alle prestazioni, vale la pena utilizzare una sorta di sistema di clustering per uniformare il carico su più processi, quindi un blip a breve termine in uno non blocca il tutto. – tadman

Problemi correlati