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

Manticore Load Emulator

author image
View as markdown

TL;DR

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

Введение

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

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

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

Зачем мы его создали

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

Сценарии использования

1. Проверка производительности новых развёртываний

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

2. Отладка и устранение неполадок

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

3. Оптимизация существующих конфигураций

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

4. Оценка изменений инфраструктуры

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

5. Стресс-тестирование масштабируемости

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

Ключевые возможности

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

1. Простота благодаря SQL

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

2. Поддержка высокой конкурентности

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

3. Генерация произвольных запросов

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

  • 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. Пакетная загрузка

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

5. Мониторинг и аналитика в реальном времени

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

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

6. Гибкая настройка

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

7. Тестирование гиперпараметров

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

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

8. Тихий режим для анализа

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

9. Поддержка нескольких процессов

Нужно протестировать шардинг или несколько нагрузок одновременно? Этот мощный флаг позволяет запускать несколько конфигураций тестов параллельно в рамках одной сессии. Вместо последовательного выполнения, которое может занять много времени, --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

пример 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

пример 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

пример 3

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

пример 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"

пример 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"

пример 5

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

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

Заключение

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

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

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

Установите Manticore Search одной командой в Linux или macOS:

curl https://manticoresearch.com | sh

Для расширенных вариантов установки см. полное руководство по установке и документацию .

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