Websocket est bon, mais serait-il capable de gérer 1 000 000 de connexions simultanées?
Combien de ressources système seront conservées pour garder 1 000 000 Websocket ouverts?
Réponse mise à jour
Réponse courte : oui, mais c'est cher.
Réponse longue :
Cette question n’est pas propre aux WebSockets, car celles-ci ont une longue durée de vie TCP sockets avec une négociation de type HTTP et un encadrement minimal des messages.
La vraie question est la suivante: un seul serveur peut-il gérer 1 000 000 de connexions socket simultanées et quelles ressources serveur cela consomme-t-il? La réponse est compliquée par plusieurs facteurs, mais 1 000 000 connexions de socket actives simultanées sont possibles pour un système correctement dimensionné (beaucoup de CPU, RAM et réseau rapide)) et avec un système de serveur optimisé et un logiciel de serveur optimisé .
Le nombre de connexions n’est pas le principal problème (il s’agit principalement d’une question d’ajustement du noyau et de suffisamment de mémoire), 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 généralement inactives ou envoient rarement de petites quantités 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 principalement 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 à propos de l'utilisation approximative des ressources pour 500 000 connexions.
Voici quelques ressources plus anciennes, mais toujours applicables, sur la façon de configurer votre serveur et d'écrire votre logiciel serveur pour prendre en charge un grand nombre de connexions:
Sur les systèmes actuels, gérer 1 million de connexions simultanées TCP n'est pas un problème.
Je peux affirmer cela sur la base de nos propres tests (divulgation complète: je suis le CTO de Lightstreamer).
Nous avons dû démontrer à plusieurs reprises, à certains de nos clients, qu’un million de connexions peuvent être atteintes sur une seule boîte (et pas nécessairement une machine super-monstre). Mais permettez-moi de récapituler la configuration dans laquelle nous avons testé 500 000 connexions simultanées, car il s'agit d'un test beaucoup plus récent effectué sur Amazon EC2.
Nous avons installé Lightstreamer Server (un serveur WebSocket, entre autres) sur une instance m2.4xlarge. Cela signifie 8 cœurs et 68.4 GiB de la mémoire.
Nous avons lancé 11 ordinateurs clients pour créer 500 000 connexions simultanées au serveur Lightstreamer. Le test a été configuré pour que le débit sortant total du serveur soit de 90 000 mises à jour/s, ce qui donne des pics de bande passante sortante de 450 Mbit/s.
Le serveur n'a jamais utilisé plus de 13 GiB de RAM et le processeur était stable autour de 60%).
Avec au moins 30 GiB RAM, vous pouvez gérer 1 million de sockets simultanées. Le processeur requis dépend du débit de données dont vous avez besoin.