Por que o TTFB de solicitações é 5 vezes maior quando uma nova sessão TCP é criada no Apache?

2

Ao testar uma imagem exibida com apache , notei que, quando uma nova sessão é criada, o:

Waiting (TTFB) : 1.09s Initial connection + SSL handshake : 370ms DNS Lookup : 165ms

Mas, depois, com uma conexão persistente, o seguinte:

Waiting (TTFB) : 187ms Content Download : 4ms

Portanto, descobrimos que, em média, o TTFB é 5 vezes mais longo em novas conexões, não persistentes. Isso é normal?

Pergunta secundária: Por que faz uma nova pesquisa de DNS somente quando há uma nova conexão?

    
por Krauser 12.09.2016 / 17:09

1 resposta

8

Sim, é normal que as conexões não persistentes demorem mais tempo para enviar o primeiro byte de dados.

Isso ocorre porque o endereço IP deve ser resolvido a partir do DNS, a conexão TCP deve ser configurada e, em seguida, a camada SSL / TLS deve ser inicializada e somente depois que os dados reais puderem ser enviados.

A pesquisa de DNS não é realizada em uma conexão persistente, porque já existe uma conexão TCP ativa entre os endereços IP do cliente e do servidor. Portanto, não há necessidade de resolver o nome do domínio para um endereço IP.

Com relação às diretivas Apache KeepAlive e KeepAliveTimeout . KeepAlive especifica se o Apache deve manter as conexões do cliente abertas para solicitações subsequentes de outros recursos no mesmo site. Estas são conexões persistentes, onde se evitam os atrasos mencionados anteriormente.

No entanto, manter as conexões ativas usa recursos no servidor, já que cada conexão TCP consome memória para manter o estado. Portanto, com a diretiva KeepAliveTimeout , é possível especificar por quanto tempo uma conexão ociosa é mantida aberta antes de o servidor da Web a fechar. Isso também torna mais difícil para os clientes mal-intencionados esgotarem os recursos do servidor abrindo as conexões HTTP e mantendo-as abertas indefinidamente.

MaxKeepaliveRequests significa quantas solicitações são permitidas por conexão única do KeepAlive. Não consigo imaginar uma situação em que alguém deseje limitar o número de solicitações. Para um melhor desempenho, usaria 0 , ou seja, um número ilimitado de solicitações.

Essas diretivas estão relacionadas a sessões HTTP (S) entre o visitante e o servidor da web. O PHP-FPM não está relacionado a essa interface. No entanto, o mecanismo keepalive similar está disponível no nginx para a interface FastCGI. Não sei se um mecanismo semelhante está disponível no Apache.

    
por 18.09.2016 / 03:50