Я работаю над личным проектом, подобным 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.
Ваш подход очень хорош, я бы просто предложил добавить пару тестовых сценариев поверх существующего жгута:
Проверять, выписываться 4 совета по тестированию на выносливость, которые вам нужно знать для более полного объяснения вышеупомянутых методов.