2009-11-07 14 views
5

Existen límites impuestos por la memoria disponible, el ancho de banda, la CPU y, por supuesto, la conectividad de la red. Pero a menudo se pueden escalar verticalmente. ¿Hay algún otro factor limitante en Linux? ¿Pueden superarse sin modificaciones al kernel? Sospecho que, si nada más, el factor limitante se convertiría en el gigabit ethernet. Pero para protocolos eficientes, podría tomar 50K conexiones simultáneas para pantanar eso. ¿Se rompería algo más antes de que pudiera llegar tan alto?¿Cuántas conexiones abiertas udp o tcp/ip puede tener una máquina Linux?

Estoy pensando que quiero un udp de software y/o balanceador de carga tcp/ip. Lamentablemente, no parece existir nada parecido en la comunidad de código abierto, a excepción del protocolo http. Pero no está más allá de mis capacidades escribir uno usando epoll. Espero que se someta a muchos ajustes para escalar, pero ese es un trabajo que se puede hacer de forma incremental, y yo sería un mejor programador para ello.

Respuesta

1

Para su pregunta, usted solo está restringido por limitaciones de hardware. Esta fue la filosofía de diseño para los sistemas de Linux. Usted describe exactamente cuáles serían sus factores limitantes.

4

El único parámetro con el que probablemente tenga alguna dificultad es jitter. Si ha escalado el número de conexiones por caja, sin dudas pondrá presión sobre todos los recursos de dicho sistema. Como resultado, el jitter características de la función de reenvío probablemente sufrirá.

Dependiendo de los requisitos de destino, que puede o no ser un problema: si va a apoyar sobre todo elástica tráfico (tráfico que no sufre mucho de fluctuación y latencia) entonces está bien. Si la proporción de tráfico inelástico es alta (por ejemplo, voz interactiva voz/video), entonces esto podría ser más un problema.

Por supuesto puede siempre por encima de ingeniero en este caso ;-)

+0

usted plantea un buen punto sobre jitter y latencia y el efecto sobre el tráfico inelástica – Eloff

+4

haría la persona que rechazó mi post cuidado para explicar? el voto negativo sin comentarios es simplemente grosero. – jldupont

+0

Para TCP, la otra preocupación es la cantidad de datos entrantes. Los datos entrantes ocupan los búferes del kernel hasta que sean procesados ​​por un proceso de usuario. Si su aplicación no procesa la memoria "lo suficientemente rápido", entonces el kernel puede quedarse sin búferes y entrar en pánico. Esto se puede mejorar estableciendo un tamaño de búfer Rx pequeño en cada zócalo. –

2

Si la intención de tener un servidor que tiene una toma abierta por cliente, entonces tiene que ser cuidadosamente diseñado para que se pueda comprobar de manera eficiente para datos entrantes de 10k + clientes. Esto se conoce como el problema 10k.

Los núcleos Linux modernos pueden manejar más de 10k conexiones, generalmente al menos 100k. Es posible que necesite algunos ajustes, en particular los muchos tiempos de espera de TCP (si usa TCP) para evitar el cierre/sockets obsoletos con un montón de recursos si muchos clientes se conectan y desconectan con frecuencia.

Si está utilizando el módulo conntrack de netfilter, también puede necesitar sintonización para rastrear muchas conexiones (esto es independiente de los zócalos tcp/udp).

Existen muchas tecnologías para equilibrar la carga, la más conocida es LVS (Servidor Virtual Linux) que puede actuar como la interfaz de un clúster de servidores reales. No sé cuántas conexiones puede manejar, pero creo que lo usamos con al menos 50k en producción.

0

Trate HAProxy equilibrador de carga de software: (. Es decir, específicamente el tipo de tráfico que utilizaría UDP para)

http://haproxy.1wt.eu/

Cuestiones relacionadas