hostprofi.ru
Подобрать хостинг
Термин·буква T

Time-out

краткое определение

Timeout (тайм-аут) — предельное время ожидания ответа от сервера или завершения операции. По истечении тайм-аута соединение разрывается или операция прерывается с ошибкой. Предотвращает вечное зависание клиента.

Timeout (тайм-аут) — механизм ограничения времени ожидания в сетевых и вычислительных операциях. Без тайм-аутов клиент может ждать ответ от недоступного сервера вечно, блокируя ресурсы. Тайм-ауты определяют «когда считать операцию провалившейся» и инициируют корректную обработку ошибки.

Как работает

При HTTP-запросе выделяют несколько последовательных фаз, каждая из которых имеет свой тайм-аут.

Connect timeout — максимальное время для установки TCP-соединения с сервером (3-way handshake). Если сервер недоступен или маршрут заблокирован, клиент ждёт не более заданного времени. Типичное значение: 3–10 секунд. При истечении — ошибка «Connection refused» или «Network unreachable».

Read timeout (response timeout) — максимальное время ожидания данных после установки соединения. Операция read() блокируется, пока сервер не начал отдавать данные. Если сервер принял соединение, но «завис» при обработке запроса — read timeout прерывает ожидание. Типичное значение: 30–120 секунд для API, 5–30 секунд для веб-страниц.

Write timeout — максимальное время для отправки данных запроса серверу. Применимо при загрузке больших файлов: если соединение прервалось во время отправки — write timeout определяет предел ожидания.

Idle timeout — максимальное время неактивного соединения (keep-alive соединения без данных) до его закрытия. Nginx по умолчанию — 75 секунд (keepalive_timeout). Позволяет переиспользовать TCP-соединение для нескольких HTTP-запросов.

В nginx тайм-ауты настраиваются через директивы: proxy_connect_timeout 5s (соединение с upstream), proxy_read_timeout 60s (ожидание ответа upstream), proxy_send_timeout 60s (отправка запроса upstream). Для PHP-FPM: request_terminate_timeout — максимальное время выполнения PHP-скрипта.

История

Концепция тайм-аутов появилась в ранних реализациях TCP/IP в 1970-х годах. RFC 793 (1981), определивший TCP, включает механизм Retransmission Timeout (RTO) — время повтора неподтверждённых сегментов. HTTP/1.0 (RFC 1945, 1996) не стандартизировал тайм-ауты — они оставались делом реализации. HTTP/1.1 (RFC 2616, 1999) ввёл keep-alive соединения и тем самым сделал idle timeout значимым параметром. В современных микросервисных архитектурах управление тайм-аутами (circuit breaker pattern) стало отдельной дисциплиной.

Виды тайм-аутов

DNS timeout
Время ожидания ответа DNS-сервера. Если превышено — retry к следующему NS-серверу. Обычно 2–5 секунд.
SSL/TLS handshake timeout
Максимальное время TLS-рукопожатия. При медленном соединении или перегруженном сервере может занять 1–3 секунды.
Database query timeout
Максимальное время выполнения SQL-запроса. Предотвращает зависание приложения из-за медленного запроса.
Session timeout
Максимальное время бездействия пользовательской сессии до её аннулирования. Требование безопасности.

На что обращать внимание

Тайм-ауты должны быть осмысленными: слишком короткие — приложение падает при кратковременной нагрузке, слишком длинные — пользователь ждёт неоправданно долго. Правило: connect timeout всегда короче read timeout. Для внешних API-запросов устанавливайте оба тайм-аута (иначе запрос может зависнуть навсегда). Хостинг и VPS-провайдеры часто устанавливают собственные тайм-ауты на уровне балансировщика нагрузки — они не отражены в конфиге nginx или Apache. Проверяйте документацию провайдера: у некоторых максимальный proxy_read_timeout ограничен 60 или 120 секундами.

Timeout настраивается в Nginx (proxy_read_timeout), HAProxy, балансировщиках. В PostgreSQL: statement_timeout, lock_timeout. В Redis: timeout для неактивных соединений. Для Docker: HEALTHCHECK --timeout. В Kubernetes: terminationGracePeriodSeconds.

Другие термины