Haproxy - timeout http-request vs timeout http-keep-alive vs servidor timeout

6

Estou tentando entender como as opções do haproxy

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

interajam entre si. Estou executando um site do Apache em dois servidores de aplicativos que estão por trás de um balanceador de carga haproxy. No momento, não tenho o recurso ativo, mas experimentei ativá-lo porque acho que isso ajudaria a otimizar o site. Meu objetivo era permitir manter viva a conexão entre o navegador e o haproxy, mas desativar o keep-alive entre o haproxy e o apache. Eu consegui isso com

option http-server-close

Agora, estou pensando em configurar os tempos limite de keep-alive. Estive estudando o manual haproxy para a opção de solicitação de tempo limite http, timeout http-keep opção -alive e opção de servidor de tempo limite. Se eu estiver entendendo o manual corretamente, o tempo limite para manter a conexão aberta entre novas solicitações e tempo limite de http-request é o tempo necessário para aguardar os cabeçalhos da resposta antes de fechar a conexão. Mas o que não consigo descobrir é o que o servidor de tempo limite determina. Eu quero dizer que o servidor de tempo limite é o tempo para esperar a resposta completa, mas alguém pode confirmar isso? Se estou certo de que o servidor de tempo limite é a hora de esperar pela resposta completa, então estou certo de que não deve ter qualquer influência nas configurações de tempo de espera de keep-alive?

Aqui está minha configuração do haproxy em que estou trabalhando para modificar:

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

Por fim, meu objetivo é ativar o keep-alive entre o navegador e o haproxy, com a exigência de executar um relatório que leve de dois a três minutos para ser executado nos servidores de aplicativos.

    
por Mike Levy 25.11.2014 / 22:07

1 resposta

14

Só para esclarecer um pouco. Espero que isso também responda às suas perguntas.

solicitação HTTP de tempo limite

É a hora do primeiro byte do cliente recebido, até o último byte enviado ao cliente (independentemente de manter-se ativo). Portanto, se o back-end estiver muito lento ou o cliente estiver enviando a solicitação muito lenta, toda a comunicação poderá demorar mais do que isso, e a solicitação será interrompida (e um tempo limite será enviado ao cliente).

tempo limite http-keep-alive

O tempo para manter uma conexão aberta entre o haproxy e o cliente (depois que a resposta do cliente é enviada). Isso não tem nada a ver com o tempo de resposta do back-end. Isso não tem nada a ver com o tamanho de uma única solicitação (por exemplo, tempo limite de solicitação http). Isso permite respostas mais rápidas se o usuário solicitar vários recursos (por exemplo, html, img e js). Com o keep alive, os pedidos únicos podem fazer uso da mesma conexão tcp. Dessa forma, o tempo de carregamento de uma página da Web completa é reduzido.

servidor de tempo limite

Este é o tempo limite para seus servidores de back-end. Quando atingido, o haproxy responde com 504 (tempo limite do gateway). Isso também não tem nada a ver com keep alive, já que é apenas sobre a conexão entre proxy e backend.

    
por 25.11.2014 / 23:19