Повышение производительности вызовов SOAP

13

У меня проблема с производительностью Magento 2.1

В моем магазине у меня 90.000 товаров. Я добавил эти продукты в мыло. Когда я сделал это, потребовалось около 7 секунд для каждой статьи (продукта?) (Запрос> Ответ). Таким образом, для запуска всех продуктов потребовалось несколько дней.

Теперь все товары в магазине. Все несколько недель мне приходится обновлять некоторые вещи по статьям (продуктам). Когда я делаю это снова с мылом, это занимает столько же времени. Когда я делаю обновления, магазин становится непригодным для использования. Пример запроса и ответа здесь: https://pastebin.com/aqnMJk98 https://pastebin.com/UAh0h8Zz

Мой сервер имеет 12-ядерный процессор, 24 ГБ оперативной памяти и SSD. Это работает Ubuntu 16.04 с Apache2 PHP7-fpm и MYSQL.

Наблюдая за процессом обновления, я вижу, что 5 ядер с MySQL работают на 100%. PHP работает немного, а остальное бездействует. ОЗУ используется только в небольшом количестве iotopговорит о том, что мой SSD скучно.

Я наблюдал за производительностью базы данных и увидел, что Magento запустил в процессе добавления тысячи команд в базу данных. Это нормально?

Когда я обновляю его с помощью импорта Magento CSV, это происходит намного быстрее.

Что я могу сделать, чтобы ускорить этот Magento2? В этой ситуации невозможно хорошо работать с этим магазином.

Тадеуш
источник
Какие расширения вы используете? Проблема может быть связана с одним из ваших расширений.
Буньямин Инан
@tadeus Вы решили свои проблемы со скоростью за последние 2 года? Если нет, ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я являюсь автором контента веб-сайта, упомянутого в моем профиле, сетевом профиле, где у нас есть бесплатные служебные скрипты для повышения производительности, и других служб аналитики.
Уилсон Хаук

Ответы:

1

Массовый импорт

ключ в том, чтобы использовать пакетный импорт, как вы сами упомянули:

Когда я обновляю его с помощью импорта Magento CSV, это происходит намного быстрее.

Подумайте над тем, чтобы переосмыслить свой SOAP API и перевести его в режим массовой рассылки, например, вы можете создать промежуточное программное обеспечение, которое будет принимать данные вашего продукта и генерировать файл csv, который впоследствии можно будет передавать в Magento.

Есть некоторые расширения от третьих лиц, которые помогают с этим.

Общие рекомендации по производительности

Вы можете попробовать ускорить сам Magento, но вы получите ~ 1-10% прироста от каждого улучшения, когда вы сделаете несколько из них, выгода умножится:

  1. Убедитесь, что у вас нет неэффективного кода
    1. Убедитесь, что ваш код не порождает уведомления / ошибки / предупреждения
    2. Убедитесь, что у вас нет дорогих слушателей событий в установленных расширениях (от третьих лиц или от вас самих).
  2. После того, как вы удалите уведомления и предупреждения, рассмотрите возможность отключения регистрации.
  3. Проверьте, какие расширения Magento, а также сторонние расширения вы не используете и можете отключить. См. Какой модуль можно отключить в Magento 2? для справки.
  4. Если ваш сервер баз данных находится на той же машине, что и приложение Magento - убедитесь, что вы используете сокет linux вместо соединения TCP / IP.
  5. Если ваш сервер базы данных не находится на том же компьютере, что и приложение Magento - убедитесь, что PHP не нужно выполнять разрешение DNS каждый раз, когда он запрашивает базу данных.
  6. Ознакомьтесь с рекомендациями по настройке производительности базы данных, статья percona уже упоминалась в одном из ответов, проверьте также https://github.com/major/MySQLTuner-perl
  7. Проверьте режимы индексации magento, переключитесь на индексирование по расписанию и выполняйте переиндексацию каждую ночь или после завершения импорта, а не при сохранении продукта. https://devdocs.magento.com/guides/v2.2/extension-dev-guide/indexing.html#m2devgde-indexing-modes

В случае, если все вышеперечисленное выполнено и вам нужно больше производительности:

  • Профилируйте ваше приложение с помощью xDebug или blackfire, посмотрите, где находятся бутылочные горлышки, попробуйте их устранить.
  • спросите вокруг, но будьте более конкретны, объясните, что именно вы пытаетесь улучшить в данный момент.
  • Попросите партнера Magento или сертифицированного разработчика Magento получить некоторую помощь.
Антон Борицкий
источник
0

Проблема в том, что SOAP-вызовы очень дороги. Если вы запускаете SOAP-запрос на добавление / редактирование / удаление продукта, Magento должен объединить множество таблиц, чтобы получить всю необходимую информацию. Такое поведение в сочетании с самим PHP замедляет количество продуктов или данных, которые вы хотите обработать.

Сам Magento рекомендует для управления трафиком кластер из 5 узлов (1 БД, 4 веб-сервера).

Я бы порекомендовал масштабировать по горизонтали, например, с помощью AWS. Это может оказать большее влияние на ваш бизнес, но ИМХО, вы не сможете настроить Magento для лучшей работы.

В AWS вы должны использовать функцию группы автоматического масштабирования, которая отвечает за количество запускаемых вами серверов. Каждый раз, когда вы добавляете данные, появляются новые серверы, которые справляются с нагрузкой. То же самое можно сделать с помощью AWS RDS (DB Service) очень просто и быстро.

В случае, если AWS вообще не подходит, вы можете попробовать настроить Magento и PHP. Я бы порекомендовал проверить настройки для:

Дэвид Ламбауэр
источник
0

Эта ссылка объясняет, как настроить использование памяти MySQL. Поскольку у вас так много оперативной памяти, вы можете извлечь выгоду из выделения большего количества для MySQL. Это может быть более простым и менее затратным ($) решением, чем создание выделенного сервера базы данных.

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

Также вы можете найти полезную утилиту MySQL Workbench, которая поможет вам в этой настройке, а также в мониторинге того, что делает MySQL в целом. Утилита сделана Oracle / MySQL; это не какое-то случайное условно-бесплатное приложение.

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

Плоткин
источник