2015-01-19 2 views
4

Я читаю документы о GAE task queues, и я не знаю о взаимоотношениях (если есть) между rate и max_concurrent_requests. Указывает ли rate один запрос, чтобы, например, rate = 20/s, а max_concurrent_requests = 10 эффективно означает максимум 200 запросов/с?GAE: отношение между скоростью очереди и max_concurrent_requests

ответ

14

Есть 3 параметра:

  • bucket size ~ максимальная скорость пакета
  • rate ~ нормальная скорость обработки
  • max concurrent requests ~ дополнительное ограничение параллельности

Когда задача начинает выполнение, его смотрит на ведро, чтобы проверить, есть ли токен или слот.

  • Если да, количество токенов уменьшается с одним, и задача начинает выполняться, если уже выполняется менее max concurrent requests.
  • Если нет, задача должна будет дождаться появления нового токена/слота со скоростью rate.

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

Max concurrent requests может дополнительно ограничить скорость передачи, так как длинные задачи замедляют всю обработку. Без max concurrent requests только скорость bucket size и rate определяют скорость обработки, а не продолжительность ваших задач.

+0

Спасибо, это было полезно! Значит ли это, что «максимальные одновременные запросы» должны быть меньше, чем «размер ведра», чтобы иметь какой-либо эффект? Имеет ли значение 'max_concurrent_requests = 20' смысл по умолчанию' bucket_size = 5'? – gsakkis

+1

Да, это имеет смысл. Вы разразитесь до 5 задач одновременно, если и только если закончились предыдущие 20 задач. В противном случае ваше ведро будет иметь токены, но следующие задачи не начнутся, пока некоторые из оставшихся текущих задач не будут завершены. – koma

+0

Привет, koma. Просто уточните, когда вы говорите «если и только если закончились предыдущие 20 заданий», то это противоречит «если есть уже более макс одновременных запросов, уже выполняющихся». Это скорее «если и только если есть менее 20 запущенных задач»? В противном случае, если только одна задача заняла «слишком много» времени, чтобы закончить, она заблокирует всю очередь. Что-то я сомневаюсь, основываясь на моем опыте. – chaiyachaiya

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