Випуск продуктивності з 1k до 10k веб-сайтів / магазинів


9

Я намагаюся знайти спосіб покращити продуктивність Magento, коли кількість веб-сайтів / магазинів перевищує 1 к, а моя мета - близько 10 к. Ось кілька питань; будь-які поради / допомога надзвичайно вітаються!

  1. Додавання нових веб-сайтів / магазинів відбувається повільно;
    Я коментую $ this-> cleanModelCache () в _afterSave () в Mage_Core_Model_Ab Абстракція, і ситуація здається кращою, але стає все повільніше із збільшенням кількості веб-сайтів / магазинів. І я не знаю, що це вплине на всю систему в майбутньому.

  2. Api-дзвінки стають повільними.
    Один з основних процесів - це наведення порядку; моя спеціалізована модель займається цим обробкою деяких даних і фактично використовуючи модель продажу / котирування та моделі продажу / послуги_ цитата. Процес починається з Оаута. І Oauth, і замовлення займають більше часу, коли кількість веб-сайтів / магазинів зростає, а споживання пам'яті здається більшим. Чи пов’язано це з тим, що Mage завантажує config xml, і тим, що дані конфігурації збільшуються зі збільшенням кількості веб-сайтів?

  3. Відкриття n98-magerun dev: консоль займає більше часу; не знаю причини цього.

  4. Збереження конфігурації з панелі адміністратора займає більше часу; не знаю, як її покращити.

Чи можливо реконструювати спосіб Magento генерувати та завантажувати конфігураційні дані, щоб знизити споживання пам'яті? Це один із факторів, які спричиняють проблеми в моїй ситуації?

Поточний екземпляр Magento: Версія = Magento EE 1.14.2.4;
Налаштувати кеш; інший кеш вимкнено;
Використання Mysql 5.6 та MongoDB (для каталогу_category_entity, catalog_product_entity, core_website);
кількість веб-сайтів = кількість магазинів = кількість переглядів = 1024;
кількість товару = 4501;

Дякую всім заздалегідь!


2
чому підтримка magento не може вам допомогти ???
MagenX

Як мені отримати допомогу від них? Я новачок у спільноті .. дякую!
Джек.W

1
у вас є корпоративна версія, не впевнені, де ви її отримаєте, але якщо за нею немає підтримки Magento, просто витрачайте гроші та час. ви повинні добре вдарити їх кулями, щоб змусити бігати, як кролики, що допомагають вам. який сенс мати корпоративну версію ???
MagenX

1
але очевидна відповідь на ваш запит - окремі магазини
магенто

Ну правильно .. Я попрошу свого боса про рахунок .. ха-ха.
Джек.W

Відповіді:


3

Однією з причин того, що він стає повільним, є те, що конфігурація кожного магазину дублюється з / config / веб-сайтів та / config / global, а код для цього не менш ефективний. Будь-яка зміна налаштувань може призвести до зниження 10-хвилин, якщо не годин, зниження продуктивності та пропускної здатності. Зробити це більш ефективним, в основному буде означати, що Бен Маркс піде за вами ... і не в хороший спосіб.

Якщо ви збираєтеся спуститися цим маршрутом, найпростішим способом було б мати встановлення 10k Magento та мати якогось брокера, який делегує запити на відповідний веб-сайт. Хоча, звичайно, це залежатиме від конкретного випадку використання.

[додано]

Залежно від випадку використання ви можете використовувати категорії як псевдо магазини. Технічно ви можете використовувати макет XML, щоб змінити тематику в магазині. Але тоді ви зіткнетеся з обмеженням оформлення каси. Усі магазини повинні поділити замовлення.

Так чи інакше, магазини Magento 10k можна зробити, оскільки це неможливо. Але це буде непроста дорога, який би шлях ви не вибрали.


Привіт Кевін, дякую за відповідь! Так, я бачу код, який оновлює дерево конфігурацій, це loadToXml (), якщо я не помиляюся. Моя думка така; і ви сказали, що це не дуже гарна ідея змінювати його? Що ти маєш на увазі під Бен Маркс, що йде за мною? Крім того, здається, що кожен запит http, який надходить до Magento, з часом завантажить дерево конфігурацій, чи правильно це? Будь-яким способом я можу скоротити розмір? Я, мабуть, повинен подумати над тим, щоб отримати екземпляри Magento 10k ... будь-які думки про те, скільки ресурсу знадобиться? Дуже дякую Кевін!
Джек.W

Але наявність 10k Magento установок означає 10 к. Екземплярів mysql так? Я поняття не маю, як це зробити, або якщо це гарна ідея ..
Jack.W

1
Ні, це означатиме наявність 10k mysql баз даних, але всі 10k можуть бути в одному екземплярі mysql.
Крістіан

1
"Бен Маркс", що йде за вами, - це посилання на цей camo.githubusercontent.com/…
Кевін Шрьодер

1
10k Magento встановлення означає 10k MySQL баз даних, однак це було б розповсюджено. Сценарій було б набагато простіше розгортати 10k індивідуальні установки Magento, ніж було б зробити так, щоб існуючий основний код працював з 10-кратними магазинами.
Кевін Шредер

