Pregunta

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?

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

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

¿Fue útil?

Solución

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

Otros consejos

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 liberal o libev.

Esa es una buena pregunta y definitivamente es situacional.¿Cuál es tu computadora?¿Tiene una máquina de 4 sockets con Quad Core Xeons, 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 coloca cada conexión en su servidor?¿Qué tipo de respuesta es aceptable?

Estas son las preguntas que debes responder.Supongo que la mejor manera de encontrar la respuesta es mediante pruebas de carga.Cree una prueba unitaria de las rutas esperadas (y tal vez algunas inesperadas) que su código realizará en su servidor.Encuentre un marco de prueba de carga que le permita simular 10, 100, 1000, 10000 usuarios realizando esas tareas al mismo tiempo.

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

Lo mejor del escenario de prueba de carga/unidad es que puede incluir expectativas de tiempo de respuesta en sus pruebas unitarias y aumentar la carga hasta que quede fuera de su tiempo de respuesta.Si tiene el requisito de admitir una cantidad X de usuarios con Y segunda respuesta, podrá demostrarlo con sus pruebas de carga.

Uno de los mayores inconvenientes de las conexiones de alta concurrencia son los enrutadores involucrados.Los enrutadores orientados al usuario doméstico generalmente tienen una pequeña tabla NAT, lo que impide que el enrutador realmente proporcione servicio a las conexiones del servidor.

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

Creo que no debería limitar la cantidad de conexiones que permitirá su servidor; simplemente detecte y maneje adecuadamente cualquier excepción que pueda ocurrir al aceptar y cerrar conexiones y todo estará bien.Debería dejar ese tipo de programación de nivel inferior a las capas subyacentes del sistema operativo; de esa manera, podrá transferir su servidor más fácilmente, etc.

Esto realmente depende de su sistema operativo.

Diferentes versiones de Unix admitirán un número "ilimitado" de identificadores/sockets de archivos, otros tienen valores altos como 32768.

Un límite de usuarios típico es 8192, pero normalmente se puede establecer más alto.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top