⚠️ Эта страница автоматически переведена, и перевод может быть несовершенным.
blog-post

Manticore Load Emulator

TL;DR

Manticore Load Emulator — это открытый инструмент для бенчмаркинга, который помогает проверять и оптимизировать развертывания Manticore Search. Независимо от того, планируете ли вы продакшн‑развёртывание, отлаживаете проблемы с производительностью или тонко настраиваете конфигурацию, этот инструмент предоставляет всесторонние возможности тестирования с мониторингом в реальном времени и детальной аналитикой. Созданный как для простоты, так и для мощности, он поддерживает всё — от базового тестирования запросов до сложного многопроцессного моделирования нагрузки.

Introduction

Вот интересный факт: когда люди спрашивают, справится ли Manticore с их нагрузкой, мы воспринимаем это как вызов. И когда производительность так же важна для нас, как и для вас, нужно быть готовыми. Представляем Manticore Load Emulator — открытый инструмент, разработанный для того, чтобы испытать Manticore (и ваше оборудование) на пределе.

Независимо от того, интересуетесь ли вы, справится ли Manticore с вашей уникальной конфигурацией, или просто хотите выжать из него каждый процент производительности, этот инструмент покрывает все ваши потребности.

Вы можете получить его на GitHub или установить как пакет из нашего репозитория (версия Manticore > 6.3.8).

Why We Built It

Нас часто спрашивают: «Сможет ли Manticore справиться с моей нагрузкой?» Краткий ответ обычно «Да». Но вместо того, чтобы просто принимать наши слова, мы создали инструмент, чтобы вы могли проверить это сами. Manticore Load Emulator — это о прозрачности и возможности управлять процессом, плюс это очень весело — доводить ваше оборудование до предела.

Use Cases

1. Performance Validation for New Deployments

Перед запуском Manticore Search в продакшн используйте Load Emulator для симуляции ожидаемой нагрузки. Это гарантирует, что ваша инфраструктура правильно масштабирована и настроена для пиковой производительности.

2. Debugging and Troubleshooting

Определяйте узкие места или падение производительности, проводя контролируемые тесты. Например, анализируйте, как определённые шаблоны запросов или большие наборы данных влияют на задержку запросов и пропускную способность.

3. Optimization of Existing Setups

Точно настраивайте такие параметры, как размер пакетов, количество потоков или кэширование запросов, чтобы достичь оптимальной производительности. Используйте функцию тестирования гиперпараметров для автоматизации сравнений.

4. Evaluating Infrastructure Changes

Планируете обновить оборудование, изменить шардинг базы данных или перейти к другому облачному провайдеру? Load Emulator позволяет проводить бенчмарки и сравнивать производительность разных конфигураций.

5. Stress Testing for Scalability

Симулируйте экстремальные нагрузки, чтобы оценить, насколько хорошо ваше развертывание масштабируется при большом трафике. Это особенно полезно при подготовке к событиям, таким как запуск продукта или сезонные всплески.

Key Features

Вот почему Manticore Load Emulator выделяется среди инструментов для бенчмаркинга и тестирования:

1. SQL-Powered Simplicity

Инструмент использует поддержку SQL в Manticore, что делает простым эмуляцию самых разных нагрузок. Создание сценариев нагрузки или запросов так же просто, как написание SQL‑команд.

2. High Concurrency Support

Симулируйте реальные, высоконагруженные сценарии, используя несколько потоков и процессов. Если ваш сервер способен справиться, этот инструмент доведёт его до предела.

3. Custom Query Generation

Генерируйте динамические запросы с гибкими шаблонами, от случайного текста до точных диапазонов целых, чисел с плавающей точкой или массивов:

  • value Точное значение для использования
  • <increment> Автоинкрементное значение, начиная с 1
  • <increment/1000> Автоинкрементное значение, начиная с 1000
  • <string/3/10> Случайная строка, длина от 3 до 10
  • <text/20/100> Случайный текст от 20 до 100 слов
  • <text/{/path/to/file}/10/100> Случайный текст из слов файла, от 10 до 100 слов
  • <int/1/100> Случайное целое от 1 до 100
  • <float/1/1000> Случайное число с плавающей точкой от 1 до 1000
  • <boolean> Случайное true или false
  • <array/2/10/100/1000> Массив из 2‑10 элементов, значения от 100 до 1000
  • <array_float/256/512/0/1> Массив из 256‑512 случайных чисел с плавающей точкой, значения от 0 до 1

4. Batch Loading

Эффективно загружайте миллионы записей за один раз, задавая размер пакетов.

5. Real-Time Monitoring & Analytics

Отслеживайте производительность теста с помощью комплексных метрик, включая:

  • Прогресс и пропускную способность (QPS)
  • Детальные перцентили задержек
  • Выявление узких мест производительности
  • Обновления статуса в реальном времени

6. Flexible Configuration

Параметры командной строки позволяют настроить каждый аспект нагрузки. Нужно симулировать несколько типов запросов? Используйте опцию --together, чтобы запускать разные нагрузки параллельно.

7. Hyperparameter Testing

Сравнивайте количество потоков или размер пакетов в одном запуске, задавая значения через запятую. Например:

--threads=1,2,4,8 --batch-size=100,1000,10000

8. Quiet Mode for Analysis

