¿Tengo el servidor bien dimensionado?
-
Estamos teniendo a veces problemas de carga en el servidor cuando muchos clientes entran a comprar a la vez. Tenemos un servidor dedicado con 24 cores, y la RAM y la base de datos no están dando problemas.
El sitio es un WooCommerce con WooCommerce Subscriptions con bastante tráfico.
Basado en vuestra experiencia, ¿creéis que esta configuración debería poder aguantar más de 800-1000 usuarios simultáneos sin despeinarse, o es normal que este sea el límite a partir del cual tenemos problemas?
-
Podrías dar más especificaciones? RAM del servidor, si usas CPANEl, que tipo de servidor WEB es, etc.
Hola @davefx,
Cuando hablas de problemas de carga, ¿has identificado si es tema de procesos, escritura/lectura en discos, memoria, swap, conectividad o alguna otra cosa? Compártenos las especificaciones completas de tu servidor y danos más información de qué le sucede a los usuarios y qué le sucede al servidor cuando comienza a dar problemas.
En realidad no son tantos usuarios para que un servidor de 24 nucleos dé problemas, yo he mantenido instalaciones con +500 usuarios concurrentes con servidores de 4 nucleos y 4GB de memoria sin problema alguno.
Tal vez algo se está comiendo los recursos o es probable que necesites algunas optimizaciones, ¿has considerado el uso de CDNs?
Saludos
BD en el mismo server o en otro? servidor web (Apache, Nginx)? configuración del servidor web? es muy difícil ar una respuesta con esos datos, donde está el cuello de botella, la carga, etc…? discos SSD? está usando SWAP?
Gracias por vuestras respuestas.
El servidor es nginx montado con php-fpm. Wp-rocket haciendo cache de páginas públicas.
La base de datos está en otro servidor y en un último episodio de alta carga se ha estado tocando la barriga, así que descartaría cualquier problema de base de datos.
El monitor NewRelic que tenemos instalado (ya sé que mete carga, pero el hosting que tenemos es nefasto y no nos proporciona ningún mecanismo de monitorización) nos ha dicho que en este último episodio de alta carga el mayor tiempo de proceso se ha ido en la capa PHP.
Realmente tenemos localizados ya dos cuellos de botella muy importantes en dos plugins que ya estamos en proceso de eliminar.
Simplemente quería saber cuál es, según vuestra experiencia, la capacidad máxima (aproximada) para un servidor con Woocommerce como el que os comento, optimizando todo lo optimizable.
Es que en realidad pueden ser muchas cosas, yo he instalado hasta varnish y he tenido todo 100% optimizado y en mi experiencia una simple imagen mal linkeada que hace una nueva petición al servidor puede tumbar un sitio web.
Lo primero es ver los procesos, con un simple $ top ves si es PHP o MYSQL el que está causando la carga.
¿Es PHP?, hay que ver que URLS del sitio están haciendo carga y en base a eso jugar a ser detective para ver que puede ser sin descartar nada.
¿Es MYSQL? inspeccionar las consultas para ver cuales son las que están tardando más. (Hay muchas herramientas para hacer esto, desde la consola del servidor hasta WP).
No creo que tenga que ver con cuantos usuarios soporta Woocommerce en un servidor de X características. Primero hay que detectar el problema y ver si la solución es escalar el servidor, optimizar la BD, corregir un bug en el sitio a nivel de PHP, etc.
Cuanto tiene de RAM? Como bien dice @julioc96 hay muchos temas a inspeccionar, no es simplemente 2 Cores, 16GB RAM = 1000 usuarios, ni muchos menos, es toda una ciencia optimizar un server y depende de cada caso, uso, plugins instalados, hasta un pequeño parámetro en la config de Nginx (u otro programa), puede cambiar todo totalmente.
Usas fastcgi_cache de Nginx? se puede combinar con WP con muy buenos resultados. Un buen punto para empezar a optimizar Nginx es el blog se su .com en https://www.nginx.com/blog/ con excelentes artículos como https://www.nginx.com/blog/nginx-caching-guide/ https://www.nginx.com/blog/nginx-high-performance-caching/ o https://www.nginx.com/blog/maximizing-php-7-performance-with-nginx-part-i-web-serving-and-caching/ combinado con una configuración eficiente de PHP como FCGI, pero intentando desde Nginx darle el mínimo trabajo posible a PHP y una vez llegue a este, el mínimo trabajo en interpretar el código con el OPCaché, se podrían escribir páginas y páginas, pero todo general sin inspeccionar el servidor y cada uno de las piezas instaladas y ver si están bien encajadas entre si.
Quizás este artículo https://www.nginx.com/blog/9-tips-for-improving-wordpress-performance-with-nginx/ aunque tiene un tiempo, también pueda servir de ayuda.
Nginx está con fastcgi_cache_purge? para poder usar Nginx Helper desde WP? (Algo sobre fastcgi_cache_purge en https://tabernawp.com/creando-taberna-wordpress-desde-cero-servidor-ii-2017-06-09.html Disclaimer: escrito por mi y en obras)
Si ya es difícil hacer troubleshooting de ciertas cosas en WP sin tener acceso directo para ver con tus propios ojos el problema, hacer lo mismo en un servidor dedicado con la cantidad de distintos parámetros y configuraciones que pueden afectar a su rendimiento es como jugar a la lotería 🙂
Lo mismo se puede aplicar como ya se ha comentado a dar una cifra máxima de usuarios que una máquina puede manejar, depende de mil cosas, pero a mí 800-1000 usuarios concurrentes en una máquina de 24 cores no me parece nada que debiera dar problemas, aunque WooCommerce tiene su fama de ser un poco elefante con la base de datos, supongo que si tienes 24 cores de RAM irá también bien dotado, además dices que no tiene problemas de RAM y el MySQL lo gestiona otra máquina… (de la que no sabemos detalles, pero dices que tampoco sufre).
En mi opinión, si el problema es de carga, pero no de RAM ni de MySQL que está aparte en otra máquina. Mi boleto de lotería apostaría a que algún proceso se queda a la espera más de la cuenta. P.ej. Si la comunicación entre tu máquina y la que gestiona el MySQL no es todo lo rápida que debería los procesos de PHP pueden estar ahí viéndolas venir hasta que obtienen los datos.
Pintaca de que nginx montado con php-fpm no está afinado.
Mira la cantidad de memoria RAM que se come un hilo para rular y divideló entre la RAM real disponible y eso te dará el nº de conexiones que aguanta. Ten en cuenta que será pico teórico, nunca real.
A mí personalmente no me gusta nginx, soy más de apache.
nginx es un proxy «tuneado para interpretar php» no un servidor web, con lo que tendrás que controlar lo que hace, procesa y devuelve en todo momento. Esto es, securizar cada transacción para que no se te cuelen instrucciones chungas de bots que hay por internet.Lo suyo es montar un nodo balanceador e ir añadiendo churumbeles en función de la carga real. Divide y vencerás.
Suerte.
- El debate ‘¿Tengo el servidor bien dimensionado?’ está cerrado a nuevas respuestas.