Короткий ответ
Timeout budget — распределение общего допустимого времени ответа между последовательными вызовами в цепочке так, чтобы таймаут каждого следующего вызова был меньше оставшегося бюджета вызывающей стороны, а не просто одинаковым фиксированным значением на каждом уровне.
Как это работает подробнее
Если у A таймаут на весь запрос 5 секунд, а внутри A вызывает B с таймаутом 5 секунд, а B внутри вызывает C с таймаутом 5 секунд, то в худшем случае A может ждать существенно дольше 5 секунд суммарно — таймауты должны уменьшаться по цепочке.
Пример кода
Схема
A (клиентский таймаут 5с)
-> B (таймаут вызова B из A: 4с)
-> C (таймаут вызова C из B: 2.5с, с запасом на обработку в B)Что использовать на практике
- Практика. Общий SLA делят так, чтобы каждый следующий вызов получал заведомо меньший таймаут с запасом на собственную обработку, и передают оставшийся бюджет явно (например, через заголовок deadline) там, где это поддерживается.
Подводные камни
- Риск. Задавать один и тот же таймаут на каждом уровне цепочки независимо от бюджета вызывающей стороны; не передавать информацию об оставшемся времени вглубь цепочки.