1

Ви можете спробувати зламати ядро ​​та ввімкнути розбиття кешу веб-сайту. Ви можете спробувати зламати базу даних та зберігати інформацію про конфігурацію в пам'яті. Ви можете спробувати замінити кеш конфігурації чимось розумнішим - скажімо кешування інформації з файлів xml [які є статичними та застосовуються до всіх веб-сайтів та магазинів], одночасно динамічно витягуючи дані заміщення.

Я серверний хлопець, тож я хотів би спілкуватися з базою даних. Тим більше, що це банально робити.

Якщо у вас є контроль над сервером бази даних: Перейменуйте таблицю core_config_data в core_config_data_offline Створіть нову таблицю core_config_data за допомогою механізму зберігання даних MEMORY http://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html Скопіюйте всі дані з core_config_data_offline в core_config_data

Налаштуйте завдання cron, щоб перевірити, чи є core_config_data, чи він копіює всі дані звідти в core_config_data_offline. Якщо цього немає, створіть його та скопіюйте все від core_config_data_offline до core_config_data

Вимкніть кеш-конфігурацію. Якщо кеш конфігурації увімкнено, ви отримуєте лише підвищення продуктивності вперше, коли дані конфігурації читаються з бази даних - після цього вони знаходяться в кеші, і ви страждаєте. Знизу файли xml більше не кешовані, тому ви торгували хітом продуктивності несеріалізації величезних даних конфігурації для хіт-характеристики для аналізу синтаксису файлів xml.

Ви також можете поекспериментувати зі зміною файла Mage / Core / Model / Config.php та включити окремі кеші веб-сайтів. За замовчуванням дані кожного конфігураційного зберігання зберігаються окремо. Всі дані конфігурації веб-сайту кешовані в одному об’єкті.

Зауважте, що це стосується лише переосмислення конфігурації [налаштування адміністратора]. Тож якщо ви зробите всі зміни конфігурації на рівні магазину, уже встановлений. Якщо ви використовуєте "успадковувати з веб-сайту" і вносите більшість змін у конфігурацію вашого магазину на рівні сайту - тоді кеш містить кожен веб-сайт. Розбивши його, ви зможете вибити його набагато краще. захищений $ _cacheSections = array ('admin' => 0, 'adminhtml' => 0, 'crontab' => 0, 'install' => 0, 'store' => 1, 'веб-сайти' => 0);

до

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

Привіт Гері, дякую за таку корисну відповідь! У мене є деякі запитання: 1) З мого спостереження, запит до бази даних не є проблемою, навіть із більш ніж 1 к веб-сайтами / магазинами; Так що якщо це так, чи все-таки допоможе зберігання пам'яті? 2) я не знаю, чи це правильно, але схоже, кеш конфігурації зберігає лише інформацію про систему та модулі; так це має щось спільне з конфігурацією веб-сайту / магазину? 3) Чи існує спосіб, щоб magento розпізнавав певний ідентифікатор магазину / веб-сайту з http-запиту і таким чином завантажував лише відповідний конфігураційний файл? Дуже дякую, Гері!
Джек.W

2
Ці рекомендації не стосуються проблеми, яку відзначала ОП. Вимкнення кеша конфігурації в кінцевому рахунку вб'є систему. Це змусить Magento завантажити всі файли конфігурації, об'єднати їх, потім об'єднати всі / global, потім об'єднати всі / веб-сайти, а потім об'єднати все це у кожен вузол / магазини. Це станеться для кожного запиту. На 10-ти веб-сайтах ви можете переглядати хвилини настінного годинника за запитом .
Кевін Шрьодер

Гей Кевін, дякую за відповідь; Насправді я планую перемістити таблицю core_config_data в пам’ять, включити кеш для конфігурації системи та модуля, зупинити об'єднання core_config_data в дерево конфігурацій та зробити функції, які читають цю частину даних безпосередньо на запит із бази даних. Як ти гадаєш?
Джек.W

1
Проблема не в core_config_data. Проблема полягає в тому, що конфігурації магазину об’єднуються з / веб-сайтів, об'єднаних з / глобальними в XML. База даних буде ідеально чудовою. Це PHP буде ненавидіти життя через конфігурацію зливається. На вашому кроці налагодження через Mage_Core_Model_Resource_Config :: loadToXml зверніть особливу увагу на рядки 110 та наступні
Кевін Шрьодер

1
Тепер повернутися до моєї таблиці пам’яті. Кешування даних означає зберігання їх десь, до яких можна отримати швидкий доступ. Magento кешує дані конфігурації в серійний об'єкт php - якщо ваші дані конфігурації величезні, це означає, що PHP повинен десеріалізувати величезну кількість даних для кожного запиту. Якщо ви знаєте, як використовувати xdebug, профіліруйте деякі повільніші завантаження сторінки і подивіться, скільки часу витрачається на функцію несеріалізації : php.net/manual/en/function.unserialize.php - якщо вона величезна [понад 100 мс], то "кешування" конфігурації порушує вашу систему.
Гері Морт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.