Лимит одновременных вызовов — не больше N вызовов модели сразу
Ограничьте, сколько вызовов модели одного клиента, флоу, проекта или значения поля запроса идёт одновременно, поставьте остальные в очередь вместо отказа и узнайте, что это гарантирует.
Доступно на Pro и выше
5 мин чтения
Лимит одновременных вызовов пропускает одновременно не больше N вызовов модели одного ключа — одного клиента, флоу, всего проекта или одного значения поля запроса. Вызов сверх лимита ждёт своей очереди и идёт дальше, как только освободится место, или получает отказ, когда прождал достаточно. Лимит — это режим Лимит одновременных узла Очередь.
Зачем лимит
До вызова Slen знает два числа. Оценка — сколько вызов, скорее всего, будет стоить; она учится на истории узла и верна в среднем, а не для каждого вызова. Потолок — самое большее, сколько может стоить один вызов, по лимитам узла и ценам каталога, и он верен для каждого вызова.
Бюджет проверяется по оценкам и резервам. Лимит считает вызовы. Если у ключа в полёте не больше N вызовов, худший случай этого ключа в любой момент — N потолков вызова, как бы ни ошиблась оценка. Панель узла называет эту сумму: при пределе 3 и потолке $0.42 худший случай ключа — $1.26.
Лимит даёт и больше:
один шумный клиент не забирает все вызовы, которые позволяет общий ключ провайдера, и остальные клиенты продолжают получать ответы;
зациклившийся клиент после короткой очереди упирается в отказ, а не в счёт;
вызовы, которые ждут, ничего не стоят, пока ждут: до узла модели ничего не резервируется.
Считаются только вызовы. Деньги, которые у ключа в полёте, своим лимитом не ограничиваются.
Лимит и бюджет
| Бюджет | Лимит одновременных вызовов | |
|---|---|---|
| Считает | деньги, зарезервированные и списанные за период | вызовы, которые идут сейчас |
| Сверх него | вызов отклоняется | вызов ждёт своей очереди или получает отказ, когда прождал |
| Кончается | с периодом или никогда | в момент, когда закончился вызов |
| Задаётся | на проект или организацию, операцию | на узел флоу, по ключу |
Они работают вместе: бюджет ограничивает, сколько может потратить период, лимит — сколько может быть под риском одновременно. Бюджет вида Одновременные резервы (снято) раньше считал открытые резервы; он больше не создаётся, а его архивные бюджеты не восстанавливаются.
Добавить лимит
Откройте флоу в конструкторе и поставьте Очередь перед моделью, которую он должен охранять, — до Резерв бюджета, если он есть во флоу. Новый узел уже лимит.
Выберите Считать по: Клиент (клиент в SDK,
user_idконтекста), Этот флоу, Весь проект или Поле запроса и путь к нему.Задайте Не больше (вызовов сразу), а в Когда занято выберите Ждать в очереди с Ждать не дольше (секунды) или Сразу отказать.
Проведите Занято в отдельный ответ — Отклонить запрос с кодом, который знает ваше приложение, или модель подешевле за своим лимитом.
Опубликуйте. Лимит есть на тарифах от Pro; черновик может содержать его на любом тарифе.
Шаблон Не больше 3 вызовов на клиента — это такой флоу — Шаблоны AI-флоу.
Какой вызов держит место
Узел охраняет первую AI-модель, до которой доходит путь от него. Выполнение занимает место, когда выходит из узла, и отдаёт его, когда этот вызов закончился, — через какой бы порт вызов ни вышел, — и когда выполнение закрыто. Место, потерянное воркером, возвращается по его аренде. Между узлом и моделью могут стоять узлы денежной цепочки, Условие, Преобразование, Заметка в трассировке, Поиск в кеше и другие лимиты; ожидание там — задержка, Требуется одобрение — отклоняется при публикации флоу, потому что выполнение ждало бы с занятым местом.
Запасная модель, добавленная кнопкой Добавить запасную модель на охраняемой модели, получает перед собой копию лимита с тем же ключом и пределом: место первого вызова освобождается, как только он уходит через порт отказа, а запасной вызов ждёт в той же очереди — Конструктор.
Лимиты подряд
Один узел считает по одному ключу. Для двух поставьте два узла друг за другом: «клиент, не больше 2», затем «этот флоу, не больше 20», затем модель. Шумный клиент займёт не больше 2 мест из 20, и отдельный планировщик не нужен.
Ставьте узкий ключ первым. Пока выполнение ждёт у второго узла, оно сохраняет место у первого. Два флоу, которые берут одни и те же ключи в разном порядке, могут задержать друг друга; это разрывает срок ожидания, и выполнение уходит через Занято.
Все узлы лимита проекта с одним и тем же ключом делят один счётчик, в каком бы флоу они ни стояли, а предел у каждого свой. Очередь обслуживается строго по порядку, поэтому выполнение, которое ждёт под меньшим пределом, задерживает тех, кто за ним; панель предупреждает, когда два лимита одного флоу считают по одному ключу с разными числами.
Ожидание вместо отказа
Вызов сверх лимита не получает отказ сразу. Запрос, выполнение которого ждёт места, получает ответ 202, waiting_on типа queue_slot и retry_after_seconds, равный 2: ожидание в SDK читает его снова, пока не появится результат, а место, освобождённое другим вызовом, будит выполнение за секунды. Срок ожидания соблюдается с точностью до минуты. По одному ключу ждут не больше 100 выполнений; следующее сразу уходит через Занято — Паузы, очереди и возобновление.
Выполнение, которое уходит через Занято без ребра из него, заканчивается с 402 concurrency_limit_exceeded, а детали ошибки несут выход узла — почему, ключ и его счётчики:
{ "reason": "queue_full", "key": "acme_42", "limit": 3, "in_flight": 3, "waiting": 100, "waited_seconds": 0 }Следить за лимитами
В режиме Live карточка лимита показывает, сколько вызовов его ключа в полёте и сколько выполнений ждут, а панель холста считает выполнения, которые ждут места, отдельно от прочих ожиданий.
Раздел Сейчас узла перечисляет его самые загруженные ключи — по меткам, никогда по значению поля — с их вызовами в полёте, ждущими выполнениями и самым долгим ожиданием. API отвечает тем же на
GET /v1/flows/{id}/limits— Флоу.Трассировка выполнения называет каждый шаг его места:
slot_acquired,slot_waiting,slot_granted,slot_released,slot_busy— Разбор выполнения.
Что читать дальше
Очередь — все настройки, выход через каждый порт и проверки узла.
Бюджеты — потолок того, что может потратить период.
Тарифы и лимиты — тарифы, на которых есть лимит.