Каковы особенности проведения нагрузочного тестирования сервера?
Добрый день!
Расскажите пожалуйста, каковы особенности проведения нагрузочного тестирования сервера?
Если возможно, то буду рад и ссылке на учебно-справочные материалы.
Меня интересуют следующие вещи.
Я знаю следующие инструменты стресс-тестирования сервера Jmeter, ApacheBench, Siege, Tsung, strongloop.com, phanos, loader.io.
Сервер rest через http, имеет функции авторизации и загрузки изображений. Собран на node-express, имеются ряд маршрутов к разным таблицам с некоторым количеством данных в базе данных.
Как проводить стресс-тест ?
Как находить проблемные места в работе сервера?
Я имею ввиду, в интернете есть информация, но я не могу понять пределы того, что нужно делать.
Например, можно сгенерировать с помощью инструментов 100 000 запросов в секунду от 10 000 пользователей (с высоким пингом, имитирующим более медленный интернет).
При этом направить все эти запросы, скажем, на конкретную или случайную строку в базе данных, но на один маршрут.
Затем сделать запросы для тестирования на других маршрутах.
Это как я сейчас представляют стресс-тестирование.
Но как имитировать авторизацию от пользователей (скажем одновременно зашли 10 000 пользователей)?
Можно ли мне в целях обучения это сделать на своем устройстве? Не угробит ли это тестирование ноутбук? (все же оперативная память и процессор не резиновые)
Еще один момент касается проблемных мест. Какими могут быть проблемные места сервера?
Подключение (предоставленная провайдером скорость подключения, скажем 10Мбит/сек)? характеристики процессора? оперативной памяти? дисковых систем?
Какие проблемные места касаются именно софта ? Количество записей? Количество таблиц? Оптимально с точки зрения производительности кода ?
И все это в совокупности?
И, этот вопрос не относится к теме, но все же очень мне интересен, имеется ли практика подключения к серверу через разные порты ?
Я предполагаю сейчас, что все подключения происходят через один порт 443 (или 80), а остальные используются для других нужд. Но прочитал информацию в статье про стресс-тестирование, что люди распределяют трафик входящий на сервер на разные порты (стало быть активных прослушиваемых backend'ом портов больше). Но у меня это как то в голове не укладывается.
Или все же, грамотно настроенный сервер, распределяет трафик на несколько портов и слушает несколько портов для одних и тех же задач ?
Я предполагаю сейчас, что все подключения происходят через один порт 443 (или 80), а остальные используются для других нужд. Но прочитал информацию в статье про стресс-тестирование, что люди распределяют трафик входящий на сервер на разные порты (стало быть активных прослушиваемых backend'ом портов больше). Но у меня это как то в голове не укладывается.
Возможно тебе рассказали про тестирование балансировщика.
Аутентификация = проверка подлинности пользователя через сравнение токенов и пароля с имеющимися в базе данных.
Под авторизацией я знаю одновременно и процесс аутентификации и предоставления прав доступов, согласно установленной для пользователя роли, предположил, что нужно иметь возможность протестировать имеют ли некоторые пользователи доступ к каким-то маршрутам, к которым не должны иметь доступа (правда не знаю насколько этот сценарий проверки возможен для стресс-теста).
Вероятно я неправильно понимаю, что такое авторизация.
Впрочем действительно, проще было написать "как имитировать процесс аутентификации", а лучше инициировать его, чтобы боты зашли под записями реально имеющихся в базе данных тест-пользователей.
andresssss, в 21 веке процесс аутентификации и авторизации разделен на 2 разные системы.
Аутентификация проверяет твою личность. Авторизация - проверяет тройку (личность-действие-объект)
В качестве примера. Ты пришел на семинар по NodeJS. На ресепшене тебя проверили паспорт и телефон и выдали
бейджик. Это аутиентификация. Потом ты поднялся в конференц-зал и охранник возле зала проверил
твой бейджик. Авторизовался. Охраннику уже не нужен паспорт потому что в рамках этой системы
его функции упрощаются.
В наше время аутентификация - многофакторная. Сложная. И отдается на откуп Google/Facebook/OpenId e.t.c.
Авторизация - это ваше приложение которое работает уже с идентификаторами юзеров которые пришли
из внешних сервисов выше.
Начинаем с того, что определяем, что мы хотим симулировать в нашем тестировании.
Например, Toster.ru - изучаем логи и аналитику сервера, видим Х пользователей одновременно в среднем, в пике Х*10. Пользователь читает А вопросов, отвечает на В.
Мы хотим проверить, что будет если кол-во пользователей увеличится в 5 раз.
Значит мы должно просимулировать примерно такой паттерн поведения пользователя как видим в логах, но в кол-ве в 5 раз больше.
Нагружаем, анализируем скорость ответа, кол-во ощибок и т.п.
Если все работает как и раньше - отлично.
Если медленно и с ошибками - смотрим по мониторингу серверов, что перегружено. Масштабируем узкие места (горизонтально и/или вертикально),
Повторяем тест.
И так по кругу.