El problema C10k es el problema de optimizar los sockets de red para manejar una gran cantidad de clientes al mismo tiempo. [1] El nombre C10k es un numerónimo para manejar simultáneamente diez mil conexiones. [2] Manejar muchas conexiones simultáneas es un problema diferente de manejar muchas solicitudes por segundo : este último requiere un alto rendimiento (procesarlas rápidamente), mientras que el primero no tiene que ser rápido, pero requiere una programación eficiente de las conexiones.
El problema de la optimización de servidores de sockets se ha estudiado porque se deben tener en cuenta varios factores para permitir que un servidor web admita muchos clientes. Esto puede implicar una combinación de restricciones del sistema operativo y limitaciones del software del servidor web. Según el alcance de los servicios que se van a ofrecer y las capacidades del sistema operativo, así como las consideraciones de hardware, como las capacidades de multiprocesamiento, se puede preferir un modelo de subprocesos múltiples o un modelo de subproceso único . Al mismo tiempo que este aspecto, que implica consideraciones sobre la gestión de memoria (normalmente relacionada con el sistema operativo), las estrategias implicadas se relacionan con los muy diversos aspectos de la gestión de E/S. [2]
El término C10k fue acuñado en 1999 por el ingeniero de software Dan Kegel, [3] [4] citando al host FTP de Simtel , cdrom.com , que atendía a 10 000 clientes a la vez a través de Ethernet de 1 gigabit por segundo en ese año. [1] Desde entonces, el término se ha utilizado para el problema general de una gran cantidad de clientes, con numerónimos similares para una mayor cantidad de conexiones, el más reciente "C10M" en la década de 2010 para referirse a 10 millones de conexiones simultáneas. [5]
A principios de la década de 2010, se hicieron posibles millones de conexiones en un único servidor de montaje en rack 1U: más de 2 millones de conexiones ( WhatsApp , 24 núcleos, utilizando Erlang en FreeBSD ) [6] [7] y entre 10 y 12 millones de conexiones (MigratoryData, 12 núcleos, utilizando Java en Linux ). [5] [8]
Las aplicaciones comunes de un número muy elevado de conexiones incluyen servidores públicos generales que tienen que atender a miles o incluso millones de usuarios a la vez, como servidores de archivos , servidores FTP , servidores proxy , servidores web y balanceadores de carga . [9] [5]
Hace unos diez años, Daniel Kegel, un destacado ingeniero de software, … Manifiesto C10K de Kegel… resolviendo el problema C10K de 10.000 conexiones simultáneas,
nginx
…
Y las computadoras también son grandes. Puedes comprar una máquina de 500 MHz con 1 gigabyte de RAM y seis tarjetas Ethernet de 100 Mbit/seg por unos 3000 dólares. Veamos: con 10 000 clientes, eso es 50 KHz, 100 Kbytes y 60 Kbits/seg por cliente. No debería hacer falta más potencia que eso para sacar cuatro kilobytes del disco y enviarlos a la red una vez por segundo para cada uno de los diez mil clientes. (Eso equivale a 0,30 dólares por cliente, por cierto. ¡Esos honorarios de licencia de 100 dólares por cliente que cobran algunos sistemas operativos están empezando a parecer un poco elevados!) Así que el hardware ya no es el cuello de botella.
Esta vez también queríamos compartir con ustedes algunos detalles más técnicos sobre hardware, SO y software: hw.machine: amd64 hw.model: Intel(R) Xeon(R) CPU X5675 @ 3.07GHz hw.ncpu: 24 hw.physmem: 103062118400 hw.usermem: 100556451840