Skip to content
1 / 15

Почему исходящий запрос без таймаута способен уронить весь сервис?

Потому что ожидание тратит не сеть, а воркеры. Пока вызов висит, поток или корутина занята, соединение из пула не возвращается: при N исполнителях и времени обработки W сервис тянет примерно N/W запросов в секунду. Зависшая зависимость превращает W в бесконечность — свободных исполнителей не остаётся, очередь на входе растёт, и перестают отвечать даже маршруты, которые с этой зависимостью никак не связаны. Поэтому таймаут ставят на каждую фазу отдельно: установку соединения, чтение ответа и ожидание свободного соединения в пуле. И выводят их не из головы, а из бюджета задержки: сумма таймаутов вниз по цепочке должна быть меньше того, что готов ждать клиент.

Почему исходящий запрос без таймаута способен уронить весь сервис? | JScriptiser