¿Por qué Nginx puede llegar fácilmente a decenas de miles de usuarios simultáneos?

Nginx es conocido por su alto rendimiento, estabilidad, funciones ricas, configuración simple y bajo consumo de recursos. ¡Este artículo comprende  por qué Nginx es tan rápido!

Modelo de proceso de Nginx

 

Servidor Nginx, durante el funcionamiento normal:

 

  • Procesos múltiples : un proceso maestro, múltiples procesos de trabajo.

  • Proceso maestro: gestiona el proceso del trabajador. Interfaz externa: recepción de operaciones externas (señales); reenvío interno: de acuerdo con diferentes operaciones externas, administrar Worker a través de señales; monitoreo: monitorear el estado de ejecución del proceso Worker y reiniciar automáticamente el proceso Worker después de que finalice de manera anormal.

  • Proceso de trabajo: Todos los procesos de trabajo son iguales. Procesamiento real: las solicitudes de red son procesadas por el proceso de trabajador. Número de proceso de trabajo : configurado en nginx.conf, generalmente establecido en el número de núcleos para hacer un uso completo de los recursos de la CPU. Al mismo tiempo, evite un número excesivo de procesos, evite la competencia por los recursos de la CPU y aumente la pérdida de cambio de contexto.

 

Establecimiento de conexión HTTP y procesamiento de solicitudes

El proceso de establecimiento de conexión HTTP y procesamiento de solicitudes es el siguiente:

  • Cuando se inicia Nginx, el proceso maestro carga el archivo de configuración.

  • El proceso Master inicializa el conector de escucha.

  • Proceso maestro, Fork produce múltiples procesos de trabajo.

  • El proceso Worker compite por una nueva conexión, y el ganador establece una conexión Socket mediante un protocolo de enlace de tres vías y procesa la solicitud.

Nginx alto rendimiento, alta concurrencia

¿Por qué Nginx tiene un alto rendimiento y puede admitir una alta concurrencia?

  • Nginx usa multiproceso + modo asíncrono sin bloqueo (multiplexación IO Epoll).

  • El proceso completo de la solicitud: establecer una conexión → leer la solicitud → resolver la solicitud → procesar la solicitud → responder a la solicitud.

  • El proceso de solicitud completo corresponde a la capa inferior: leer y escribir eventos de Socket.

Modelo de procesamiento de eventos de Nginx

Solicitud: solicitud HTTP en Nginx.

 

Modo de trabajo básico del servidor web HTTP:

  • Recepción de solicitud: lea la línea de solicitud y el encabezado de solicitud línea por línea. Después de juzgar que el segmento tiene un cuerpo de solicitud, lea el cuerpo de solicitud.

  • Procese la solicitud.

  • Devolver respuesta: Genere la solicitud HTTP correspondiente (línea de respuesta, encabezado de respuesta, cuerpo de respuesta) de acuerdo con el resultado del procesamiento.

 

Nginx también es esta rutina, el proceso general es el mismo:

Arquitectura modular

 

Los módulos de Nginx se pueden dividir básicamente en los siguientes tipos según sus funciones:

 

① módulo de eventos: crea un marco para un mecanismo de procesamiento de eventos independiente del sistema operativo y proporciona el procesamiento de eventos específicos. Incluyendo ngx_events_module, ngx_event_core_module y ngx_epoll_module, etc.

El módulo de procesamiento de eventos que utiliza Nginx depende del sistema operativo específico y las opciones de compilación.

② Controlador de fase: este tipo de módulo también se denomina directamente módulo controlador. Es principalmente responsable de procesar las solicitudes del cliente y generar contenido para responder, como el módulo ngx_http_static_module, que es responsable de procesar la solicitud de página estática del cliente y preparar el archivo de disco correspondiente como salida del contenido de la respuesta.

③ filtro de salida: también conocido como módulo de filtro, que es el principal responsable de procesar el contenido de salida y puede modificar la salida.

Por ejemplo, puede implementar tareas como agregar una barra de pie predefinida a todas las páginas html de salida o reemplazar la URL de la imagen de salida.

