Question

Lors de l'écriture d'un serveur personnalisé, quelles sont les meilleures pratiques ou techniques pour déterminer le nombre maximal d'utilisateurs pouvant se connecter au serveur à un moment donné?

Je suppose que les capacités du matériel informatique, de la capacité du réseau et du protocole de serveur sont des facteurs importants.

Aussi, pensez-vous qu’il est judicieux de limiter le nombre de connexions réseau à un certain nombre maximum d’utilisateurs? Ou le serveur ne devrait-il pas limiter le nombre de connexions réseau et laisser les performances se dégrader jusqu'à ce que le temps de réponse soit extrêmement élevé?

Était-ce utile?

La solution

Dan Kegel a élaboré un résumé des techniques permettant de gérer un grand nombre de connexions réseau à partir d’un seul serveur. http://www.kegel.com/c10k.html

Autres conseils

En général, les serveurs modernes peuvent gérer un très grand nombre de connexions simultanées. J'ai travaillé sur des systèmes comptant plus de 8 000 sockets TCP / IP simultanément ouverts.

Vous aurez besoin d'une interface de maintenance de haute qualité pour gérer ce type de charge, consultez libevent . ou libev .

C’est une bonne question et c’est vraiment une question de situation. Quel est ton ordinateur? Avez-vous une machine à 4 sockets remplie de Quad Core Xeons, 128 Go de RAM et une connectivité Fibre Channel (comme la paire de Dell R900 que nous venons d’acheter)? Ou utilisez-vous un p3 550 avec 256 Mo de RAM et un modem 56K? Quelle est la charge de chaque connexion sur votre serveur? Quel type de réponse est acceptable?

Ce sont les questions auxquelles vous devez répondre. Je suppose que le meilleur moyen de trouver la réponse consiste à effectuer des tests de charge. Créez un test unitaire des chemins prévus (et peut-être même inattendus) que votre code effectuera sur votre serveur. Trouvez un framework de test de charge qui vous permettra de simuler 10, 100, 1000, 10000 utilisateurs effectuant ces tâches en même temps.

Cela vous indiquera le nombre de connexions que votre ordinateur peut prendre en charge.

L'avantage du scénario de test de charge / unité est que vous pouvez définir les attentes en termes de temps de réponse dans vos tests unitaires et augmenter la charge jusqu'à ce que votre temps de réponse soit dépassé. Si vous souhaitez prendre en charge un nombre X d'utilisateurs avec une réponse Y seconde, vous pourrez le démontrer avec vos tests de charge.

Les routeurs impliqués sont l’un des plus gros problèmes rencontrés dans les connexions à haute concurrence. Les routeurs orientés utilisateur ont généralement une petite table NAT, ce qui l’empêche de desservir le serveur.

Assurez-vous également de bien rechercher la configuration de votre routeur / infrastructure réseau.

Je pense que vous ne devriez pas limiter le nombre de connexions autorisées par votre serveur. Attrapez et gérez correctement toutes les exceptions qui pourraient survenir lors de l'acceptation et de la fermeture de connexions. Vous devriez laisser ce type de programmation de bas niveau aux couches du système d'exploitation sous-jacent - vous pourrez ainsi transférer votre serveur plus facilement, etc.

Cela dépend vraiment de votre système d'exploitation.

Différents types Unix prendront en charge "illimité". nombre de descripteurs de fichier / sockets que d’autres ont des valeurs élevées telles que 32768.

Une limite d'utilisateur typique est 8192, mais elle peut généralement être définie plus haut.

Je pense que Windows est plus contraignant, mais la version du serveur peut avoir des limites plus élevées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top