Попереднє прогрівання кешу повного сторінки Magento Enterprise


19

Переваги продуктивності кешу на повній сторінці в Magento Enterprise досить добре відомі. Що може бути не дуже відомим, це те, що для повної вигоди від цього потрібно реалізувати його повністю та гаряче, особливо на великих наборах продуктів, де у вас немає лише декількох сторінок, використовуючи для цього органічний трафік Прем'єр це досить швидко.

Magento включає вбудований кронштейн для обходу сайту та зігрівання FPC рано вранці.

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

  • Складіть сценарій оболонки, щоб сканувати кожну сторінку в створеному файлі Sitemap.
  • Використовуйте окремий запис crontab та короткий скрипт PHP для завантаження Magento та безпосереднього виконання процесу сканування.

Будь-які думки та / або досвід щодо цього вітаються!


1
Насправді ви можете зателефонувати сканеру Enterprise з окремого файлу і використовувати crontab ваших серверів, щоб запустити його, щоб він не заважав.
Toon Van Dooren

Відповіді:


16

Ви можете використовувати облогу в поєднанні з sitemap.xmlфайлом, як це робить MageSpeedTest .

#categories
curl http://yourmagentostore.com/sitemap.xml | sed 's/\<url\>/\<url\>\n/g' | grep 0.5 | sed 's/.*loc>\(.*\)<\/loc.*/\1/g' > urls.txt
#products
curl http://yourmagentostore.com/sitemap.xml | sed 's/\<url\>/\<url\>\n/g' | grep 1.0 | sed 's/.*loc>\(.*\)<\/loc.*/\1/g' >> urls.txt

Потім бігайте

siege -i -c 1 -t 7200s -f urls.txt

Вміст походить звідси .


Ви також можете додати затримку між запитами, використовуючи–delay
Ben Lessani - Sonassi

Примітка. Ці команди sed не працюють на Дарвіні, але працюють на CentOS.
davidalger

1
Це не гарантує, що кожна URL-адреса буде "прогріта". облога буде випадковим чином вибирати URL-адреси для потрапляння з файлу, але не обов’язково відвідувати кожну URL-адресу.
Джо Констант

22

Ми просто ні - зовсім. Колись. Ми будемо говорити про це знову і знову, але

Кешування! = Продуктивність

Ваш сайт повинен бути швидким без додавання FPC (або лаку за цим фактом). Завжди буде час, коли вміст не буде загрунтовано (ваш сценарій вище).

У завантаженому магазині час завантаження сторінки за допомогою FPC не повинен бути настільки вражаючим, ніж не FPC; Magento цілком щасливо здатний < 400msзавантажувати сторінки у стандартних кешах (на категоріях / продуктах / сторінках пошуку). FPC призведе до цього < 80ms- але має застереження.

  1. Інформація про запаси / ціни застаріла до закінчення терміну дії недійсної або TTL
  2. Нові товари / більш релевантний пошук застаріли до закінчення терміну недійсності або TTL

    тощо.

Чому покладатися на FPC (або лак) - погана ідея

Якщо ви хочете постійно гарантувати, що кеші грунтуються вручну, ймовірно, є кілька причин

  1. Вам не вистачає природного удару, щоб зберегти кеш-пам’ять (див. "Де FPC корисний")
  2. Ваш сайт занадто повільний без них

Ви не можете все кешувати

Якщо ви візьмете магазин із лише 5 категоріями, вкладеними в 2 рівні глибиною, 5 фільтрованими атрибутами, 5 варіантів атрибутів кожен та 1000 товарів; це багато можливих комбінацій.

25 варіантів на вибір, вибираючи один до 5 разів поспіль - я не статистик , але я знаю, що це ... (якщо припустити, що кількість параметрів атрибутів не зменшується повністю)

25 possible URLs on the first selection
20 possible URLs on the second selection
15 possible URLs on the third selection
10 possible URLs on the fourth selection
5  possible URLs on the fifth selection

5^5 = 3,125 possible combinations (for top level categories)
5^4 = 625 possible combinations (for 2nd level categories)

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

25 possible URLs on the first selection
10 possible URLs on the second selection
3 possible URLs on the third selection

5^3 = 125 possible URL combinations 

Тоді рази, що на 5 категорій, тобто 625 URL-адрес. На цьому етапі ми говоримо про крихітний каталог і повністю ігноруємо всі URL-адреси продукту.

