Améliorez les performances des appels SOAP

13

J'ai un problème de performances avec Magento 2.1

Dans ma boutique, j'ai 90 000 produits. J'ai ajouté ces produits au savon. Quand j'ai fait cela, il a fallu environ 7 secondes pour chaque article (produit?) (Demande> Réponse). En résumé, il a fallu quelques jours pour lancer tous les produits.

Maintenant, tous les produits sont dans la boutique. Toutes les quelques semaines, je dois mettre à jour certaines choses sur les articles (produits). Quand je recommence avec du savon, cela prend la même durée. Quand je fais des mises à jour, la boutique est inutilisable. Un exemple de demande et de réponse est ici: https://pastebin.com/aqnMJk98 https://pastebin.com/UAh0h8Zz

Mon serveur a un processeur 12 cœurs, 24 Go de RAM et SSD. Son exécutant Ubuntu 16.04 avec Apache2 PHP7-fpm et MYSQL.

Quand je regarde le processus de mise à jour, je vois que 5 cœurs avec MySQL sont à 100% PHP fonctionne un peu et le reste est inactif. Le bélier n'est qu'une petite quantité utilisée, iotopdit que mon SSD s'ennuie.

J'ai regardé les performances de la base de données et j'ai vu que Magento a lancé dans le processus d'ajout des milliers de commandes à la base de données. Est-ce correct?

Lorsque je le mets à jour avec l'importation Magento CSV, c'est beaucoup plus rapide.

Que puis-je faire pour accélérer ce Magento2? Dans cette situation, il est impossible de bien travailler avec cette boutique.

tadeus
la source
Quelles extensions utilisez-vous? Le problème peut être lié à l'une de vos extensions.
Bunyamin Inan
@tadeus Avez-vous résolu vos problèmes de vitesse au cours des 2 dernières années? Sinon, AVIS DE NON-RESPONSABILITÉ: je suis l'auteur du contenu du site Web mentionné dans mon profil, profil réseau, où nous avons des scripts utilitaires gratuits pour améliorer les performances et d'autres services d'analyse.
Wilson Hauck

Réponses:

1

Importation en masse

la clé est d'utiliser l'importation par lots, comme vous l'avez mentionné vous-même:

Lorsque je le mets à jour avec l'importation Magento CSV, c'est beaucoup plus rapide.

Envisagez de repenser votre API SOAP et de la changer en mode en vrac, par exemple, vous pouvez créer un middleware qui acceptera vos données produit et générera un fichier csv qui pourra ensuite être alimenté dans Magento.

Il existe des extensions de tiers qui aident à cela.

Conseils généraux sur les performances

Vous pouvez essayer d'accélérer Magento lui-même, mais vous obtiendrez ~ 1-10% de boost à chaque amélioration, lorsque vous en effectuez plusieurs, l'avantage est multiplié:

  1. Assurez-vous que vous n'avez pas de code inefficace
    1. Vérifiez que votre code ne génère pas d'avis / erreurs / avertissements
    2. Vérifiez que vous n'avez pas d'écouteurs d'événements coûteux dans les extensions installées (de tiers ou de vous-même).
  2. Une fois la suppression des notifications et des avertissements terminée, envisagez de désactiver la journalisation.
  3. Vérifiez les extensions Magento et les extensions tierces que vous n'utilisez pas et pouvez désactiver, voir Quel module puis-je désactiver dans Magento 2? pour référence.
  4. Dans le cas où votre serveur de base de données se trouve sur la même machine que l'application Magento - assurez-vous que vous utilisez le socket linux au lieu de la connexion TCP / IP.
  5. Dans le cas où votre serveur de base de données n'est pas sur la même machine que l'application Magento - assurez-vous que PHP n'a pas besoin de faire de résolution DNS à chaque fois qu'il interroge la base de données.
  6. Consultez les conseils de réglage des performances de la base de données, l'article percona a déjà été mentionné dans l'une des réponses, consultez également https://github.com/major/MySQLTuner-perl
  7. Vérifiez les modes d'indexation de magento, passez à l'index dans les délais et effectuez une réindexation tous les soirs ou une fois l'importation terminée, et non lors de l'enregistrement du produit. https://devdocs.magento.com/guides/v2.2/extension-dev-guide/indexing.html#m2devgde-indexing-modes

Dans le cas où tout ce qui précède est fait et que vous avez besoin de plus de performances:

  • profilez votre application avec xDebug ou blackfire, voyez où sont les cols de bouteille, essayez de les éliminer.
  • demandez autour, mais soyez plus précis, expliquez ce que vous essayez d'améliorer en ce moment.
  • pensez à demander à un partenaire Magento ou à un développeur Magento certifié d'obtenir de l'aide.
Anton Boritskiy
la source
0

Le problème ici est que les appels SOAP sont très chers. Si vous lancez une demande SOAP pour ajouter / modifier / supprimer un produit, Magento doit rejoindre un grand nombre de tableaux pour obtenir toutes les informations nécessaires. Ce comportement en combinaison avec PHP lui-même ralentit le nombre de produits ou de données que vous souhaitez traiter.

Magento lui-même recommande un cluster de serveurs à 5 nœuds (1 x DB, 4 x Webserver) pour gérer le trafic.

Je recommanderais une mise à l'échelle horizontale, par exemple avec AWS. Cela pourrait avoir un impact plus important sur votre entreprise, mais à mon humble avis, vous ne pourrez pas modifier Magento pour améliorer ses performances.

Dans AWS, vous devez utiliser la fonctionnalité d'un groupe de mise à l'échelle automatique qui est responsable du nombre de serveurs que vous lancez. Chaque fois que vous ajoutez des données, de nouveaux serveurs se lancent pour gérer la pression. La même chose peut être faite avec AWS RDS (DB Service) très facile et rapide.

Dans le cas où AWS n'est pas une option du tout, vous pouvez essayer de modifier Magento et PHP. Je recommanderais de vérifier les paramètres pour:

David Lambauer
la source
0

Ce lien explique comment modifier l'utilisation de la mémoire MySQL. Étant donné que vous avez tellement de RAM, vous pouvez bénéficier d'allouer plus à MySQL. Cela peut être une solution ($) plus facile et moins coûteuse que la construction d'un serveur de base de données dédié.

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

Vous pouvez également trouver l'utilitaire MySQL Workbench utile pour vous aider avec ce réglage et également la surveillance de ce que MySQL fait en général. L'utilitaire est créé par Oracle / MySQL; ce n'est pas une application de shareware aléatoire.

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

complot
la source