Problema de rendimiento con 1k a 10k sitios web / tiendas


9

Estoy tratando de encontrar una manera de mejorar el rendimiento de Magento cuando la cantidad de sitios web / tiendas supera 1k, y mi objetivo es de alrededor de 10k. Aquí hay algunas preguntas; ¡cualquier consejo / ayuda es extremadamente bienvenido!

  1. Agregar nuevos sitios web / tiendas es lento;
    Comento $ this-> cleanModelCache () en _afterSave () en Mage_Core_Model_Abstract, y la situación parece mejor, pero cada vez es más lenta con el aumento del número de sitios web / tiendas. Y no sé qué afectaría esto a todo el sistema en el futuro.

  2. Las llamadas a la API se vuelven lentas.
    Uno de los procesos principales es hacer un pedido; mi modelo personalizado lo maneja procesando algunos datos, y esencialmente usando modelos de ventas / cotizaciones y modelos de ventas / cotizaciones de servicio. El proceso comienza con Oauth. Tanto Oauth como realizar pedidos tardan más cuando crece el número de sitios web / tiendas y el consumo de memoria parece mayor. ¿Tiene esto algo que ver con que Mage cargue el xml de configuración y el hecho de que los datos de configuración aumentan con el número creciente de sitios web?

  3. Abrir n98-magerun dev: la consola está tardando más; No sé la causa de esto.

  4. Guardar la configuración desde el panel de administración lleva más tiempo; No sé cómo mejorarlo.

¿Es posible reconstruir la forma en que Magento genera y carga los datos de configuración para reducir su consumo de memoria? ¿Es este uno de los factores que causan problemas de rendimiento para mi situación?

Instancia actual de Magento: Versión = Magento EE 1.14.2.4;
Configurar caché activado; otro caché apagado;
Usando Mysql 5.6 y MongoDB (para catalog_category_entity, catalog_product_entity, core_website);
número de sitios web = número de tiendas = número de visitas = 1024;
número de producto = 4501;

¡Gracias a todos de antemano!


2
¿Por qué el soporte de magento no puede ayudarte?
MagenX

¿Cómo obtengo ayuda de ellos? Soy nuevo en la comunidad ... gracias!
Jack.W

1
tienes una versión empresarial, no estoy seguro de dónde la obtienes, pero si no hay soporte de magento detrás, solo desperdicias dinero y tiempo. debes golpearlos bien en las bolas para que corran como conejos que te ayudan. ¿Cuál es el punto de tener la versión empresarial?
MagenX

1
pero la respuesta obvia a su consulta es: tiendas de magento separadas con bases de datos separadas, como lotes por 10-20 tiendas ...
MagenX

Ah cierto ... voy a pedirle a mi jefe la cuenta ... jaja.
Jack.W

Respuestas:


3

Una de las razones por las que se ralentiza es porque la configuración de cada tienda está duplicada de / config / websites y / config / global y el código para hacerlo no es eficiente en lo más mínimo. Cualquier cambio de configuración puede terminar causando varios 10's de minutos, si no horas, de rendimiento y rendimiento reducidos. Hacerlo más eficiente básicamente significará que Ben Marks te perseguirá ... y no en el buen sentido.

Si va a seguir esta ruta, la forma más fácil sería tener 10k instalaciones de Magento y tener algún tipo de agente que delegue las solicitudes en el sitio web correspondiente. Aunque, por supuesto, dependerá de cuál sea su caso de uso real.

[adicional]

Dependiendo del caso de uso, puede utilizar categorías como pseudoalmacenes. Técnicamente, podría usar el diseño XML para cambiar la temática por tienda. Pero entonces te toparías con la limitación del pago. Todas las tiendas tendrían que compartir el pago.

De cualquier manera, 10k tiendas Magento son factibles, ya que no es imposible. Pero será un camino difícil, sea cual sea el camino que elija.


Hola Kevin, gracias por tu respuesta! Sí, veo el código que actualiza el árbol de configuración, que es loadToXml () si no me equivoco. Mi pensamiento es; y dijiste que no es una buena idea modificarlo? ¿Qué quieres decir con que Ben Marks viene detrás de mí? Además, parece que cada solicitud http que llega a Magento eventualmente cargará el árbol de configuración, ¿es correcto? ¿De alguna manera puedo reducir su tamaño? Probablemente debería pensar en obtener 10k instancias de Magento ... ¿alguna idea sobre cuánto recurso necesitaría? Muchas gracias Kevin!
Jack.W

Pero tener 10k instalaciones de Magento significa 10k instancias mysql ¿verdad? No tengo idea de cómo hacer esto, o si es una buena idea ..
Jack.W

1
No, significaría tener 10k bases de datos mysql, pero todas las 10k podrían estar en una sola instancia de mysql.
Christian

1
El "Ben Marks" que viene después de ti es una referencia a este camo.githubusercontent.com/…
Kevin Schroeder

1
10k instalaciones de Magento significan 10k bases de datos MySQL, sin embargo, eso se distribuiría. Sería MUCHO más fácil implementar scripts de 10 mil instalaciones individuales de Magento que hacer que el código central existente funcione con 10 mil tiendas.
Kevin Schroeder

