Mejora el rendimiento en llamadas SOAP

13

Tengo un problema de rendimiento con Magento 2.1

En mi tienda, tengo 90,000 productos. Agregué estos productos al jabón. Cuando hice esto, me llevó alrededor de 7 segundos para cada artículo (producto?) (Solicitud> Respuesta). En resumen, tomó algunos días iniciar todos los productos.

Ahora todos los productos están en la tienda. Todas las semanas tengo que actualizar algunas cosas en los artículos (productos). Cuando hago esto con jabón nuevamente, toma la misma duración. Cuando hago actualizaciones, la tienda no se puede usar. Un ejemplo de solicitud y respuesta están aquí: https://pastebin.com/aqnMJk98 https://pastebin.com/UAh0h8Zz

Mi servidor tiene una CPU de 12 núcleos, 24 GB de RAM y SSD. Está ejecutando Ubuntu 16.04 con Apache2 PHP7-fpm y MYSQL.

Cuando veo el proceso de actualización, veo que 5 núcleos con MySQL están al 100% PHP está funcionando un poco y el resto está inactivo. El carnero es solo una pequeña cantidad utilizada iotopdice que mi SSD está aburrida.

Observé el rendimiento de la base de datos y vi que Magento disparó en el proceso de adición de miles de comandos a la base de datos. ¿Esta bien?

Cuando lo actualizo con la importación Magento CSV, es mucho más rápido.

¿Qué puedo hacer para acelerar este Magento2? En esta situación, es imposible trabajar bien con esta tienda.

tadeus
fuente
¿Qué extensiones estás usando? El problema puede estar relacionado con una de sus extensiones.
Bunyamin Inan
@tadeus ¿Has resuelto tus problemas de velocidad en los últimos 2 años? De lo contrario, DESCARGO DE RESPONSABILIDAD: soy el autor del contenido del sitio web mencionado en mi perfil, Perfil de red, donde tenemos scripts de utilidad gratuitos para mejorar el rendimiento y otros Servicios de análisis.
Wilson Hauck

Respuestas:

1

Importación masiva

la clave es usar la importación por lotes, como usted mismo mencionó:

Cuando lo actualizo con la importación Magento CSV, es mucho más rápido.

Considere repensar su API SOAP y cámbiela a un modo masivo, por ejemplo, puede crear un middleware que acepte los datos de su producto y genere un archivo csv que luego se pueda alimentar a Magento.

Hay algunas extensiones de terceros que ayudan con eso.

Consejos generales de rendimiento

Puedes intentar acelerar el propio Magento, pero obtendrás un aumento del 1 al 10% de cada mejora, cuando haces varias de ellas, el beneficio se multiplica:

  1. Asegúrate de no tener un código ineficiente
    1. Compruebe que su código no genera avisos / errores / advertencias
    2. Verifique que no tenga oyentes de eventos caros en las extensiones instaladas (de terceros o de usted mismo).
  2. Una vez que haya terminado de eliminar los avisos y advertencias, considere deshabilitar el registro.
  3. Verifique qué extensiones de Magento y también de terceros no está utilizando y puede deshabilitar. ¿Qué módulo puedo deshabilitar en Magento 2? para referencia.
  4. En caso de que su servidor de base de datos esté en la misma máquina que la aplicación Magento, asegúrese de estar utilizando un socket Linux en lugar de una conexión TCP / IP.
  5. En caso de que su servidor de base de datos no esté en la misma máquina que la aplicación Magento, asegúrese de que PHP no necesite hacer una resolución DNS cada vez que consulte la base de datos.
  6. Consulte el consejo de ajuste de rendimiento de la base de datos, el artículo de Percona ya se mencionó en una de las respuestas, consulte también https://github.com/major/MySQLTuner-perl
  7. Verifique los modos de indexación de magento, cambie al índice según lo programado y realice una reindexación todas las noches o después de que se complete la importación, no al guardar el producto. https://devdocs.magento.com/guides/v2.2/extension-dev-guide/indexing.html#m2devgde-indexing-modes

En caso de que todo lo anterior esté hecho y necesite más rendimiento:

  • perfile su aplicación con xDebug o blackfire, vea dónde están los cuellos de botella, intente eliminarlos.
  • pregunte, pero sea más específico, explique exactamente qué está tratando de mejorar en este momento.
  • considere pedirle ayuda a un socio de Magento o un desarrollador certificado de Magento.
Anton Boritskiy
fuente
0

El problema aquí es que las llamadas SOAP son muy caras. Si inicia una solicitud SOAP para agregar / editar / eliminar un producto, Magento tiene que unir muchas tablas para obtener toda la información necesaria. Este comportamiento en combinación con PHP en sí mismo hace que sea lento para la cantidad de productos o datos que desea procesar.

Magento recomienda un clúster de servidores de 5 nodos (1 x DB, 4 x servidor web) para manejar el tráfico.

Recomendaría escalar horizontalmente, por ejemplo con AWS. Esto podría tener un mayor impacto en su negocio, pero en mi humilde opinión, no podrá ajustar Magento para obtener un mejor rendimiento.

Dentro de AWS, debe usar la función de un grupo de escala automática que es responsable de la cantidad de servidores que inicia. Cada vez que agrega los datos, se inician nuevos servidores para manejar la presión. Lo mismo se puede hacer con AWS RDS (Servicio DB) muy fácil y rápido.

En caso de que AWS no sea una opción, puede intentar ajustar Magento y PHP. Recomendaría verificar la configuración de:

David Lambauer
fuente
0

Este enlace explica cómo ajustar el uso de la memoria MySQL. Como tiene tanta RAM, puede beneficiarse de asignar más a MySQL. Esa puede ser una solución más fácil y menos costosa ($) que construir un servidor de base de datos dedicado.

https://www.percona.com/blog/2016/05/03/best-practices-for-configuring-optimal-mysql-memory-usage/

También puede encontrar útil la utilidad MySQL Workbench para ayudarlo con este ajuste y también para monitorear lo que MySQL está haciendo en general. La utilidad está hecha por Oracle / MySQL; No es una aplicación shareware aleatoria.

https://dev.mysql.com/downloads/workbench/

trama
fuente