Ми також не беремо до уваги те, що якщо ви вклали категорії з is_anchorувімкнутим, воно буде експоненціально зростати.

Отже, щоб сканувати цей обсяг сторінок - ви або маєте сподіватися, що час завантаження вашої сторінки буде приємним і низьким для початку, так що це швидкий легкий процес (таким чином перемагаючи призначення сканування) - або що у вас є достатньо часу для його завершення до закінчення терміну дії TTL.

Якщо на ваших сторінках час завантаження сторінки становив 0,4 секунди, а у вас 8-ядерний процесор - тоді ...

625 * 0.4 = 250 / 8 = 31 seconds

0,5 хвилини, непогано - але давайте уявити, що у вас було 2 рази завантаження сторінки

625 * 2 = 1250 / 8 = 156 seconds

Але якщо ви взяли максимально можливий сценарій

3,750 * 2 = 7,500 / 8 = 937 seconds ~ 15 minutes

Отже, це ваш сервер виробництва, під 100% завантаженням процесора протягом 15 хвилин. Ви б зменшили швидкість сканування пропорційно TTL, який потрібно.

Тож якщо ви хочете, щоб вміст мав 3600s TTL, сканування може бути в 4 рази повільніше - тобто. Лише 25% процесора присвячено скануванню. Це дуже багато ресурсів для того, щоб залишити вміст категорії грунтовним - на цьому етапі ми навіть не враховували продукти, пошукові терміни чи додаткові перегляди магазину.

Насправді, лише перегляд розміру комбінацій у catalog_url_rewritesтаблиці (який навіть не враховує параметри шаруватої навігації) дасть уявлення про те, скільки URL-адрес ви можете сканувати.

Кожен магазин, безумовно, буде іншим, але те, що я намагаюсь вразити додому, - це те, що сканування сайту для просування FPC не є практичним. Просто переконайтеся, що ваш магазин швидко починається .

Де FPC корисний

Там, де переваги FPC грають, є у дуже завантаженому магазині - там, де у вас справді високий рівень трафіку, а кеші, природно і постійно, ґрунтуються лише одним падінням ноги.

Тоді FPC починає грати, зменшуючи накладні витрати на інфраструктуру для часто запитуваного контенту - скорочуючи ті повторні дзвінки до сервера Magento.

Тож ми виявили, що FPC чудово розгортається, коли у вас дуже високий рівень трафіку - не для скорочення часу завантаження сторінки - а для зменшення використання ресурсів.

Кого байдуже, я все одно хочу повзати

Ну, тоді у вас є два варіанти

  1. Сканування з шаблону (наприклад, мапа сайту)
  2. Витягуйте посилання сторінки за сторінкою та скануйте кожну

І є багато комунальних служб, які роблять і те, і інше, це я знаю

  1. маг-перфтест
  2. HTTrack
  3. Гайка
  4. Сфідер
  5. Crawler4j

Використання Mage-Perftest

Ви можете легко сканувати свій магазин за допомогою Mage-Perftest, спочатку завантажте його

wget http://sys.sonassi.com/mage-perftest          (64bit) OR
wget http://sys.sonassi.com/mage-perftest-i386     (32bit)
chmod +x http://sys.sonassi.com/mage-perftest*

Потім визначте процес сканування за допомогою карти сайту Magento (ви можете налаштувати це, зробивши мапу сайту будь-яких URL-адрес, за умови, що URL-адреси обгорнуті <loc></loc>тегами). Наступна команда прочитає всі URL-адреси з файлу мапи сайту, а потім сканує (лише PHP) URL-адреси протягом 1440 хвилин (1 день). Якщо сервер перевищує 20% CPU або середнє завантаження 2 - сканування тимчасово призупиниться.

./mage-perftest -u www.example.com -s www.example.com/sitemap.xml -r auto -b -d 1440 -z -a 20 -l 2  

Якщо у вас є 1000 URL-адрес, просканованих протягом 1 дня, це буде приблизно. 1 запит кожні 86 секунд ~ ціль 0,011 RPS


Ви відкриваєте рядок дуже вірно ... Кешування сторінок - це не спосіб досягнення продуктивності. Я знаю, що це. Ви не знаєте, скільки разів я казав клієнтам те саме. Я чесно кажучи, я ніколи не налаштовував сайт, де раніше сканер грунтував FPC, і бачив його лише один раз, коли клієнт ввімкнув його в адміністраторі ... уповільнюючи роботи, оскільки вони керуються файлами кеш-тегів. Основна причина, про яку я питаю, полягає в тому, що я вивчаю ідеї, пов'язані з цим, ґрунтуючись на деяких дослідженнях у білій книзі Nexcess. Для божевільних сайтів з високим рівнем руху трафік кешу після його промивання рано вранці може бути вирішальним
davidalger

1
Я поважаю Nexcess - але їхня біла книга дуже сильно фокусується на кешуванні для досягнення продуктивності - а не на тому, щоб навколишнє середовище вже працювало і щоб код був чистим, швидким та ефективним. Ми пропонуємо лак для наших клієнтів, але не рекомендуємо використовувати його до необхідності. Тільки тоді як засіб скорочення інфраструктурних витрат - тобто. коли ~ 94% неконвертованого / контрольного трафіку споживає цикли процесора. Кешування створює хороші штучні статистичні показники - але насправді нічого не означає, якщо TTL занадто довгі (несвіжий вміст) - або недостатньо трафіку, щоб залишити його грунтовним.
Бен Лессані - Сонассі

1
Для божевільних сайтів з високим трафіком - у нас є кілька, і намагатися тримати кеш гарячим шляхом штучного сканування безглуздо - природний трафік робить це просто чудово. Якщо що-небудь, сканування просто видаляє ресурси, які інакше використовували б клієнти.
Бен Лессані - Сонассі

Я прошу відрізнятись від їхньої білої книги, зосереджуючись на використанні кешування для продуктивності. Вони показували, скільки пропускної здатності може досягти кластер 2 + 1. Вони навіть не торкалися часу завантаження сторінки в ній, лише пропускну здатність транзакцій. Обладнання, яке вони мають, настільки ж оптимізоване, як ви можете отримати… і так, я розумію, що вплив TTL на кешований вміст. Просто для повторного повторення, я не хочу досягти тут ефективності, у нас це вже є. Що б це було вивчено, це способи обійти відставання / падіння пропускної здатності через раннє ранкове промивання кешу, тобто до того, як нормальний трафік набереться.
davidalger

1
Я тоді заплутався. Якщо ваш магазин вже швидкий - але він перепадає, коли ви очистите кеш. Або а) Не очищайте кеш-пам'ять вранці, робіть це напередодні ввечері, і дозвольте пошуковим пошуковим сканам (google / bing тощо) зробити грунтовку для вас або b) отримати потрібну інфраструктуру. Якщо ваш магазин навішується на FPC / Varnish, щоб запобігти затримці / уповільненню - тоді це здається, що ви біжите по краю ножа ...
Бен Лессані - Sonassi

0

Я врятую свою повну ціна за публікацію в блозі однією з цих днів, але тим часом отримаю пік у моєму маленькому кеші тепліше wfpc.

Тестування продуктивності

Ви можете перевірити працездатність свого сайту Magento

./wfpc -t http://mymagentosite.com/sitemap.xml

Finished testing your Magento site performance
Total download time (in seconds)   : 5.0269110202789
Total download time (formatted)    : 0:0:5.026
Average page time (in milliseconds): 502.69110202789

Прогрівання FPC

Ви можете зігріти FPC, який вплине на кожну URL-адресу в sitemap.xml.

./wfpc -w http://mymagentosite.com/sitemap.xml

Ви також можете встановити затримку між запитами, якщо хочете, ось затримка на 1 секунду між запитами.

./wfpc -w -d=1 http://mymagentosite.com/sitemap.xml

Тестовий режим вражає лише 10 URL-адрес випадковим чином, тож після того, як ви прогріли FPC, ви можете запустити тестовий режим, щоб дізнатися, наскільки різниця робить FPC!

Думки

Особисто я вважаю, що тепліше має сенс ... На невеликому сайті з приблизно 40 сторінками час завантаження скорочується приблизно вдвічі FPC. На великому сайті з майже 40 000 продуктами, що використовують Lesti_FPC з APCu як резервний, я використовую трохи більше 200 Мб для кешу, що, чесно кажучи, нічого на виробничому сервері 8 Гб.

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