Ліміт одночасних викликів — не більше 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— Розбір виконання.
Що читати далі
Черга — усі налаштування, вихід через кожен порт і перевірки вузла.
Бюджети — стеля того, що може витратити період.
Тарифи й ліміти — тарифи, на яких є ліміт.