В режиме --quiet инструмент выводит результаты, разделённые точкой с запятой, что упрощает их визуализацию при копировании напрямую в Google Sheets или Excel.

9. Multi-Process Support

Нужно протестировать шардинг или несколько нагрузок одновременно? Этот мощный флаг позволяет запускать несколько конфигураций тестов параллельно в рамках одной сессии. Вместо последовательного выполнения, которое может занять много времени, --together объединяет ваши тесты в единый, эффективный запуск.

Например, вы можете:

  • Тестировать несколько шардов базы данных одновременно
  • Запускать один и тот же набор тестов против разных версий базы
  • Проверять приложение при разных настройках конфигурации
  • Сравнивать метрики производительности между различными конфигурациями

Просто добавьте --together к команде теста и укажите несколько конфигураций. Инструмент выполнит параллельный запуск, сохранив результаты организованными и легко сравнимыми.

10. Корректное завершение

Если вам нужно остановить процесс посередине теста (или случайно нажать Ctrl+C), инструмент обеспечивает чистое завершение без оставления беспорядка.

11. Два режима отслеживания задержки

  • Histogram-Based: Эффективное по памяти и приближённое для общих тенденций
  • Precise: Для точных процентилей задержки, потому что иногда точность имеет решающее значение

Начало работы

Вот быстрый пример, чтобы вы начали:

Пример 1: Простая вставка

Вставьте 1 миллион целых чисел пакетами по 10 тысяч:

manticore-load \
  --drop \
  --init="create table t(a int)" \
  --load="insert into t values(0, <int/1/1000000>)" \
  --batch-size=10000 \
  --total=1000000

example 1

Пример 2: Симуляция конкурентности

Нагрузка CPU 7‑8 % и 160 тыс. документов в секунду кажется слишком низкой для вашей нагрузки? Давайте увеличим её, повысив количество потоков:

manticore-load \
  --drop \
  --init="create table t(a int)" \
  --load="insert into t values(0, <int/1/1000000>)" \
  --batch-size=10000 \
  --threads=16 \
  --total=10000000

example 2

Хорошо, теперь мы получили 665 тыс. при 25 % нагрузки CPU. Похоже, мы можем выжать больше из инстанса, но это требует записи в несколько таблиц одновременно. Давайте сделаем это:

Пример 3: Шардированная нагрузка

Протестируйте шардированную среду, загружая данные в несколько таблиц одновременно:

manticore-load --quiet \
  --drop \
  --init="create table t(a int)" \
  --load="insert into t values(0, <int/1/1000000>)" \
  --batch-size=10000 \
  --threads=8 \
  --total=5000000 \
  --together \
  --drop \
  --init="create table t2(a int)" \
  --load="insert into t2 values(0, <int/1/1000000>)" \
  --batch-size=10000 \
  --threads=8 \
  --total=5000000 \
  --together \
  --drop \
  --init="create table t3(a int)" \
  --load="insert into t3 values(0, <int/1/1000000>)" \
  --batch-size=10000 \
  --threads=8 \
  --total=5000000 \
  --together \
  --drop \
  --init="create table t4(a int)" \
  --load="insert into t4 values(0, <int/1/1000000>)" \
  --batch-size=10000 \
  --threads=8 \
  --total=5000000

example 3

Слишком много данных и вам не нужен прогресс? Добавив флаг --quiet, инструмент будет выводить только окончательные результаты:

example 3-2

Пример 4: Комбинация записей и чтений

Предыдущие примеры были сосредоточены на загрузке данных. Что если вы хотите протестировать производительность записи/чтения? Давайте также используем более реалистичную нагрузку, а не только целые числа.

manticore-load \
  --total=1000000 \
  --batch-size=10000 \
  --drop \
  --init="create table products(name text, price float, stock int)" \
  --load="insert into products(name, price, stock) values('<text/3/10>', <float/1/100>, <int/1/100>)" \
  --together \
  --total=10000 \
  --load="select * from products where match('<text/2/5>') and price < 10"

example 4

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

Пример 5: Тестирование гиперпараметров

Давайте проверим, как различное количество потоков влияет на производительность:

manticore-load \
  --total=10000 \
  --quiet \
  --threads=1,4,8,16,32,64 \
  --load="select * from products where match('<text/2/5>') and price < 10"

example 5

Мы видим, что с текущей схемой и 1 миллионом документов в таблице пропускная способность может достигать 9858 запросов в секунду при средней задержке 4,3 мс и p95 задержке 6,5 мс.

Разве не здорово, что такие выводы можно сделать всего за пару минут?

Заключение

Manticore Load Emulator — это больше, чем просто инструмент для бенчмаркинга — это ваш партнёр в обеспечении оптимальной производительности ваших поисковых развертываний. Независимо от того, запускаете ли вы небольшой прототип или масштабируетесь для обработки миллионов запросов, этот инструмент предоставляет необходимые инсайты для принятия обоснованных решений о вашей инфраструктуре и конфигурации.

Помните: лучшее тестирование производительности — это итеративный процесс. Начинайте с малого, собирайте данные, вносите корректировки и тестируйте снова. С Manticore Load Emulator у вас есть все инструменты, необходимые для создания и валидации высокопроизводительного поискового решения.

Установить Manticore Search

Установить Manticore Search