Перед началом сезона к нам обратился магазин автозапчастей: нужно было оценить запас прочности сайта - выдержит ли он приток посетителей и рекламную кампанию. Каталоги автозапчастей тяжелее обычных магазинов: десятки и сотни тысяч товаров, миллионы аналогов, постоянные выгрузки и синхронизация с 1С. Нагрузка здесь высокая сама по себе, и страницы открываются дольше.
Тест задумывался как пилотный, поэтому сценарии были простыми. Перед прогоном на сайте отключили весь кэш - и Битрикса, и MySQL, - чтобы увидеть честную производительность под нагрузкой в 100 потоков.
Что показали замеры
- →Главная - генерируется за 0,5 с, но грузится клиенту за 2,8 с и даёт пиковую нагрузку на сеть 650 Мбит/с.
- →Карточка товара - на границе приемлемого: загрузка около 2,3 с.
- →Список товаров - медленно: генерация до 3,6 с, загрузка до 4,8 с.
- →Поиск по цифровому артикулу - быстрый по генерации, но время загрузки впятеро больше времени генерации.
- →Полнотекстовый поиск - недопустимо медленно: до 11,6 с даже при 50 потоках.
Как читать такие цифры
Важно сравнивать время генерации (сколько сервер собирает страницу) и время загрузки (сколько ждёт клиент). Когда генерация мала, а загрузка велика - проблема в статике: на главной странице слишком много картинок, стилей и скриптов, отсюда и 650 Мбит/с на сеть. Обратная картина у полнотекстового поиска: он долго генерируется, но сеть почти не грузит - значит, дело в логике поиска, а не в канале.
Выводы по проекту
- →список товаров и поиск по буквенно-цифровому артикулу - оптимизировать;
- →логику полнотекстового поиска - серьёзно переработать;
- →статику сжать, особенно на главной, и подключить CDN;
- →сетевой канал поднять до 1 Гбит на постоянной основе.
На 1-гигабитном канале сервер хоть и тормозил местами, но отказа сервиса не было - продолжил работать. На 100 Мбит он бы не справился.
После теста клиент получил картину производительности и план доработок, внедрил их - и магазин выдержал сезон. Как устроено нагрузочное тестирование в принципе - сценарии, выбор сервиса, типичные ошибки - разбираем в статье нагрузочное тестирование: почему сайт тормозит и сколько он выдержит. Часть нагрузки на больших каталогах снимает HTTP-кэширование. Хотите узнать запас прочности до сезона - проведём тест, разберём задачу на диагностике.



