Discard overflow

Настройка включает поведение отбрасывания запоздавших запросов

Когда вы указываете профиль нагрузки генератор рассчитывает порядок и время выполнения запросов. Можно назвать это расписанием выполнения запросов. За это отвечает планировщик Пандоры. Он получает запросы от провайдера и по этому расписанию передает инстансам. А каждый инстанс выполняет запросы последовательно.

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

  1. Дождаться, когда освободится какой-либо инстанс и передать запрос ему позже расписания
  2. Отбросить этот запрос и ожидать следующий, рассчитывая на то, что когда наступит время следующего запроса, уже освободится один из инстансов.

За то, какому поведению следовать, отвечает настройка инстанса discard_overflow

  1. discard_overflow: false - нестрогое следование расписанию. Генератор гарантирует, что все запланированные запросы будут отправлены. Время выполнения теста зависит от производительности тестируемого сервиса, среднего времени ответа и количества инстансов.
  2. discard_overflow: true - строгое следование генератором расписания запросов. Запросы, не уложившиеся в расписание, отбрасываются. Время выполнения теста предопределено. Запросы, которые не укладываются в расписание, помечаются неудавшимися (ошибка net 777, а так же добавляется tag:discarded). Пандора считает, что тест не уложился в расписание, если время запроса отстало на 2 сек. То есть используется 2 секундное скользящее окно.

По-умолчанию, начиная с версии pandora@0.5.24 настройка discard_overflow: true

Немного теории

Когда может возникнуть ситуация, в которой планировщику придется выбрать поведение discard_overflow? Как было сказано выше, когда наступает время выполнения запроса, но нет свободных инстансов, которые этот запрос могут выполнить. Почему это может происходить? Когда время ответа от сервера высоко и комбинация кол-во инстансов и профиль нагрузки выбраны не оптимально. То есть когда V > N * 1/rps, где

  • V - время ответа нагружаемого сервера (в секундах)
  • N - кол-во инстансов

Таким образом, чтобы избежать такой ситуации можно

  • увеличить кол-во инстансов
  • уменьшить профиль нагрузки
  • оптимизировать нагружаемый сервис, для уменьшения времени ответа