Melhore o desempenho em chamadas SOAP

13

Estou com um problema de desempenho com o Magento 2.1

Na minha loja, tenho 90.000 produtos. Eu adicionei esses produtos ao sabão. Quando fiz isso, foram necessários cerca de 7 segundos para cada artigo (produto?) (Solicitação> Resposta). Em resumo, demorou alguns dias para iniciar todos os produtos.

Agora todos os produtos estão na loja. Todas as semanas eu tenho que atualizar algumas coisas nos artigos (produtos). Quando eu faço isso com sabão novamente, leva a mesma duração. Quando atualizo, a loja fica inutilizável. Um exemplo de solicitação e resposta está aqui: https://pastebin.com/aqnMJk98 https://pastebin.com/UAh0h8Zz

Meu servidor possui uma CPU de 12 núcleos, 24 GB de RAM e SSD. Está rodando Ubuntu 16.04 com Apache2 PHP7-fpm e MYSQL.

Quando assisto ao processo de atualização, vejo que 5 núcleos com MySQL estão 100% PHP trabalhando um pouco e o restante está ocioso. A ram é apenas uma pequena quantidade usada iotopdiz que meu SSD está entediado.

Eu assisti o desempenho do banco de dados e vi que o Magento disparou no processo de adição milhares de comandos ao banco de dados. Isso está bom?

Quando eu atualizá-lo com a importação do Magento CSV, é muito mais rápido.

O que posso fazer para acelerar este Magento2? Nesta situação, é impossível trabalhar bem com esta loja.

tadeus
fonte
Quais extensões você está usando? O problema pode estar relacionado a uma das suas extensões.
Bunyamin Inan
@tadeus Você resolveu seus problemas de velocidade nos últimos 2 anos? Caso contrário, AVISO LEGAL: Eu sou o autor do conteúdo do site mencionado no meu perfil, perfil de rede, onde temos scripts de utilitário gratuitos para melhorar o desempenho e outros serviços de análise.
Wilson Hauck

Respostas:

1

Importação em massa

a chave é usar a importação em lote, como você mencionou:

Quando eu atualizá-lo com a importação do Magento CSV, é muito mais rápido.

Considere repensar sua API SOAP e alterá-la para um modo em massa, por exemplo, você pode criar um middleware que aceite os dados do seu produto e gere um arquivo csv que posteriormente será alimentado no Magento.

Existem algumas extensões de terceiros que ajudam com isso.

Conselhos gerais de desempenho

Você pode tentar acelerar o próprio Magento, mas obterá de 1 a 10% de aumento a cada aprimoramento. Quando você faz várias delas, o benefício é multiplicado:

  1. Verifique se você não tem código ineficiente
    1. Verifique se o seu código não gera avisos / erros / avisos
    2. Verifique se você não tem ouvintes de eventos caros nas extensões instaladas (de terceiros ou de si mesmo).
  2. Depois de concluir a remoção dos avisos e avisos - considere desativar o registro.
  3. Verifique quais Magento e também as extensões de terceiros que você não está usando e que pode desativar. Consulte Qual módulo posso desativar no Magento 2? para referência.
  4. Caso o seu servidor de banco de dados esteja na mesma máquina que o aplicativo Magento - verifique se você está usando o soquete do Linux em vez da conexão TCP / IP.
  5. Caso seu servidor de banco de dados não esteja na mesma máquina que o aplicativo Magento - verifique se o PHP não precisa executar a resolução DNS sempre que consultar o banco de dados.
  6. Verifique o conselho de ajuste de desempenho do banco de dados, o artigo percona já foi mencionado em uma das respostas, verifique também https://github.com/major/MySQLTuner-perl
  7. Verifique os modos de indexação do magento, alterne para o índice dentro do cronograma e execute uma reindexação todas as noites ou após a conclusão da importação, e não na economia do produto. https://devdocs.magento.com/guides/v2.2/extension-dev-guide/indexing.html#m2devgde-indexing-modes

Caso todas as opções acima estejam concluídas e você precise de mais desempenho:

  • crie um perfil do seu aplicativo com xDebug ou blackfire, veja onde estão os gargalos da garrafa e tente eliminá-los.
  • pergunte, mas seja mais específico, explique o que exatamente você está tentando melhorar no momento.
  • considere pedir a um parceiro Magento ou a um desenvolvedor certificado Magento para obter ajuda.
Anton Boritskiy
fonte
0

O problema aqui é que as chamadas SOAP são muito caras. Se você iniciar uma solicitação SOAP para adicionar / editar / excluir um produto, o Magento precisará se juntar a muitas tabelas para obter todas as informações necessárias. Esse comportamento em combinação com o próprio PHP torna lento o número de produtos ou dados que você deseja processar.

O próprio Magento recomenda um cluster de servidores de 5 nós (1 x DB, 4 x Webserver) para lidar com o tráfego.

Eu recomendaria o dimensionamento horizontal, por exemplo, com a AWS. Isso pode ter um impacto maior nos seus negócios, mas IMHO você não poderá ajustar o Magento para ter um desempenho melhor.

Na AWS, você deve usar o Recurso de um grupo de dimensionamento automático responsável pelo número de servidores que você inicia. Sempre que você adiciona os dados, há novos servidores sendo iniciados para lidar com a pressão. O mesmo pode ser feito com o AWS RDS (DB Service) com muita facilidade e rapidez.

Caso a AWS não seja uma opção, tente ajustar o Magento e o PHP. Eu recomendaria verificar as configurações para:

David Lambauer
fonte
0

Este link explica como ajustar o uso de memória do MySQL. Como você possui muita RAM, pode se beneficiar da alocação de mais no MySQL. Essa pode ser uma solução mais fácil e menos dispendiosa ($) que cria um servidor de banco de dados dedicado.

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

Além disso, você pode encontrar o utilitário MySQL Workbench útil para ajudá-lo com esses ajustes e também monitorar o que o MySQL está fazendo em geral. O utilitário é feito pelo Oracle / MySQL; Não é um aplicativo shareware aleatório.

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

plotkin
fonte