Підвищення продуктивності дзвінків 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 запускав у процесі додавання до бази даних тисячі команд. Чи це добре?

Коли я оновлюю його імпортом CSV Magento, це набагато швидше.

Що я можу зробити, щоб прискорити цей Magento2? У цій ситуації неможливо добре працювати з цим магазином.


Які розширення ви використовуєте? Проблема може бути пов’язана з одним із ваших розширень.
Бунямін Інан

@tadeus Ви вирішили свої проблеми зі швидкістю за останні 2 роки? Якщо ні, ВІДМОВА: Я є автором вмісту веб-сайту, згаданого у моєму профілі, Мережевого профілю, де ми маємо безкоштовні утилітні скрипти для підвищення продуктивності та інших служб аналізу.
Вілсон Хоук

Відповіді:


1

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

ключовим є використання пакетного імпорту, як ви самі згадали:

Коли я оновлюю його імпортом CSV Magento, це набагато швидше.

Подумайте про перегляд свого 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 дуже дорогі. Якщо ви подали запит на додавання / редагування / видалення продукту, Magento повинен приєднатися до багатьох таблиць, щоб отримати всю необхідну інформацію. Така поведінка в поєднанні з PHP сама по собі робить повільним кількість продуктів або даних, які ви хочете обробити.

Сам Magento рекомендує 5-вузловий серверний кластер (1 x DB, 4 x Webserver) для обробки трафіку.

Я б рекомендував масштабувати горизонтально, наприклад, за допомогою AWS. Це може мати більший вплив на ваш бізнес, але IMHO ви не зможете налаштувати 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/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.