![Ampliar un servidor apache](https://rvso.com/image/515059/Ampliar%20un%20servidor%20apache.png)
Tengo un servidor Ubuntu que ejecuta apache2 y espero que lo utilicen entre 500 y 1000 usuarios (concurrentes) durante un período de tiempo limitado. El servidor ofrece una combinación de páginas php personalizadas (bastante ligeras) conectadas a una base de datos postgresql (alrededor de 20 Mb de tamaño) y contenido estático. El hardware es estable y bastante robusto:
- Intel Xeon E5420 a 2,5 GHz
- 12 GB de RAM
Durante las acometidas anteriores en este servidor, incrementé ServerLimit, MaxClients para los módulos MPM y disminuí Timeout y KeepAliveTimeout. Ha funcionado, pero ha sido lento y tengo la sensación de que se puede hacer más. ¿Cómo sugeriría configurar el servidor Apache para manejar este tipo de carga?
Respuesta1
Su cuello de botella en este escenario será PHP y lo que está haciendo con la base de datos. Si está abriendo una nueva conexión con cada llamada, lo más probable es que se encuentre con paredes de E/S en el acceso al disco más que cualquier otra cosa. Lo mejor que puede hacer es tener la base de datos y el contenido estático en un disco RAM y realizar los cambios necesarios en la base de datos en el disco. También mantenga un mecanismo eficiente de almacenamiento en caché de consultas utilizando una búsqueda de hash rápida dedicada a RAM en PHP para no cargar a postgresql con ciclos de procesamiento innecesarios relacionados con las búsquedas de caché de consultas. Aunque es probable que postgresql sea más eficiente en el almacenamiento en caché de consultas que su propio código, no es tan rápido como para no necesitar nunca estar conectado en primer lugar.
Respuesta2
Su servidor debería poder manejar las cosas fácilmente. Sólo algunas notas:
- El uso de SSL aumentará sus requisitos computacionales. Entonces, use HTTP simple.
- El uso de MPM prefork aumentará sus requisitos de memoria. Entonces, use MPM trabajador.
- Usar más simultaneidad con más núcleos mejorará el rendimiento.
- Dedique más RAM a su base de datos PostgreSQL.
Estas son sólo pautas genéricas.