2014-12-22 2 views
0

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

Допустим, что мы выполняем запросы каждые 5 мс, которые выполняются в течение 10 мс. При одном соединении могут произойти две вещи:

  1. Половина запросов отбрасывается, поскольку соединение используется.
  2. Избыточные запросы выставляются в очередь и выполняются, когда соединение освобождается.

В документации, в которой описано поведение Mongoose, когда база данных перегружена, я ничего не нашел. Похоже, что последний вариант происходит.

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

+0

Я считаю, что это связано с поведением Узел, а не с Мангуста. Когда ваш запрос запрашивает у Mongoose запрос, этот запрос выполняется асинхронно, что означает, что он будет выполнен «когда это возможно». Если пул подключений к базе данных исчерпан, частью «когда это возможно» будет, когда в пуле будет доступно новое соединение, которое может быть долго после завершения теста. – Nepoxx

ответ

0

Mongoose будет буферизироваться, когда соединение по умолчанию падает. См. Параметр bufferCommands. В противном случае он не должен выполнять буферизацию, основанную на количестве запросов. Как сказал Nepoxx, это может быть связано только с тем, как Node позволяет этим запросам ждать ввода-вывода.

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