2008-09-16 29 views
8

Al escribir un servidor personalizado, ¿cuáles son las mejores prácticas o técnicas para determinar la cantidad máxima de usuarios que pueden conectarse al servidor en un momento dado?¿Cuántas conexiones de red puede soportar una computadora?

Supongo que las capacidades del hardware de la computadora, la capacidad de la red y el protocolo del servidor serían todos factores importantes.

Además, ¿cree que es una buena práctica limitar el número de conexiones de red a un cierto número máximo de usuarios? ¿O debería el servidor no limitar el número de conexiones de red y dejar que el rendimiento se degrade hasta que el tiempo de respuesta sea extremadamente alto?

Respuesta

7

Dan Kegel armar un resumen de las técnicas para el manejo de grandes cantidades de conexiones de red desde un único servidor, aquí: http://www.kegel.com/c10k.html

+0

Ese papel se ve muy viejo (1999) y no es realmente hasta la fecha. Por ejemplo, el ulimit en Linux (al menos Ubuntu) se establece en ilimitado ... ¿entonces probablemente no sea necesario establecerlo en 32768? –

5

En general, los servidores modernos pueden manejar un gran número de conexiones simultáneas. He trabajado en sistemas que tienen más de 8,000 sockets TCP/IP abiertos simultáneamente.

Necesitará una interfaz de servicio de alta calidad para manejar ese tipo de carga, consulte libevent o libev.

0

Uno de los mayores reveses en las conexiones de concurrencia alta es en realidad los enrutadores involucrados. Los enrutadores orientados al usuario doméstico generalmente tienen una pequeña tabla NAT, lo que impide que el enrutador realmente atienda las conexiones del servidor.

Asegúrese de investigar también la configuración de su enrutador/infraestructura de red.

0

Creo que no debe limitar el número de conexiones que su servidor le permitirá, solo atrape y maneje adecuadamente cualquier excepción que pueda ocurrir al aceptar y cerrar conexiones y usted debería estar bien. Deberías dejar ese tipo de programación de nivel inferior en las capas del sistema operativo subyacentes, de esa manera puedes portar tu servidor más fácilmente.

0

Esto realmente depende de tu sistema operativo.

Diferentes versiones de Unix apoyarán número "ilimitado" de manejadores de archivos/zócalos otros tienen valores altos como 32768.

Un usuario típico límite es 8192, pero por lo general pueden ser mayores.

Creo que Windows es más limitante, pero la versión del servidor puede tener límites más altos.

4

Esa es una buena pregunta y definitivamente es situacional. ¿Cuál es tu computadora? ¿Tiene una máquina de 4 sockets con Quad Core Xeon, 128 GB de RAM y conectividad Fibre Channel (como el par de Dell R900 que acabamos de comprar)? ¿O está ejecutando un p3 550 con 256 MB de RAM y un módem de 56K? ¿Cuánta carga tiene cada conexión en su servidor? ¿Qué tipo de respuesta es aceptable?

Estas son las preguntas que necesita responder. Supongo que la mejor forma de encontrar la respuesta es a través de la prueba de carga. Cree una prueba unitaria de las rutas esperadas (y quizás algunas inesperadas) que su código realizará contra su servidor. Encuentre un marco de prueba de carga que le permita simular 10, 100, 1000, 10000 usuarios que realizan esas tareas al mismo tiempo.

Eso le indicará cuántas conexiones puede admitir su computadora.

Lo bueno del escenario de prueba de carga/unidad es que puede poner en las expectativas de tiempo de respuesta en las pruebas de su unidad y aumentar la carga hasta que caiga fuera de su tiempo de respuesta. Si tiene un requisito de admitir X número de usuarios con una segunda respuesta Y, podrá demostrarlo con sus pruebas de carga.

Cuestiones relacionadas