Concurrencia

Si bien la concurrencia es un tema aplicable a múltiples capas de pila, hay algunas directivas de configuración en torno a los servidores web con las que cada desarrollador debe estar familiarizado.
La concurrencia se refiere al manejo de múltiples conexiones dentro de un servidor web. Los dos servidores web más populares para PHP, Apache y Nginx, ambos permiten una configuración básica para manejar múltiples conexiones.

Si bien hay muchos debates sobre qué servidor es más rápido, Apache con el módulo de eventos MPM está bastante a la par con el rendimiento de Nginx.
Las siguientes directivas dictan la concurrencia de eventos Apache MPM y, por lo tanto, vale la pena vigilarlas:

  • ThreadsPerChild: este es el número de hilos creados por cada proceso hijo
  • ServerLimit: este es el límite en el número configurable de procesos
  • MaxRequestWorkers: este es el número máximo de conexiones que se procesarán simultáneamente
  • AsyncRequestWorkerFactor: este es el límite de conexiones concurrentes por proceso

Se puede calcular un número máximo absoluto de posibles conexiones concurrentes utilizando la siguiente fórmula:

max_connections = (AsyncRequestWorkerFactor + 1) * MaxRequestWorkers

La fórmula es bastante simple; sin embargo, cambiar AsyncRequestWorkerFactor no es solo cuestión de perforar un valor de configuración más alto. Necesitaríamos tener un sólido conocimiento sobre el tráfico que llega al servidor web, lo que implica pruebas exhaustivas y recopilación de datos.
Las siguientes directivas dictan la concurrencia de Nginx y, por lo tanto, vale la pena vigilarlas:

  • worker_processes: este es el número de procesos de trabajo; su valor predeterminado es 1
  • worker_connections: este es el número máximo de conexiones simultáneas que puede abrir un proceso de trabajo; su valor predeterminado es 512

El número total ideal de usuarios que Nginx puede servir se reduce a la siguiente fórmula:

max_connections = worker_processes * worker_connections

Aunque apenas hemos arañado la superficie de la concurrencia del servidor web y las directivas generales de configuración para estos dos servidores web, la información anterior debería servirnos como punto de partida. Si bien los desarrolladores no suelen ajustar servidores web, deberían saber cuándo marcar la configuración incorrecta que podría afectar el rendimiento de su aplicación PHP.

Comparte