Ліміт одночасних викликів — не більше N викликів моделі одночасно

Обмежте, скільки викликів моделі одного клієнта, флоу, проєкту або значення поля запиту йде одночасно, поставте решту в чергу замість відмови й дізнайтеся, що це гарантує.

Доступно на Pro і вище

5 хв читання

Ліміт одночасних викликів пропускає одночасно не більше N викликів моделі одного ключа — одного клієнта, флоу, усього проєкту або одного значення поля запиту. Виклик понад ліміт чекає своєї черги й іде далі, щойно звільниться місце, або отримує відмову, коли прочекав достатньо. Ліміт — це режим Ліміт одночасних вузла Черга.

Навіщо ліміт

До виклику Slen знає два числа. Оцінка — скільки виклик, найімовірніше, коштуватиме; вона вчиться на історії вузла й правильна в середньому, а не для кожного виклику. Стеля — найбільше, скільки може коштувати один виклик, за лімітами вузла й цінами каталогу, і вона правильна для кожного виклику.

Бюджет перевіряється за оцінками й резервами. Ліміт рахує виклики. Якщо в ключа в польоті не більше N викликів, найгірший випадок цього ключа в будь-який момент — N стель виклику, хоч як помилилася б оцінка. Панель вузла називає цю суму: за межі 3 і стелі $0.42 найгірший випадок ключа — $1.26.

Ліміт дає й більше:

  • один галасливий клієнт не забирає всі виклики, які дозволяє спільний ключ провайдера, і решта клієнтів і далі отримують відповіді;

  • зациклений клієнт після короткої черги впирається у відмову, а не в рахунок;

  • виклики, що чекають, нічого не коштують, поки чекають: до вузла моделі нічого не резервується.

Рахуються лише виклики. Гроші, які в ключа в польоті, власним лімітом не обмежуються.

Ліміт і бюджет

БюджетЛіміт одночасних викликів
Рахуєгроші, зарезервовані й списані за періодвиклики, що йдуть зараз
Понад ньоговиклик відхиляєтьсявиклик чекає своєї черги або отримує відмову, коли прочекав
Закінчуєтьсяз періодом або ніколиу момент, коли закінчився виклик
Задаєтьсяна проєкт або організацію, операціюна вузол флоу, за ключем

Вони працюють разом: бюджет обмежує, скільки може витратити період, ліміт — скільки може бути під ризиком одночасно. Бюджет виду Одночасні резерви (знято) раніше рахував відкриті резерви; він більше не створюється, а його архівні бюджети не відновлюються.

Додати ліміт

  1. Відкрийте флоу в конструкторі й поставте Черга перед моделлю, яку він має охороняти, — до Резерв бюджету, якщо він є у флоу. Новий вузол уже ліміт.

  2. Виберіть Рахувати за: Клієнт (клієнт у SDK, user_id контексту), Цей флоу, Весь проєкт або Поле запиту і шлях до нього.

  3. Задайте Не більше (викликів одночасно), а в Коли зайнято виберіть Чекати в черзі з Чекати не довше (секунди) або Одразу відмовити.

  4. Проведіть Зайнято в окрему відповідь — Відхилити запит з кодом, який знає ваш застосунок, або дешевшу модель за власним лімітом.

  5. Опублікуйте. Ліміт є на тарифах від Pro; чернетка може містити його на будь-якому тарифі.

Шаблон Не більше 3 викликів на клієнта — це такий флоу — Шаблони AI-флоу.

Який виклик тримає місце

Вузол охороняє першу AI-модель, до якої доходить шлях від нього. Виконання займає місце, коли виходить із вузла, і віддає його, коли цей виклик закінчився, — хоч би через який порт виклик вийшов, — і коли виконання закрито. Місце, втрачене воркером, повертається за його орендою. Між вузлом і моделлю можуть стояти вузли грошового ланцюжка, Умова, Перетворення, Нотатка у трасуванні, Пошук у кеші та інші ліміти; очікування там — затримка, Потрібне схвалення — відхиляється під час публікації флоу, бо виконання чекало б із зайнятим місцем.

Запасна модель, додана кнопкою Додати запасну модель на охоронюваній моделі, отримує перед собою копію ліміту з тим самим ключем і межею: місце першого виклику звільняється, щойно він іде через порт відмови, а запасний виклик чекає в тій самій черзі — Конструктор.

Ліміти поспіль

Один вузол рахує за одним ключем. Для двох поставте два вузли один за одним: «клієнт, не більше 2», потім «цей флоу, не більше 20», потім модель. Галасливий клієнт займе не більше 2 місць із 20, і окремий планувальник не потрібен.

Ставте вузький ключ першим. Поки виконання чекає біля другого вузла, воно зберігає місце біля першого. Два флоу, які беруть ті самі ключі в різному порядку, можуть затримати одне одного; це розриває строк очікування, і виконання йде через Зайнято.

Усі вузли ліміту проєкту з тим самим ключем ділять один лічильник, у якому б флоу вони не стояли, а межа в кожного своя. Черга обслуговується суворо за порядком, тому виконання, що чекає під меншою межею, затримує тих, хто за ним; панель попереджає, коли два ліміти одного флоу рахують за одним ключем з різними числами.

Очікування замість відмови

Виклик понад ліміт не отримує відмову одразу. Запит, виконання якого чекає місця, отримує відповідь 202, waiting_on типу queue_slot і retry_after_seconds, що дорівнює 2: очікування в SDK читає його знову, доки не з’явиться результат, а місце, звільнене іншим викликом, будить виконання за секунди. Строку очікування дотримуються з точністю до хвилини. За одним ключем чекають не більше 100 виконань; наступне одразу йде через Зайнято — Паузи, черги й відновлення.

Виконання, що йде через Зайнято без ребра з нього, закінчується з 402 concurrency_limit_exceeded, а деталі помилки несуть вихід вузла — чому, ключ і його лічильники:

JSON
{ "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 — Розбір виконання.

Що читати далі

  • Черга — усі налаштування, вихід через кожен порт і перевірки вузла.

  • Бюджети — стеля того, що може витратити період.

  • Тарифи й ліміти — тарифи, на яких є ліміт.