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> Случайное истинное или ложное значение
  • <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

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

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

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

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

Заключение

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

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

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

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