¿El servidor web httpd ofrece contenido con una velocidad de descarga diferente a la de los clientes?

¿El servidor web httpd ofrece contenido con una velocidad de descarga diferente a la de los clientes?

Para nuestro juego, alojamos sus activos estáticos en una máquina virtual que acaba de instalar y ejecutar httpd (por supuesto, junto con algunas cosas nativas de Linux), para poder ofrecer contenido web. MPM configurado funciona con MaxClients de 6400, ServerLimit 100 y ThreadsPerChild 64. La memoria es de 4 GB. Con la configuración anterior, el contenido estático servido tiene un tamaño total de aproximadamente 20 MB y se sirve en mi país (Bulgaria), así como en otros países. Se comprueba y confirma que las velocidades de ancho de banda nacional e internacional no difieren. Sin embargo, en los momentos pico, cuando el ancho de banda está al máximo, comenzamos a recibir quejas masivas de usuarios lejanos (es decir, de Rusia) de que el juego se descarga completamente en 2 o 3 minutos. Cada vez que verificamos cargar el juego con el caché deshabilitado desde aquí, tomó alrededor de 10 segundos, cada vez que lo intentamos, desde cualquier computadora. Agregamos 2 máquinas virtuales más a partir de la imagen de la máquina virtual original (misma configuración y contenido) e hicimos el equilibrio de carga más rápido: operación por turnos de DNS para un total de tres IP. Las quejas disminuyeron, pero el tiempo de carga para los usuarios rusos siguió siendo de más de 1 minuto. Cuando volvimos a intentar descargar el juego varias veces desde aquí, todavía eran 10, no hubo diferencia para nosotros. ¿Cuáles pueden ser las posibles razones dado que los servidores de contenido estático tienen el mismo peering nacional e internacional, y cuando la carga es baja, todos los usuarios rusos también pueden descargar durante 10 segundos, pero no en las horas pico? ¿No debería ser igual para todos los usuarios?

PD: En todo momento, los servidores estáticos tenían mucha memoria y los procesos httpd generados nunca superaban 50, con un límite establecido de 100.

EDITAR: Breve resumen de la pregunta: con carga baja, todos los clientes (locales y distantes) descargan el cliente por el mismo tiempo (por ejemplo, 15 segundos). Cuando la carga es alta, los clientes locales la cargan nuevamente durante 15 segundos, mientras que los distantes lo hacen durante 2-3 minutos. ¿Cuáles son las posibles razones?

Respuesta1

segúnla aclaración de que esto solo sucedía cuando el ancho de banda estaba al máximo, eso puede parecer un comportamiento totalmente normal; entonces, cuando maximiza su ancho de banda disponible (a la velocidad de línea), puede comenzar a perder paquetes y tenerventana TCPpara clientes de larga duración nunca ampliados para velocidades óptimas;Producto de retardo de ancho de bandacrece, aumenta el tiempo para descargar el mismo archivo a través del mismo canal; tendrías que hacer algomodelado del tráfico(en otras palabras,cola de paquetes y priorización) si quieres que sea más igualado para todos durante los periodos de sobrecarga. – cnst 6 de octubre a las 4:56

Respuesta2

La respuesta depende de muchas cosas. No se puede simplemente decir que sus velocidades internacionales son constantes. Los usuarios distantes siempre tendrán un rendimiento menor, dependiendo de la red entre usted y ellos y de su carga.

Por cierto, dijiste que tu ancho de banda está al máximo. ¿Ancho de banda de la conexión de red de su servidor? Entonces realmente necesitas una CDN o servidores proxy inversos de almacenamiento en caché.

Puedo ofrecer algunas mejoras rápidas:

  • Utilice Nginx; puede servir contenido estático de manera mucho más eficiente.
  • Utilice una CDN como Cloudflare, o si eso es demasiado elaborado, puede alquilar una máquina virtual en Rusia e instalar en ella un proxy inverso de almacenamiento en caché, hacer que su IP geográfica de DNS sea consciente y hacer que los usuarios rusos redirijan allí. En realidad, Cloudflare podría ser más fácil :)

Respuesta3

Realmente no se puede decir que el peering sea el mismo para el tráfico nacional e internacional.

Puede que haya cambiado en los últimos años, pero tradicionalmente en Rusia, la mayoría de los proveedores nunca han pagado por ningún peering local, obteniéndolo directamente de MSK-IX, y el resto del tráfico lo manejan los proveedores de tránsito.

Los enlaces en varias direcciones casi siempre tienen diferentes capacidades, y muy a menudo ciertos enlaces se mantienen saturados de vez en cuando (ya sea por picos de tráfico inesperados, o porque alguien es demasiado vago para actualizar sus enlaces, o paga más por más tráfico, etc.) , y esto puede ocurrir especialmente con más frecuencia durante las horas pico.

A menudo, en los puntos de intercambio de tráfico o de tránsito, los proveedores pagan una tarifa fija por 100 Mbps, 1 Gbps o 10 Gbps ilimitados. ¿Qué sucede cuando el tráfico supera lo pagado? Algunos paquetes se caen, otros se ralentizan y, por lo general, esto sólo ocurre durante las horas pico y, a veces, solo en una dirección (pero incluso si sucede en una dirección, el tráfico aún se ralentiza en ambas, ya que la latencia aumenta y algunos ACKlos paquetes de control de congestión también se pierden).

Yo solucionaría el problema ejecutandomtrhacia uno de los hosts en Rusia que está experimentando el problema, así como desde uno de los hosts en Rusia hacia su servidor en Bulgaria. Me resulta más útil ejecutar cada instancia durante 30 segundos a 15 minutos (mtr agregará las estadísticas durante toda la ejecución) y luego ejecutarla nuevamente durante otros 5 a 15 minutos inmediatamente después de que se complete la ejecución anterior. De esta manera, podrá ver exactamente durante qué tiempo ocurren los problemas.

De lo contrario, también podría ser un problema con Apache, tal vez relacionado con una mayor latencia de los hosts en Rusia: nginx es generalmente más eficiente a la hora de ofrecer todo tipo de contenido que Apache, por lo que tal vez sea una buena oportunidad para probar nginx en su lugar. ?

Respuesta4

Si bien la velocidad de la luz es constante y los datos viajan a través de cables de fibra de larga distancia a la misma velocidad, cuanto más se aleja uno de la fuente, más "saltos" tiene que dar.

Si ejecuta un traceroute a un servidor a 100 millas de distancia y luego lo compara con un servidor que está al otro lado del mundo, el que está al otro lado del mundo probablemente pasará por muchos más saltos.

Latenciaes la cantidad de tiempo que tardan los datos en pasar por cada enrutador (salto) en el camino antes de llegar a su destino, y la latencia es el problema aquí.

información relacionada