Назад | Перейти на главную страницу

Haproxy - тайм-аут http-запроса против тайм-аута http-keep-alive против тайм-аута сервера

Я пытаюсь понять, как параметры haproxy

timeout http-request <timeout>
timeout http-keep-alive <timeout>
timeout server <timeout>

взаимодействуют друг с другом. Я запускаю веб-сайт Apache на двух серверах приложений, находящихся за балансировщиком нагрузки haproxy. Прямо сейчас у меня не включен keep-alive, но я экспериментирую с его включением, потому что думаю, что это поможет оптимизировать сайт. Моя цель состояла в том, чтобы включить keep-alive для соединения между браузером и haproxy, но отключить keep-alive между haproxy и apache. Я добился этого с

option http-server-close

Сейчас я изучаю настройку тайм-аутов сохранения активности. Я изучал руководство по haproxy для параметра http-запроса тайм-аута, параметра http-keep-alive и параметра сервера тайм-аута. Если я правильно понимаю руководство, тайм-аут http-keep-alive - это время, когда соединение остается открытым между новыми запросами, а тайм-аут http-request - это время дождаться заголовков ответа перед закрытием соединения. Но я не могу понять, что диктует сервер тайм-аута. Я хочу сказать, что сервер тайм-аута - это время дождаться полного ответа, но может ли кто-нибудь подтвердить это? Если я прав, что сервер тайм-аута - это время дождаться полного ответа, то правильно ли, что он не должен иметь никакого отношения к настройкам тайм-аута keep-alive?

Вот моя конфигурация haproxy, над которой я работаю:

global
    maxconn 4096
    pidfile /var/run/haproxy.pid
    daemon

defaults
    mode http
    retries 3
    option redispatch
    maxconn 5000        
    timeout connect 5000
    timeout client 300000
    timeout server 300000        

listen HTTP *:80
    mode http
    cookie HTTP insert nocache
    balance roundrobin   
    #option httpclose # I just commented this out in favor of http-server-close
    option http-server-close
    timeout http-keep-alive 500 # from the haproxy manual suggestion of "tens to hundreds of ms"
    timeout http-request 5000 
    option forwardfor
    stats enable
    stats uri /my-lb-status
    stats auth myLbStatus:123456
    reqadd X-Forwarded-Proto:\ http
    option httpchk GET /robots.txt HTTP/1.0
    server SERVER_A 1.2.3.4:80 cookie app_01 check
    server maintenance 127.0.0.1:8080 backup

В конечном итоге моя цель - иметь возможность включить поддержку активности между браузером и haproxy с требованием иметь возможность запускать отчет, который может занять 2-3 минуты на серверах приложений.

Просто чтобы немного уточнить. Надеюсь, это также ответит на ваши вопросы.

время ожидания http-запроса

Время от первого полученного клиентского байта до последнего байта, отправленного клиенту (независимо от сохранения активности). Поэтому, если ваш бэкэнд слишком медленный или клиент слишком медленно отправляет свой запрос, вся коммуникация может занять больше времени, и запрос будет отброшен (и тайм-аут отправлен клиенту).

тайм-аут http-keep-alive

Время поддерживать соединение между haproxy и клиентом открытым (после отправки ответа клиента). Это не имеет ничего общего со временем ответа серверной части. Это не имеет ничего общего с длиной одного запроса (т.е. таймаутом http-запроса). Это позволяет быстрее отвечать, если пользователь запрашивает несколько ресурсов (например, html, img и js). С сохранением активности отдельные запросы могут использовать одно и то же TCP-соединение. Таким образом сокращается время загрузки полной веб-страницы.

сервер тайм-аута

Это тайм-аут для ваших внутренних серверов. При достижении haproxy отвечает 504 (таймаут шлюза). Это также не имеет ничего общего с сохранением активности, поскольку касается только соединения между прокси и серверной частью.