Tomemos 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, un tostador 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
Una configuración relacionada, expliquemos mientras estamos en el tema.
nginx como balanceador 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 nginx worker es suficiente porque generalmente es la aplicación externa la que está haciendo el procesamiento pesado y consumiendo 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 es siempre una apuesta segura.
De lo contrario, puede poner un trabajador por núcleo si sabe lo que está haciendo. Consideraría que la ruta es una optimización y recomendaría una evaluación comparativa y pruebas adecuadas.
conexiones_ trabajador
La cantidad total de conexiones es worker_process * worker_connections
. La mitad en modo equilibrador de carga.
Ahora estamos llegando a la parte de la tostadora. Hay muchos límites del sistema seriamente subestimados:
- ulimits es 1k máximo de archivos abiertos por proceso en Linux (1k suave, 4k duro en alguna distribución)
- Los límites de systemd son casi lo mismo que ulimits.
- El valor predeterminado de nginx es 512 conexiones por trabajador.
- Puede haber más: SELinux, sysctl, supervisor (cada versión de distro + es ligeramente diferente)
1k trabajador_conexiones
El valor predeterminado seguro es poner 1k en todas partes.
Es lo suficientemente alto como para ser más de lo que la mayoría de los sitios internos y desconocidos encontrarán. Es lo suficientemente bajo como para no alcanzar ningún otro límite del sistema.
10k trabajador_conexiones
Es muy común tener miles de clientes, especialmente para un sitio web público. Dejé de contar la cantidad de sitios web que he visto que cayeron debido a los bajos valores predeterminados.
El mínimo aceptable para la producción es de 10k. Los límites relacionados del sistema deben aumentarse para permitirlo.
No existe un límite demasiado alto (un límite simplemente no tiene efecto si no hay usuarios). Sin embargo, un límite demasiado bajo es algo muy real que resulta en usuarios rechazados y un sitio muerto.
Más de 10k
10k es agradable y fácil.
Podríamos establecer límites arbitrarios de 1000kk (es solo un límite después de todo) pero eso no tiene mucho sentido práctico, nunca obtenemos ese tráfico y no podríamos tomarlo de todos modos.
Sigamos con 10k como una configuración razonable. Los servicios que están buscando (y realmente pueden hacer) más requerirán ajustes y evaluaciones comparativas especiales.
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 de back-end funcionan bien y bien, pero solo hasta un poco de carga , algo más y todo se va rápidamente. Preferimos reducir la velocidad que tener los servidores bloqueados. En ese caso, configure la cola con límites estrictos, deje que nginx amortigüe todo el calor mientras las solicitudes se agotan a un ritmo limitado.