blog-post

Эмулятор нагрузки Manticore

TL;DR

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

Введение

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

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

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

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

Нам часто задают вопрос: "Может ли Manticore справиться с моей рабочей нагрузкой?" Что ж, короткий ответ обычно "Да". Но вместо того, чтобы заставлять вас верить нам на слово, мы создали инструмент, чтобы вы могли протестировать это сами. Эмулятор нагрузки Manticore — это все о прозрачности и расширении возможностей — плюс, это очень весело, заставлять ваше оборудование работать на пределе.

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

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

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

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

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

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

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

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

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

5. Нагрузочное тестирование для масштабируемости

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

Ключевые особенности

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

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. Два режима отслеживания задержки

  • На основе гистограммы: Эффективно по памяти и приблизительно для широких тенденций
  • Точный: Для точных процентилей задержки, потому что иногда точность имеет значение

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

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

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

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

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: Симуляция параллелизма

7-8% загрузки ЦП и 160K документов в секунду кажется слишком низким для вашей нагрузки? Давайте увеличим количество потоков:

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

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

Пример 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мс и 6.5мс p95 задержки.

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

Заключение

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

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

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

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