Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля
Новогодние скидки до 25%!
Подробнее

Нагрузочное тестирование Netcat

Задача

Заранее предсказать, какую нагрузку сможет выдержать произвольный проект на Неткэте, невозможно, потому что это зависит от самых разных факторов, например:

  • функционал и качество внедрения (конкретного сайта, разработанного на базе Неткэта)
  • параметры и архитектура серверной площадки
  • загруженность каналов
 

Поэтому мы тестировали готовый сайт (Универсальный интернет-магазин из каталога готовых сайтов), работающий на одной из старших (то есть самых «тяжелых») редакций  – Netcat E-commerce). Мы хотели знать, какую нагрузку – посетителей, просмотров страниц, заказов - выдержит такой сайт, расположенный на:

  • одном сервере средней мощности
  • таком же сервере, но с включенным кешированием
  • кластере из трех таких же серверов с включенным кешированием
 

Такие данные помогут разработчикам и пользователям сориентироваться в вопросе нагрузки на свой проект, расходах на сервера, а также спрогнозировать расходы при росте посещаемости.

.

Подготовка к тестированию

Для тестирования были использованы сервера следующей конфигурации: Xeon E3-1275 V5 4 ядра 4000 MHz, 2 * SSD SATA2.5" 480GB SAMSUNG SM863, 2 * DDR4 16GB Kingston

Хостинг-площадка: Beget

Серверное ПО

  • Операционная система: centos 7.3
  • Ядро: Linux 3.10.0-514.6.1.el7.x86_64
  • nginx 1.10.2
  • php-fpm 7.1.1
  • модули PHP bz2, calendar, cgi-fcgi, Core, ctype, curl, date, dom, exif, fileinfo, filter, ftp, gd, gettext, hash, iconv, json, libxml, mbstring, mcrypt, mysqli, mysqlnd, openssl, pcre, PDO, pdo_dblib, pdo_mysql, pdo_sqlite, Phar, Reflection, session, SimpleXML, sockets, SPL, sqlite3, standard, tokenizer, wddx, xml, xmlreader, xmlwriter, xsl, Zend OPcache, zip, zlib
  • mariadb 5.5.52
  • Файловая система: ext4, дефолтные опции монтирования, использован lvm, mdraid RAID1
 

Для второго и третьего эксперимента включалось кеширование средствами nginx со сроком жизни кэша 10 минут. В третьем эксперименте на первом сервере располагался балансировщик и php-fpm, на втором php-fpm, на третьем MySQL и php-fpm.

Конфигурация Netcat

Готовый сайт: Универсальный интернет-магазин

Редакция: Netcat E-commerce

Модули: Ядро, Поиск по сайту, Конструктор лендингов, Личный кабинет, Подписки и рассылки, Логирование, Комментарии, Витрина товаров, Базовый интернет-магазин, Счета и Акты, Гибридный интернет-магазин, Приём платежей, Конструктор скидок и купонов, Конструктор доставок, Интеграция с 1С и торговыми системами, Статистика посещений, Файл-менеджер, Кэширование, Календарь, Маршрутизация, Облако тегов, Управление рекламой на сайте

Количество товаров: 106619 SKU

Для второго и третьего эксперимента в сценариях кеширования были настроены исключения на страницы, содержимое которых зависит от текущей сессии (корзина, оформление заказа, сравнение товаров и пр.).

Кроме того, в процессе тестирования была разработана и внедрена технология асинхронных врезок, которая позволяет кешировать только неизменяемые части страниц, а зависимые от пользователя (сниппет корзины, «вы недавно смотрели», сниппет авторизации) генерировать на лету с минимальной нагрузкой на сервер. Эта технология доступна в версии Неткэта 5.8, который выйдет в начале апреля 2017 года.

.

Методика тестирования

«В декабре 2016 года Дмитрий Васильев, генеральный директор Netcat, поставил перед нами задачу: провести нагрузочное тестирование платформы в различных режимах и на различном сервером оборудовании. При этом, с одной стороны, предполагалась максимальная нагрузка на используемые ресурсы веб-сайта - как в плане количества товарных позиций, SKU, так и в плане запросов от «реальных» пользователей. С другой стороны, серверное оборудование специально выбиралось из среднего ценового диапазона: такое может себе позволить почти любой владелец интернет-магазина в России. Нам важно было создать максимально реальные условия использования платформы Netcat под большой нагрузкой.

В первой, предварительной, серии тестов платформы мы использовали ПО Яндекс.Танк и генераторы нагрузки Phantom и JMeter. К сожалению, первый работал нестабильно в нашем серверном окружении, а второй требовал значительных ресурсов (для создания реалистичной нагрузки 1 сервера нам потребовалось 10 с JMeter). В результате, в финальном тестировании в феврале 2017 года мы использовали модифицированное ПО http_load, которое позволяло отправить огромное (несколько десятков тысяч) произвольных HTTP-запросов с 1 сервера, не нагружая при этом сам тестирующий сервер (тестируемое окружение отказывало раньше, чем тестирующее).

На стадии подготовки было собрано 2000 различных сессий реальных пользователей, для каждой был подготовлен отдельный бинарный файл http_load, который далее был запущен по своему сценарию. Отдельными сценариями выполнялись запросы на создание заказов на сайте. У динамической системы, платформы Netcat, было два предела прочности: на обработку простых (просмотров страниц) и сложных запросов (создание заказов). В ходе тестирования важно было соотнести оба предела в рамках характерных показателей посещаемости сайта (глубина просмотра и конверсия сайта). Ибо большое количество заказов без просмотров страниц, равно как и большое количество просмотров страниц без заказов являются чисто синтетическими, нереальными случаями.

Балансировка была достигнута при примерно 1 заказе на 1000 просмотров страниц (это соответствует конверсии 1% при глубине просмотра 10 страниц), и является хорошими показателями для любого магазина. Дополнительно в ходе тестирования имело смысл сбалансировать максимальное время ожидания ответа сервера по количеству запросов/заказов (чтобы получить параметры работы, максимально комфортные для посетителя), для тестирования сервера без кэширования это не было выполнено.»

Николай Мациевский, Генеральный директор Айри

.

Результаты тестирования на часовом отрезке

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

Итоговые результаты

Поделиться

Комментарии 0

Описание проекта