2016-01-26 3 views
0

Я написал группу агрегации и подсчет запроса, и я планирую имитировать сценарий реальной жизни, в котором тысячи пользователей совершают вызовы на мою систему в секунду (каждый вызов приведет к один агрегирующий запрос), чтобы подсчитать их активность.Загрузить тест mongodb с моим собственным запросом

Так я вставил 10 миллионов записей (представляющих действия пользователей) в моей базе данных, и я использовал JMeter для имитации вызова агрегации, но у меня были следующие проблемы:

  • Я не мог изменить сценарий для каждого запроса (Я хочу предоставить идентификатор пользователя для каждого уникального вызова).
  • Я discovered что JMeter MongoDB Sampler очень медленно (он использует db.eval() метод, который принимает глобальную блокировку по умолчанию)

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

Сколько груза может обрабатывать мой сервер? в моем случае использования 1 сервер может обрабатывать запросы агрегирования (полученные в результате запросов активности пользователя) через 1 секунду?

Сохранение других факторов постоянной (как приложение кода, сети, сегментирование и т.д ..)

+0

@AdrianHHH Я обновил этот вопрос. – Jimmy

ответ

1

Я хотел бы сосредоточиться на первом поколении записи. Если вам нужно эмулировать сеансы и связывать конкретные запросы с конкретными идентификаторами пользователей, тогда самый простой способ - использовать манипуляции с строкой (например, положить токен {USERID} в строки, загрузить каждую строку в python/java/bash/etc и заменить USERID с вашими сгенерированными идентификаторами для определенных длин сеанса). В принципе, я бы рассмотрел обработку набора данных автономной задачей, которую я мог бы транслировать и манипулировать, чтобы имитировать USERID или любые другие сеансы. Это может занять несколько часов, чтобы передать результаты и управлять ими, или вы можете ускользнуть от сценариев cut/sed/awk, или вы можете загрузить все записи в отдельную коллекцию и запустить на них карту (например, чтобы агрегат на основе jsessionid).

На данный момент у вас будет текстовый файл, содержащий JSON, который представляет ваш набор данных. Создайте новую коллекцию и импортируйте набор данных, медленно ожидая.

Теперь напишите сценарий (mongo принимает простой старый javascript), который выполняет серию запросов с определенной скоростью (используя async в nodejs или простой старый javascript, settimeout и v8). Напишите сценарий, который увеличивает количество одновременных пользователей или сокращает время между запросами. Запустите этот скрипт и следите за задержкой и серверами, когда латентность становится неприемлемой, у вас есть емкость.

Другая перестановка заключается в том, чтобы запускать аналогичную нагрузку с нагрузкой на строки 1M, 2M, 5M, 10M, построение графика (размер набора данных, запросы в секунду, проценты латентности). Это дает довольно 3D-диаграмму для ваших усилий.

Смежные вопросы