④ upstream: el módulo upstream realiza la función de proxy inverso, reenvía la solicitud real al servidor back-end, lee la respuesta del servidor back-end y la envía de vuelta al cliente.

El módulo ascendente es un controlador especial, pero el contenido de la respuesta no se genera realmente por sí mismo, sino que se lee desde el servidor de fondo.

⑤load-balancer: módulo de equilibrio de carga, que implementa un algoritmo específico. Entre los muchos servidores back-end, seleccione un servidor como servidor de reenvío para una determinada solicitud.

Análisis de problemas comunes

Nginx  vs  Apache

Nginx:

  • Multiplexación IO, Epoll (kqueue en freebsd)

  • alto rendimiento

  • Alta concurrencia

  • Ocupa menos recursos del sistema

 

Apache:

  • Bloqueo + multiproceso / multiproceso

  • Más estable, menos errores

  • Más módulos

Escenas:

Al procesar varias solicitudes, puede utilizar: IO 多路复用 o  阻塞 IO +多线程

1. Multiplexación de E / S : 一个 线程rastrea el estado de múltiples sockets, cualquiera que 就绪sea ​​leído y escrito;

2. Bloqueo de IO  +  multiproceso : para cada solicitud, cree un nuevo subproceso de servicio

Pensando : ¿ IO 多路复用 y  多线程 la escena aplicable?

IO 多路复用: La velocidad de procesamiento de solicitudes de una sola conexión no tiene ninguna ventaja, adecuada para   escenarios de IO intensivos , impulsada por eventos

  • Gran concurrencia : solo se usa un hilo para procesar una gran cantidad de solicitudes concurrentes, lo que reduce la pérdida de cambio de contexto , y no hay necesidad de considerar problemas de concurrencia, y se pueden procesar relativamente más solicitudes;

  • Consume menos recursos del sistema (no es necesario 线程调度开销)

  • Aplicable a 长连接la situación (el modo multiproceso es 长连接fácil de causar 线程过多, causar 频繁调度)

阻塞IO + 多线程: Implementación simple, sin necesidad de depender de llamadas al sistema, adecuado para   escenarios con uso intensivo de CPU

  • Cada hilo necesita tiempo y espacio;

  • Cuando aumenta el número de subprocesos, la sobrecarga de programación de subprocesos aumenta exponencialmente

 

Número máximo de conexiones de Nginx

Antecedentes básicos:

 

  • Nginx es un modelo multiproceso y el proceso Worker se utiliza para procesar solicitudes.

  • El número de conexiones para un solo proceso (descriptor de archivo fd) tiene un límite superior (nofile): ulimit -n.

  • Configure el número máximo de conexiones para un solo proceso de trabajo en Nginx: el límite superior de worker_connections es nofile.

  • Configure el número de procesos de trabajo en Nginx: worker_processes.

Por lo tanto, el número máximo de conexiones para Nginx:

  • El número máximo de conexiones para Nginx: el número de procesos de trabajo x el número máximo de conexiones para un solo proceso de trabajo.

  • Lo anterior es el número máximo de conexiones cuando Nginx se usa como servidor general.

  • Cuando se utiliza Nginx como servidor proxy inverso, el número máximo de conexiones que se pueden atender: (número de procesos de trabajo x número máximo de conexiones para un solo proceso de trabajo) / 2.

  • Cuando Nginx reverse proxy, establecerá la conexión del Cliente y la conexión del servidor web backend, ocupando 2 conexiones.

Capacidades de procesamiento concurrente de Nginx

Con respecto a la capacidad de procesamiento concurrente de Nginx: el número de conexiones concurrentes, después de la optimización general, el valor pico se puede mantener en aproximadamente 1 ~ 3w. (Los números de núcleo de memoria y CPU son diferentes, habrá espacio para una mayor optimización).

 

Supongo que te gusta

Origin blog.csdn.net/bjmsb/article/details/108503103
Recomendado
Clasificación