Proteger Magento contra situaciones de mucho tráfico

Proteger Magento contra situaciones de mucho tráfico

Hola, tengo un servidor Apache 2.2 con scripts php (magento).

En tiempos normales, una página PHP se procesa en 1-2 segundos, lo cual está bien.

A veces, en caso de mucho tráfico o de robots araña, todas las ranuras Apache se bloquean.

Las solicitudes individuales se ejecutan muy lentas y usan cada vez más memoria hasta que MySQL llama al oom-killer, que mata a mi gato necesitado.

Primero probé mod_evasive. Pero si lo configuro demasiado estricto no puedo navegar ágilmente, si lo configuro demasiado flexible las solicitudes pueden llegar más rápido de lo que pueden procesarse.

El problema son los archivos php. Otros recursos como imágenes, etc., no obstruirán las ranuras.

En segundo lugar, intenté limitarlo reduciendo MaxClients. Pero ahora un cliente puede obstruir todas las ranuras.

¿Alguna idea de cómo limitar el máximo de conexiones por cliente o mejor el máximo de scripts php simultáneos por ip...

¿Cómo se configuran otros clientes Apache para evitar más solicitudes de las que pueden procesar sin favorecer a ningún cliente?

Respuesta1

Coloque su sitio detrás de una CDN de extracción de origen (Llamarada de nubeMe viene a la mente como una opción, hay otras).

En tiempos normales, una página PHP se procesa en 1-2 segundos, lo cual está bien.

No, no es.

Optimice su código para que no tarde hastadossegundos para generar la página.

Luego cachétodolas cosas.

  • Solicitudes de página de caché conBarniz
  • Búsquedas de bases de datos en caché con Memcached.
  • Caché de imágenes en una CDN.
  • Caché de nivel PHP con APC o eAccelerator (o caché de código de operación similar)
  • De hecho, también almacene en caché páginas enteras en una CDN.

Si aún no lo ha hecho, coloque su servidor de base de datos en un servidor separado, dele una carga métrica de memoria y discos ultrarrápidos, luego almacene en caché sus tablas. Magento es una puta cuando se trata de uniones y demás, por lo que necesitarás que tu servidor de base de datos sea tremendamente rápido.

Para que cuando un usuario vea su sitio, el contenido se extraiga de un cachéen algún lugary no tener que ser generadocadatiempo.


Me tomé la libertad de ejecutar Yslow en su sitio. Aquí hay un resumen de los hallazgos (aunque debe hacerlo usted mismo...)

  1. Realice menos solicitudes HTTP. Básicamente, debes combinar tus archivos javascript y CSS en uno, para reducir la sobrecarga de tener que realizar múltiples solicitudes.
  2. Utilice una red de entrega de contenido (CDN). Ya he dicho esto ^^arriba^^, pero Yslow me dice que hay60Componentes estáticos que no están en una CDN. 1,4 MB de ellos provienen de www.brainyoo.de. Lo que me lleva a...
  3. Mueva activos a múltiples dominios sin cookies.Se están cargando 60 recursos desde el mismo dominio que el resto del sitio. Lo que significa que el navegador tiene que esperar a que se cargue cada uno antes de cargar el siguiente. Una forma común de solucionar esto es colocar activos estáticos en dominios separados sin cookies (para que la solicitud sea más pequeña, más rápida y no contenga la información de las cookies).
  4. Mueva Javascript al final del documento. Considerada la mejor práctica para sitios web rápidos y escalables.
  5. Minimiza Javascript y CSS. En serio. Estás enviando casi un megabyte de JS y CSS, que se puede minimizar y...
  6. Comprimir componentes con Gzip.Hay 39 componentes de texto plano que se pueden comprimir.
  7. Agregue encabezados Expires. Hay 63 archivos estáticos sin fechas de vencimiento a largo plazo, por lo que el navegador no los almacena en caché de manera efectiva.

Total YSlow Grado D. Estoy empezando a preguntarme si sus problemas no son completamente del lado del servidor, pero le vendría bien un buen trabajo y aumentar su calificación de YSlow. Porque de esa manera, a) se atiende menos tráfico desde su servidor Apache. b) Se carga más rápido, por lo que sus visitantes no bloquean un proceso de Apache por tanto tiempo.

Respuesta2

En general, si Magento se ejecuta lentamente o mata su servidor de vez en cuando, su servidor funcionará mejor con más potencia de RAM/CPU. Puede ajustar su servidor para ejecutar Magento sin problemas, pero requiere a) algo de tiempo yb) los recursos necesarios (del lado del servidor).

¿Cuánto ajuste de db hiciste? magento es PITA pero se puede configurar para que sea rápido, con suficiente RAM.

utilizar una herramienta comosintonizador_mysqlomanual de ajuste de mysqlpara sintonizar su base de datos.

y usa tanto caché como puedas. No recuerdo si APC es compatible; Memcache es mejor.

También debes estar atento a IOWAIT, que es un indicio de un rendimiento de alta definición muy malo, que puede tener diferentes motivos.


EDITAR:

¿Cómo se configuran otros clientes Apache para evitar más solicitudes de las que pueden procesar sin favorecer a ningún cliente? /Quiero saber cómo otros apaches manejan la situación cuando reciben más solicitudes de las que pueden procesar

Por lo general, ampliará su configuración en función del tráfico esperado. Si su servidor deja de funcionar cuando las arañas y los rastreadores lo atacan, o tiene algunos scripts de muy mal rendimiento o su servidor es demasiado pequeño.

cuando espero 1000 usuarios en mi servidor, uso un servidor que puede manejar 5000 clientes (y superviso error.log para alcanzar max_clients)

Es posible limitar la velocidad, pero tendrás la misma experiencia que con mod_evasive. Realmente ayuda en términos como DDOS, pero NO si necesita ajustar su configuración.

información relacionada