2008-09-16 8 views
8

Lors de l'écriture d'un serveur personnalisé, quelles sont les meilleures pratiques ou techniques pour déterminer le nombre maximum 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 du serveur seraient tous des facteurs importants.Combien de connexions réseau un ordinateur peut-il prendre en charge?

En outre, pensez-vous qu'il est recommandé de limiter le nombre de connexions réseau à un certain nombre maximal 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é?

Répondre

7

Dan Kegel mis en place un résumé des techniques de manipulation de grandes quantités de connexions réseau à partir d'un seul serveur, ici: http://www.kegel.com/c10k.html

+0

Ce document ressemble vraiment vieux (1999) et pas vraiment à jour. Par exemple, l'ulimit sous Linux (au moins Ubuntu) est défini sur illimité ... donc le paramétrer sur 32768 n'est probablement pas nécessaire? –

5

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 ayant plus de 8 000 sockets TCP/IP ouverts simultanément.

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

0

L'un des plus grands revers dans les connexions haute simultanéité est en réalité les routeurs impliqués. Les routeurs orientés utilisateurs ont généralement une petite table NAT, ce qui empêche le routeur d'entretenir les connexions du serveur.

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

0

Je pense que vous ne devriez pas limiter le nombre de connexions que votre serveur autorisera - il vous suffit d'attraper et de gérer correctement les exceptions qui pourraient survenir lors de l'acceptation et de la fermeture des connexions et ça devrait aller. Vous devriez laisser ce type de programmation de niveau inférieur aux couches de système d'exploitation sous-jacentes - de cette façon, vous pouvez plus facilement porter votre serveur, etc.

0

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

Différentes saveurs Unix soutiendront nombre « illimité » de descripteurs de fichiers/prises d'autres ont de grandes valeurs telles que 32768.

Une limite d'utilisation typique est 8192, mais il peut généralement être plus élevé.

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

4

C'est une bonne question et c'est certainement situationnel. Quel est votre ordinateur? Avez-vous une machine à 4 sockets remplie de Quad Core Xeons, de 128 Go de RAM et d'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? Combien de charge chaque connexion place-t-elle sur votre serveur? Quel genre de réponse est acceptable?

Voici les questions auxquelles vous devez répondre. Je suppose que la meilleure façon de trouver la réponse est de tester la charge. Créez un test unitaire des chemins attendus (et peut-être inattendus) que votre code va exécuter 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 supporter. La grande chose à propos du scénario de test de charge/unité est que vous pouvez mettre dans les attentes de temps de réponse dans vos tests unitaires et augmenter la charge jusqu'à ce que vous tombiez en dehors de votre temps de réponse. Si vous avez besoin de prendre en charge X nombre d'utilisateurs avec une deuxième réponse Y, vous serez en mesure de le démontrer avec vos tests de charge.

Questions connexes