Valor óptimo para Nginx worker_connections

Pregunta:

Nginx worker_connections "establece el número máximo de conexiones simultáneas que puede abrir un proceso de trabajo. Este número incluye todas las conexiones (por ejemplo, conexiones con servidores proxy, entre otras), no solo conexiones con clientes. Otra consideración es que la cantidad real de conexiones simultáneas las conexiones no pueden exceder el límite actual en el número máximo de archivos abiertos ". Tengo algunas consultas sobre esto:

  1. ¿Cuál debería ser el valor óptimo o recomendado para esto?
  2. ¿Cuáles son las desventajas de utilizar una gran cantidad de conexiones de trabajadores?

Respuesta:

Adoptemos el enfoque pragmático.

Todos estos límites son cosas que fueron codificadas y diseñadas en el siglo pasado cuando el hardware era lento y costoso. Estamos en 2016 ahora, una tostadora de pared promedio puede procesar más solicitudes que los valores predeterminados.

La configuración predeterminada es realmente peligrosa. Tener cientos de usuarios en un sitio web no es nada impresionante.

proceso_trabajador

Un escenario relacionado, vamos a explicarlo mientras estamos en el tema.

nginx como equilibrador de carga:

  • 1 trabajador para el equilibrio de carga HTTP.
  • 1 trabajador por núcleo para el equilibrio de carga HTTPS.

nginx como servidores web:

Este es complicado.

Algunas aplicaciones / frameworks / middleware (por ejemplo, php-fpm) se ejecutan fuera de nginx. En ese caso, 1 trabajador nginx es suficiente porque generalmente es la aplicación externa la que realiza el procesamiento pesado y consume los recursos.

Además, algunas aplicaciones / frameworks / middleware solo pueden procesar una solicitud a la vez y es contraproducente sobrecargarlas.

En términos generales, 1 trabajador siempre es una apuesta segura.

De lo contrario, puede poner un trabajador por núcleo si sabe lo que está haciendo. Consideraría que esa ruta es una optimización y recomendaría pruebas y evaluaciones comparativas adecuadas.

conexiones_trabajador

La cantidad total de conexiones es worker_process * worker_connections . Mitad en modo de equilibrador de carga.

Ahora llegamos a la parte de la tostadora. Hay muchos límites del sistema muy subestimados:

  • ulimits es 1k máximo de archivos abiertos por proceso en Linux (1k suave, 4k duro en algunas distribuciones)
  • Los límites de systemd son aproximadamente los mismos que los de ulimits.
  • El valor predeterminado de nginx es 512 conexiones por trabajador.
  • Puede haber más: SELinux, sysctl, supervisord (cada versión de distro + es ligeramente diferente)

1000 conexiones_de_trabajadores

El valor predeterminado seguro es poner 1k en todas partes.

Es lo suficientemente alto como para ser más de lo que encontrarán la mayoría de los sitios internos y desconocidos. Es lo suficientemente bajo como para no alcanzar los límites de ningún otro sistema.

10.000 conexiones_de_trabajadores

Es muy común tener miles de clientes, especialmente para un sitio web público. Dejé de contar la cantidad de sitios web que vi que cayeron debido a los bajos valores predeterminados.

El mínimo aceptable para la producción es 10k. Los límites del sistema relacionados deben aumentarse para permitirlo.

No existe tal cosa como un límite demasiado alto (un límite simplemente no tiene ningún efecto si no hay usuarios). Sin embargo, un límite demasiado bajo es algo muy real que da como resultado usuarios rechazados y un sitio inactivo.

Más de 10k

10k es agradable y fácil.

Podríamos establecer límites arbitrarios de 1000kk (después de todo, es solo un límite) pero eso no tiene mucho sentido práctico, nunca obtenemos ese tráfico y no podríamos aceptarlo de todos modos.

Vamos a ceñirnos a 10k como un ajuste razonable. Los servicios que están buscando (y realmente pueden hacer) más requerirán ajustes especiales y evaluaciones comparativas.

Escenario especial: uso avanzado

A veces, sabemos que el servidor no tiene muchos recursos y esperamos picos sobre los que no podemos hacer mucho. Preferimos rechazar a los usuarios que intentarlo. En ese caso, establezca un límite de conexión razonable y configure buenos mensajes de error y manejo.

A veces, los servidores backend funcionan bien y bien, pero solo hasta un poco de carga , algo más y todo va hacia el sur rápidamente. Preferimos reducir la velocidad a que los servidores se bloqueen. En ese caso, configure las colas con límites estrictos, deje que nginx almacene todo el calor mientras las solicitudes se agotan a un ritmo limitado.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım