назад

Стабілізація роботи сайту, підвищення швидкості виведення сторінок при великих навантаженнях

Клієнт: інтернет-магазин Zabros - Все для риболовлі.

Завдання: вирішити проблему зависання сайту під час обміну сайту та формування вивантажень.

Результат: Стабілізація часу формування сторінки до 0.2 секунд під час обміну або великого навантаження на сайт.

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

Що було зроблено:

Насамперед було проведено аудит сервера та сайту для виявлення причин зниження швидкодії сайту. На сервер був підключений моніторинг, який відстежував показники завантаженості сервера по процесору, пам'яті та дискам. Були налаштовані метрики та підключені шаблони моніторингу окремих служб та сторінок сайту, фіксували швидкість відповіді сервера та завантаження різних сторінок (головна, каталог, картка товару, фільтровані сторінки каталогу), збирали дані про кількість та час запитів до Nginx, Apache та MySQL.

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

З боку сервера були внесені необхідні зміни в налаштування для зниження навантаження, змінено баланс ресурсів для PHP та MySQL. Регламентні завдання були рознесені за часом таким чином, щоб під час найбільшої відвідуваності сайту завдання не виконувались. Додатково було сформовано завдання для розробників змінити процедуру обміну та формування фасетного індексу. Це знизило середній час відповіді сервера з 2.2 секунди до 0.2 секунди.