1

Puede intentar hackear el núcleo y habilitar divisiones de caché del sitio web. Puede intentar hackear la base de datos y almacenar información de configuración en la memoria. Puede intentar reemplazar la caché de configuración con algo más inteligente, por ejemplo, almacenar en caché la información de los archivos xml [que son estáticos y se aplican a todos los sitios web y tiendas] mientras recupera los datos de anulación de forma dinámica.

Soy un tipo de servidor, así que iría con mucking con la base de datos. Especialmente porque es trivial de hacer.

Si tiene control sobre su servidor de base de datos: Cambie el nombre de la tabla core_config_data a core_config_data_offline Cree una nueva tabla core_config_data utilizando el motor de almacenamiento MEMORY http://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html Copie todos los datos de core_config_data_offline a core_config_data

Configure un trabajo cron para verificar si existe core_config_data, si copia todos los datos de allí a core_config_data_offline. Si no es así, créelo y copie todo, desde core_config_data_offline a core_config_data

Apague la caché de configuración. Con la caché de configuración activada, solo obtienes un aumento de rendimiento por primera vez que los datos de configuración se leen de la base de datos, después de eso está en la caché y sufres. En el lado negativo, los archivos xml ya no se almacenan en caché, por lo que intercambió el impacto de rendimiento de deserializar grandes datos de configuración por el impacto de rendimiento de analizar un montón de archivos xml.

También puede experimentar con cambiar el archivo Mage / Core / Model / Config.php y habilitar cachés de sitios web individuales. Por defecto, los datos de configuración específicos de cada tienda se almacenan en caché individualmente. Todos los datos de configuración del sitio web se almacenan en caché en un objeto.

Tenga en cuenta que esto es solo para la anulación de la configuración [la configuración de administrador]. Entonces, si realiza todos los cambios de configuración en el nivel de la tienda, ya está configurado. Si está utilizando "heredar del sitio web" y está haciendo la mayor parte de los cambios de configuración específicos de su tienda a nivel de sitio, entonces el caché contiene cada sitio web. Al dividirlo puedes dividirlo mucho mejor. protected $ _cacheSections = array ('admin' => 0, 'adminhtml' => 0, 'crontab' => 0, 'install' => 0, 'stores' => 1, 'websites' => 0);

a

protected $_cacheSections = array(
    'admin'     => 0,
    'adminhtml' => 0,
    'crontab'   => 0,
    'install'   => 0,
    'stores'    => 1,
    'websites'  => 1
); 

Hola Gary, gracias por una respuesta tan útil. Tengo algunas preguntas: 1) Desde mi observación, la consulta de la base de datos no es un problema, incluso con más de 1k sitios web / tiendas; Entonces, si ese es el caso, ¿sería útil usar el almacenamiento de memoria? 2) No sé si es correcto, pero la caché de configuración parece almacenar solo información del sistema y los módulos; Entonces, ¿tiene algo que ver con la configuración del sitio web / tienda? 3) ¿Hay alguna manera para que magento reconozca una identificación específica de tienda / sitio web a partir de una solicitud http y, por lo tanto, cargue solo el archivo de configuración correspondiente? Muchas gracias Gary!
Jack

2
Estas recomendaciones no abordan el problema que estaba observando el OP. Apagar la caché de configuración finalmente matará al sistema. Hará que Magento cargue todos los archivos de configuración, los fusione, luego fusione todos / global, fusione todos / sitios web y luego fusione todo eso en cada nodo / stores. Eso sucederá para CADA solicitud. Con 10k sitios, podría mirar minutos de tiempo de reloj de pared por solicitud .
Kevin Schroeder

Hola Kevin, gracias por la respuesta; En realidad, estoy planeando mover la tabla core_config_data a la memoria, habilitar la caché para la configuración del sistema y del módulo, evitar que core_config_data se fusione en el árbol de configuración y hacer que las funciones que leen esta parte de los datos se consulten directamente desde la base de datos. ¿Qué piensas?
Jack.W

1
El problema no es core_config_data. El problema es que las configuraciones de la tienda se fusionan desde / sitios web que se fusionan desde / global en XML La base de datos estará perfectamente bien. Es PHP el que odiará la vida debido a las fusiones de configuración. En su depurador, recorra Mage_Core_Model_Resource_Config :: loadToXml prestando especial atención a las líneas 110 y siguientes
Kevin Schroeder

1
Ahora para volver a mi mesa de memoria. El almacenamiento en caché de datos significa almacenarlo en algún lugar al que se pueda acceder rápidamente. Magento almacena en caché los datos de configuración en un objeto serializado php: si sus datos de configuración son enormes, eso significa que PHP tiene que deserializar una gran cantidad de datos para cada solicitud. Si sabe cómo usar xdebug, perfile algunas de sus cargas de página más lentas y observe cuánto tiempo pasa ejecutando la función unserialize: php.net/manual/en/function.unserialize.php , si es enorme [más de 100 ms] entonces "almacenar en caché" la configuración está rompiendo su sistema.
Gary Mort
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.