Поддержка и нагрузочное тестирование интернет-магазина 5WATT

В рамках поддержки интернет-магазина https://5watt.ua/ потребовалась оценка производительности и возможностей движка и сервера.

Клиенту важно было понять, способны ли CMS PrestaShop и текущая конфигурация «железа» нормально выдерживать поток посетителей.

Чтобы получить достоверные данные для повышения производительности и ускорения сайта, команда «Красного хамелеона» провела нагрузочное тестирование.

Как мы ускоряли интернет-магазин 5watt

Сервисы для проведения тестов

  • https://loader.io/
  • https://frugaltesting.com/
  • https://www.joedog.org/siege-home/
  • https://gatling.io/open-source/

Cуществует масса сервисов для нагрузочного тестирования сайта. Начиная от бесплатных онлайн-сервисов (loaddy.com, loader.io) и приложений (gatling.io, Grinder, Apache Bench, siege, Apache Jmeter) и заканчивая платными (k6.io, loadview-testing.com, loadninja.com).

Мы для нагрузочного тестирования используем Gatling. Он сочетает в себе гибкость настроек, широкие возможности по тестированию с использованием сценариев и легкую отладку, возможность построения графических отчетов для анализа.

Николай Саранюк,

Создатель веб-агентства Красный хамелеон,
специализирующегося на разработке интернет-магазинов с 2013 года

Условия проведения нагрузочного тестирования

  • Движок: CMS PrestaShop.
  • Подключена CDN Cloudflare.

Этапы тестирования

  1. Первичное тестирование с помощью нескольких инструментов.
  2. Контрольные тесты после дополнительных настроек сервера.

Первый этап нагрузочного тестирования сайта

loader.io

В течение десяти минут запустили четыре теста с помощью сервиса loader.io.

В первых трех тестах в течение одной минуты сайт посещало 250, 500 и 1000 пользователей:

250

первый тестовый сценарий

500

второй тестовый сценарий

1000

третий тестовый сценарий

Время отклика при этом было стабильно хорошее:

нагрузочное тестирование интернет-магазина

При тесте на 1000 пользователей сервер был загружен только на 5-10 %.

Во время четвертого теста на сайте было уже 100 пользователей в секунду в течение 1 минуты.

четвертый тестовый сценарий

Время отклика также было стабильно хорошее. Был заметен скачок из-за быстро увеличенного количества пользователей.

Загрузка сервера достигла 30%.

нагрузка на сервер

frugaltesting.com

Первый тест длился 3 минуты при нагрузке 20 пользователей в секунду.

тест с использованием FrugalTesting
пример нагрузочного тестирования

Загрузка сервера

максимальная нагрузка на сервер


В ходе теста на сайт зайти не удалось. Нагрузку на сервер отметил администратор и изменил настройки PHP.

Повторно запустили аналогичный тест после правок уже на 10 минут.

В этот раз страницы сайта открывались, работала фильтрация, переход в карточку товара, оформление заказа.

Siege

Далее запустили тест Siege: 1 минута и 10 одновременных пользователей, режим бенчмарка.

Отличие этого теста в том, что сервис ходил по страницам фильтров, поиска и других в течение минуты.

Загрузка сервера добралась до 100%.

тест с помощью Siege

Результат теста:

результат тестирования в Siege


Для сравнения этот же тест только на главной странице дал нагрузку только 20 %.

А тест с 5 одновременными пользователями – 50 %.

При этом со стороны реального пользователя не было заметно ухудшение скорости, сайт работал хорошо.

Gatling

После этого были запущены сценарии Gatling:

  1. 10 пользователей в минуту
  2. 100 пользователей в минуту
  3. 2 пользователя в секунду в течение 1 минуты (всего 120 пользователей)
  4. 5 в секунду в течение 1 минуты (300 пользователей)
  5. 10 в секунду в течение 1 минуты (600 пользователей)
  6. 20 в секунду в течение 1 минуты (1200 пользователей)
  7. 5 в секунду в течение 5 минут (1500 пользователей)
  8. 10 в секунду в течение 5 минут (3000 пользователей) 

В итоге тестирования с помощью Gatling пришли к таким выводам:

  1. В тесте на 20 посетителей в секунду удалось добиться получения отказов.
  2. Сервер стабильно держит до 100 запросов в секунду (это 500 пользователей одновременно на сайте), при большем количестве перестает справляться.
  3. Сервер способен держать нагрузку 10 пользователей в секунду в течение одной минуты, дальше начинаются отказы.
  4. Нагрузку 5 пользователей в секунду при существовавшей конфигурации ресурс выдержал 5 минут (т.е. выдержит и дольше).
  5. Если подтянуть показатели сервера, интернет-магазин сможет без проблем держать большую нагрузку.

Первый этап тестирования закончился выявлением ряда проблем с производительностью, а также ответом на основной вопрос клиента о способности PrestaShop держать нагрузку.

В текущей конфигурации движок (с учетом подключенного Cloudflare) способен выдерживать нужное количество посетителей и отказываться от CMS из-за производительности потребности нет.

Второй этап нагрузочного тестирования интернет-магазина

В течение следующей недели вносились правки в конфигурацию сервера, после чего провели повторные тесты.

Для контрольной проверки использовали только Gatling с такими сценариями:

5 пользователей в секунду в течение 5 минут (всего 1500 пользователей) – кликабельно

тестирование с помощью Gatling

10 пользователей в секунду в течение 5 минут (всего 3000 пользователей) – кликабельно

второй этап нагрузочного тестирования

В обоих отчетах видны явные улучшения.

Несмотря на то, что отказы во втором тесте сохранились, заметно уменьшилось их количество с 11700 до 7000.

Кривая активных пользователей в первом сценарии ранее увеличивалась, а после изменения конфигурации сервера перестала нарастать. Это значит, что сервер успевает обрабатывать все запросы, а не накапливает их.

Было

тест производительности сервера

Стало

повышение эффективности сервера

Также сильно улучшилось время ответа.

Было

большее время ответа сервера

Стало

меньшее время ответа сервера

Распределение времени ответа выглядело так:

Было

распределение времени ответа сервера

Стало

распределение нагрузки на сервер

Нагрузочное тестирование интернет-магазина 5watt позволило определить предельные показатели загрузки сервера и CMS, выявить и оперативно исправить слабые места, чтобы существенно повысить производительность ресурса. В итоге добились сильного снижения отказов, а также корректного распределения нагрузки на «железо», что уменьшило среднее время ответа сервера.

Сомневаетесь, что ваш сайт держит нагрузку?