Нагрузочное тестирование 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