176 votes

Combien de ressources système seront utilisées pour maintenir 1 000 000 de websocket ouvertes ?

Websocket, c'est bien, mais serait-il capable de gérer 1 000 000 de connexions simultanées ?
Combien de ressources système seront utilisées pour maintenir 1 000 000 de websocket ouvertes ?

246voto

Alessandro Alinone Points 1245

Sur les systèmes actuels, la gestion d'un million de connexions TCP simultanées n'est pas un problème.

Je peux l'affirmer en me basant sur nos propres tests (pour tout vous dire, je suis le directeur technique de Lightstreamer).

Nous avons dû démontrer plusieurs fois, à certains de nos clients, qu'il est possible d'atteindre 1 million de connexions sur une seule boîte (et pas nécessairement une machine super-monstre). Mais laissez-moi récapituler la configuration où nous avons testé 500K connexions simultanées, car il s'agit d'un test beaucoup plus récent réalisé sur Amazon EC2.

Nous avons installé Lightstreamer Server (qui est un serveur WebSocket, entre autres choses) sur une instance m2.4xlarge. Cela signifie 8 cœurs et 68,4 Go 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 manière à ce que le débit total sortant du serveur soit de 90 000 mises à jour/s, ce qui donne des pointes de 450 Mbit/s de largeur de bande sortante.

Le serveur n'a jamais utilisé plus de 13 Go de RAM et le CPU est resté stable autour de 60 %.

Avec au moins 30 Go 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.

92voto

kanaka Points 23143

Réponse actualisée

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

Réponse longue :

Cette question n'est pas propre 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 la suivante : un seul serveur pourrait-il gérer 1 000 000 de connexions simultanées par socket et quelles ressources serveur cela consommerait-il ? La réponse est compliquée par plusieurs facteurs, mais 1 000 000 de connexions actives simultanées par socket est possible pour un système correctement dimensionné (beaucoup de CPU, de RAM et un 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 surtout 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 réparties sur une longue période, et qu'elles sont pour la plupart inactives ou n'envoient que rarement de petits morceaux de données statiques, alors vous pouvez probablement obtenir beaucoup plus que 1 000 000 de connexions simultanées. Toutefois, même dans ces conditions (connexions lentes et en grande partie 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 concernant l'utilisation approximative des ressources pour 500 000 connexions.

Voici quelques ressources plus anciennes mais toujours d'actualité à lire sur la façon de configurer votre serveur et d'écrire votre logiciel de serveur pour prendre en charge un grand nombre de connexions :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X