¿Configuración del servidor para PHP/Apache2/MySQL para 250.000 visitas por día?

¿Configuración del servidor para PHP/Apache2/MySQL para 250.000 visitas por día?

¿Alguien puede recomendar una configuración o, mejor aún, indicarme un estudio de caso completo para esta configuración web?

Básicamente tenemos un sitio php que recibe alrededor de 100.000 visitas por día. Ya se están produciendo tiempos de espera de conexión, etc. al intentar atender esta carga en un VPS, debido a que se ha alcanzado la capacidad de la CPU. Me gustaría especificar algo que le permita escalar a aproximadamente 250.000 visitas por día.

Actualmente el servidor es:

  • un VPS ampliable de un solo núcleo a 1 Ghz (de un Xeon de doble núcleo a 2,6 Ghz)
  • 2 GB de RAM ampliable (nuevamente, la capacidad ampliable me parece muy vaga)
  • 32 MB por proceso php, ejecutando un motor de expresión (hasta donde yo sé) o algo similarmente pesado
  • páginas gráficas bastante intensivas en imágenes
  • Trabajo ocasional entre bastidores en algunas páginas, como xmlrpc en servidores de terceros.
  • Apache simple con modphp (por lo que los archivos estáticos como las imágenes también necesitan procesos PHP completos; esto no se puede cambiar por ahora)

Hasta ahora, la CPU parece ser el principal cuello de botella, y algunos procesos de Apache utilizan alrededor del 30% de la CPU durante las solicitudes. Algunos otros procesos de Apache parecen mucho mejores con solo un 1% de CPU; Supongo que se trata de solicitudes de archivos estáticos.

Entonces. Queremos alejarnos del VPS y pasar a algún tipo de caja dedicada o virtual dedicada con un rendimiento sin ráfagas (medible, garantizado). Tiene que ser capaz de manejar el tráfico actual y al menos duplicarlo en el futuro.

¿Alguna recomendación o estudio que me puedas señalar?

¿Existe alguna herramienta que pueda brindarle una especificación estimada del servidor basada en parámetros como la memoria por proceso de Apache, el porcentaje de solicitudes dinámicas, si el código PHP es un CMS pesado o un hola mundo liviano, etc.?

Respuesta1

Dudo que existan estudios de casos útiles sobre este asunto, ya que el rendimiento siempre variará enormemente según la complejidad de la aplicación; la única forma de acercarse a un ajuste es medir y extrapolar.

No mencionas el sistema operativo, pero configuraría una serie de monitores de rendimiento que capturan subprocesos, cargas de CPU, estadísticas de memoria, datos de disco y de red, etc. También me aseguraría de capturar la cantidad de visitas con las que estás tratando. A partir de esto, debería poder determinar el uso mínimo, promedio y máximo de recursos para todos estos componentes en función de la carga real vista; una vez que tenga estas estadísticas (mhz/10k-users, mem/10k-users, etc.), debería poder extrapola rápidamente el rendimiento que necesitas. Asegúrese de planificar alrededor de un 20 % de espacio libre adicional incluso cuando se encuentre en su carga máxima esperada.

Sé que es mucho trabajo de hoja de cálculo, pero es la única forma en que te sentirás seguro; bueno, siempre existe el método de "arrojar toneladas de hardware al problema", que también funciona, pero cuesta :)

Mucha suerte y vuelve con algunos datos más tarde si necesitas ayuda para entenderlos.

Respuesta2

Simplemente agregue nginx en modo proxy delante de Apache y configúrelo para que el servidor tenga datos realmente estáticos sin tocar Apache. Sentirás un aumento de velocidad instantáneo.

Luego cambiaría apache2 al modo prebifurcado con entre 4 y 16 niños.

El trabajo en segundo plano, como las conexiones externas, realmente duele, reescribiría ese código para que estas cosas sean asíncronas.

Finalmente, es posible que se haya quedado sin ancho de banda en el nodo maestro (es decir, el servidor que contiene todos los VPS). Pregúntele a su empresa de alojamiento si tienen una conexión de 1 Gbit en su nodo maestro y, si es solo de 100 Mbit, es posible que desee cambiar de alojamiento.

información relacionada