Combien de ressources système seront conservées pour maintenir 1 000 000 websocket ouverts? [fermé]

122

Websocket est bon, mais serait-il capable de gérer 1 000 000 connexions simultanées?
Combien de ressources système seront conservées pour maintenir 1 000 000 websocket ouverts?

kk lou
la source

Réponses:

65

Réponse mise à jour

Réponse courte : oui, mais c'est cher.

Réponse longue :

Cette question n'est pas unique aux WebSockets puisque les WebSockets sont fondamentalement des sockets TCP à longue durée de vie avec une poignée de main de type HTTP et un encadrement minimal des messages.

La vraie question est: un seul serveur pourrait-il gérer 1 000 000 connexions socket simultanées et quelles ressources serveur cela consommerait-il? La réponse est compliquée par plusieurs facteurs, mais 1 000 000 de connexions de socket actives simultanées sont possibles pour un système correctement dimensionné (beaucoup de CPU, de RAM et de mise en réseau rapide) et avec un système de serveur réglé et un logiciel de serveur optimisé.

Le nombre de connexions n'est pas le problème principal (c'est principalement juste une question de réglage du noyau et de mémoire suffisante), c'est le traitement et l'envoi / la réception de données vers / depuis chacune de ces connexions. Si les connexions entrantes sont étalées sur une longue période et qu'elles sont pour la plupart inactives ou envoient rarement de petits morceaux de données statiques, vous pourriez probablement obtenir beaucoup plus que 1 000 000 de connexions simultanées. Cependant, même dans ces conditions (connexions lentes qui sont pour la plupart inactives), vous rencontrerez toujours des problèmes avec les réseaux, les systèmes de serveurs et les bibliothèques de serveurs qui ne sont pas configurés et conçus pour gérer un grand nombre de connexions.

Voir la réponse d'Alessandro Alinone sur l'utilisation approximative des ressources pour 500 000 connexions.

Voici quelques ressources plus anciennes mais toujours applicables à lire sur la façon dont vous configureriez votre serveur et écrivez votre logiciel serveur pour prendre en charge un grand nombre de connexions:

Kanaka
la source
1
Apparemment, 12 millions de connexions socket sont possibles sur une seule JVM. Voyez comment ils l'ont fait mrotaru.wordpress.com/2013/10/10/…
Jacques Koorts
@JacquesKoorts thx
BG BRUNO
159

Sur les systèmes actuels, gérer 1 million de connexions TCP simultanées n'est pas un problème.

Je peux affirmer cela sur la base de nos propres tests (divulgation complète: je suis le CTO chez Lightstreamer).

Nous avons dû démontrer à plusieurs reprises, à certains de nos clients, que 1 million de connexions peuvent être atteintes sur une seule box (et pas forcément une machine super-monstre). Mais permettez-moi de récapituler la configuration dans laquelle nous avons testé 500K connexions simultanées, car il s'agit d'un test beaucoup plus récent effectué sur Amazon EC2.

Nous avons installé Lightstreamer Server (qui est un serveur WebSocket, entre autres) sur une instance m2.4xlarge. Cela signifie 8 cœurs et 68,4 Gio de mémoire.

Nous avons lancé 11 machines clientes pour créer 500 000 connexions simultanées au serveur Lightstreamer. Le test a été configuré de sorte que le débit sortant total du serveur soit de 90 000 mises à jour / s, ce qui entraîne des pics de bande passante sortante de 450 Mbit / s.

Le serveur n'a jamais utilisé plus de 13 Gio de RAM et le processeur était stable à environ 60%.

Avec au moins 30 Gio de RAM, vous pouvez gérer 1 million de sockets simultanés. Le processeur nécessaire dépend du débit de données dont vous avez besoin.

Alessandro Alinone
la source
7
Je suppose que c'était une sorte de linux. Pourriez-vous s'il vous plaît partager des informations supplémentaires sur la façon dont le noyau a été réglé? descripteurs de fichier max / tailles de fenêtre tcp etc?
quixver
14
C'était Amazon Linux vanille. Le nombre maximal de descripteurs de fichiers a été augmenté. Le tampon d'envoi TCP a été réduit à 1600 octets (effectué par défaut par Lightstreamer, bien qu'il puisse être réglé manuellement). MSS était la valeur par défaut.
Alessandro Alinone
Ce logiciel est-il entièrement gratuit ou nécessite-t-il des frais pour l'utiliser?
Avtandil Kavrelishvili
@AvtandilKavrelishvili: Il existe à la fois une édition gratuite et une édition payante.
Alessandro Alinone
Serait-ce plus facile sur le serveur si, au lieu des Websockets, j'utilisais un sondage régulier?
mFeinstein