Введение

Современные облачные решения требуют высокой скорости, отказоустойчивости и совместимости с распространёнными стандартами. Один из таких стандартов — интерфейс Amazon S3. Если вы разрабатываете или интегрируете собственное объектное хранилище, крайне важно убедиться в его стабильной и эффективной работе под нагрузкой.

Меня зовут Александра Кабехова, я главный специалист по тестированию в компании Digital Spirit. В этой статье я расскажу, как мы используем инструмент Warp для нагрузочного тестирования S3-совместимого хранилища: поделюсь опытом, примерами запуска, интерпретацией результатов.

Кратко про Amazon S3: простой интерфейс для масштабируемого хранения данных

Amazon S3 (Simple Storage Service) — это облачное хранилище от AWS, предоставляющее разработчикам удобный интерфейс для сохранения и извлечения произвольных данных в любое время и из любой точки мира. Через веб-консоль, CLI или API пользователи могут управлять "бакетами" и объектами, масштабируя хранилище от мегабайт до петабайт без лишних усилий. S3 идеально подходит для резервного копирования, хранения медиафайлов, логов и данных аналитики — с высокой отказоустойчивостью и гибкими настройками доступа.

Почему мы выбрали Warp?

Инструмент Warp, разработанный MinIO, предназначен специально для нагрузочного и функционального тестирования S3-совместимых хранилищ. Его преимущества:

  • Простота запуска

  • Гибкость конфигурации

  • Реалистичная нагрузка (upload/download объектов, delete)

  • Поддержка многопоточности и различных размеров объектов

  • Подробные отчёты о производительности

Настройка и примеры использования Warp

Warp — это бинарный файл, который можно сразу запускать без установки.

Warp написан на языке Go и требует установленной версии Go не ниже 1.2.1

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

Warp настраивается через флаги командной строки. Основные параметры:

--host         # адрес S3-сервера
--access-key   # ключ доступа
--secret-key   # секретный ключ
--tls          # включение TLS
--bucket       # название бакета (по умолчанию: warp-benchmark-bucket)

Перед каждым запуском указанный бакет будет очищен! Не используйте бакет с важными данными.

Использование

Общая структура команд:

warp [команда] [флаги]

Доступные команды:

  • put — загрузка объектов

  • get — скачивание объектов

  • delete — удаление

  • stat — метаданные объектов

  • list — листинг объектов

  • mixed — смешанные операции

Примеры тестов

1. Upload тест

warp put --host sandre.vs.dev-storage.spiritcloud.ru \
         --access-key user \
         --secret-key NXJMNTrW-9gSJ-mlU5-yMr3-mnsorIyN \
         --bucket warp-test \
         --obj.size 10MiB \
         --concurrent 64 \
         --duration=1m

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

2. Download тест

warp get --host sandre.vs.dev-storage.spiritcloud.ru \
         --access-key user \
         --secret-key NXJMNTrW-9gSJ-mlU5-yMr3-mnsorIyN \
         --bucket warp-test \
         --obj.size 4K \
         --concurrent 500 \
         --duration=9m

3. Смешанный тест (Mixed)

warp mixed --host sandre.vs.dev-storage.spiritcloud.ru \
           --access-key user \
           --secret-key NXJMNTrW-9gSJ-mlU5-yMr3-mnsorIyN \
           --bucket warp-test \
           --obj.size 5MiB:10MiB \
           --concurrent 4000 \
           --duration=10s

Эмулирует реальную нагрузку с миксом операций: загрузка, скачивание, удаление и листинг объектов.

Как интерпретировать результаты

Пример вывода warp:

Reqs: 8503, Errs:0, Objs:8503, Bytes: 2.1MiB
PUT Average: 142 Obj/s, 35.5KiB/s; Current 132 Obj/s, 33.1KiB/s, 65.3 ms/req
Report: PUT. Concurrency: 10. Ran: 57s
* Average: 0.03 MiB/s, 141.99 obj/s
* Reqs: Avg: 70.0ms, 50%: 59.2ms, 90%: 114.0ms, 99%: 207.5ms, Fastest: 39.7ms, Slowest: 957.6ms, StdDev: 38.2ms
Throughput, split into 57 x 1s:
* Fastest: 44.5KiB/s, 177.86 obj/s
* 50% Median: 36.8KiB/s, 147.38 obj/s
* Slowest: 11.5KiB/s, 45.87 obj/s

Разбор по полочкам

Поле

Значение

Reqs

Кол-во запросов (в данном случае PUT)

Errs

Ошибок нет — всё успешно

Objs

Загружено объектов — совпадает с Reqs

Bytes

Объём переданных данных

PUT Average

Средняя скорость: 142 объектов/с, 35.5 КиБ/с

Current

Производительность в последний момент: 132 объектов/с

65.3 ms/req

Среднее время обработки запроса

Concurrency

Число параллельных клиентов (в данном примере — 10)

Ran

Время работы теста

Avg, 50%, 90%

Время отклика: от среднего до самых «медленных» 1%

StdDev

Разброс значений — чем меньше, тем стабильнее

Throughput

Пиковые/средние/минимальные значения пропускной способности

Результаты теста warp помогают понять, насколько быстро и стабильно система обрабатывает запросы. В примере было отправлено более 8500 запросов без ошибок. Средняя скорость составила около 142 запросов в секунду, а время ответа — в среднем 70 миллисекунд. Большинство запросов проходили быстрее, чем за 60 мс, но были и такие, что задерживались почти на секунду. Это помогает увидеть не только среднюю производительность, но и понять, насколько система стабильна: есть ли «просадки» или колебания скорости в разные моменты времени.

Что мы тестируем

  • Корректность реализации API (совместимость с Amazon S3)

  • Поведение при большом количестве параллельных запросов

  • Устойчивость к нагрузке (stress testing)

  • Эффективность работы с большими объектами

  • Скорость работы с метаданными (списки объектов, префиксы, etc.)

Выводы и рекомендации

  • Warp отлично подходит для функционального и нагрузочного тестирования S3-совместимых решений.

  • Поддержка гибкой настройки позволяет воспроизводить реальные сценарии использования.

  • Инструмент помогает выявить узкие места и оптимизировать производительность backend-хранилища.

  • Мы продолжаем использовать Warp в CI/CD для автоматического тестирования новых релизов.

Заключение

Если вы строите собственное хранилище или внедряете стороннее S3-совместимое решение, обязательно попробуйте Warp. Он даёт не просто цифры — он позволяет глубже понять, как ваша система ведёт себя под реальной нагрузкой.

Комментарии (2)


  1. Leshrac
    27.05.2025 21:44

    Статья похожа на перевод первой половины оф документации warp'а.

    Не указано, что можно обращаться к нескольким хостам, использование клиент-серверного запуска, сохранение результата в json, использование полезного флага --analyze

    Не описаны минусы варпа - нагрузка только в один бакет (для некоторых хранилищ это влияет на нагрузку), проблемы с крупными объектами (64Мб и более).

    Также из статьи не очевидно, почему был выбран именно warp, а не s3bench, s3Tester или k6, например