Назад | Перейти на главную страницу

Как смоделировать трафик с высокой пропускной способностью для тестирования сервера

Я работаю над личным проектом, подобным CDN, и хотел бы протестировать свой сервер под нагрузкой, который представляет собой минимальный nginx + nodejs + ubuntu, работающий на VPS 10 Гбит / с. Я хочу смоделировать что-то, что больше похоже на предполагаемое использование сервера: примерно 10 ГБ двоичных данных, которые будут обслуживаться nodejs за nginx. Соединения с сервером могут быть http или https, каждое соединение является постоянным и запрашивает данные пакетами по 1 Мбайт, что в общей сложности составляет ~ 10-20 Мбайт на каждое соединение. Некоторые соединения могут быть со скоростью 100 Мбит / с с низкой задержкой (20% подключений), некоторые могут быть медленнее 100-200 кбит / с при времени пинга rtt 500 мс (5% подключений). Моя цель - создать трафик, который будет близок к теоретическому пределу в 10 Гбит / с, и попытаться отслеживать статистику сервера, собирать аналитические данные, чтобы увидеть, как мои вещи работают под нагрузкой. Клиенты, которые подключаются к моему серверу, тоже являются моим собственным кодом. На всех клиентах я хочу сохранить журналы, а затем объединить и проанализировать их, чтобы оценить общий результат работы всей системы, когда комбинированная запрошенная нагрузка с моего сервера составляет 50% от теоретического лимита, 75%, ... 90%, 100%, 120 % и т. д. Во время этих нагрузок моя цель - также наблюдать за сервером: использование оперативной памяти, загрузку процессора, частоту разрыва соединения, проверять ведение журнала (чтобы убедиться, что объединенные клиентские записи соответствуют результатам, которые регистрирует сервер).

Мой план - сначала протестировать на сервере 1 Гбит / с (и 10-15 серверов по 100 Мбит / с в разных географических точках для имитации клиентов). Поскольку я управляю клиентами, я просто заставляю их запускать определенный сценарий и выполнять ограниченные загрузки с разной скоростью, чтобы имитировать медленные клинеты.

Что бы вы сделали, если бы вам понадобилось провести стресс-тестирование такой установки? Что-то не так в моем подходе и почему?

Для первого раунда теста вы можете использовать ab - в Тест Apache. Его можно настраивать, и его результаты поучительны.

Например, ab -n 100 -c 5 http://localhost/ будет запускать 100 соединений с уровнем параллелизма 5 против localhost.

Ваш подход очень хорош, я бы просто предложил добавить пару тестовых сценариев поверх существующего жгута:

  1. Начните с одного пользователя и постепенно увеличивайте нагрузку, пока время отклика не превысит допустимые пороговые значения - так называется нагрузочное тестирование
  2. Поставьте свою систему под длительную нагрузку (ночью или в выходные) с ожидаемым количеством пользователей (или немного большим) - так называемый Замачивание Тестирование - это лучший способ определить утечки памяти
  3. В дополнение к стресс-тестированию вы также можете захотеть посмотреть, что происходит, когда нагрузка уменьшается (возвращается в нормальное состояние): если система восстанавливается и начинает работать должным образом, или проблемы с производительностью фатальны.

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