Os benchmarks são mentiras, não refletem a realidade, mas podem ser uma ferramenta útil para detectar gargalos. Mas você tem que entender os benchmarks. Como você omite os detalhes essenciais necessários para entender os resultados do benchmark, pode ser que você não entenda o que pode afetar os resultados do benchmark.
Especialmente, informações sobre o tamanho da carga útil do teste e as informações detalhadas da carga da CPU para o servidor e o cliente estão ausentes. Assim, pode ser que você já esteja atingindo os limites de CPU no cliente ou no servidor. Também pode ser principalmente um problema das viagens mais redondas que você precisa para as solicitações. Vamos explicar os aspectos do HTTP versus HTTPS em mais detalhes:
ab -c200 -n20000 http://SERVERNAME/localtest/index.html
Você configurou para usar 200 solicitações simultâneas. O tamanho da solicitação é desconhecido, portanto, podemos supor que haverá apenas carga útil mínima. Você também não está usando nenhum HTTP keep alive, o que significa que haverá uma nova conexão TCP para cada solicitação. Eu duvido que o banco de apache esteja fazendo a retomada da sessão TLS para que haja um handshake completo a cada vez. O que te dá:
- HTTP: 1 RTT para o handshake TCP e outro RTT para uma solicitação e resposta HTTP mínima. Isso também pode incluir a conexão fechar já (dependente da implementação). Isso significa 2 RTT e transferência mínima de dados.
-
O HTTPS adiciona isso:
- 2 RTT para um handshake TLS completo e provavelmente também 1 RTT para o encerramento do TLS. Apenas por causa de um total de 5 RTT para HTTPS vs. 2 RTT para HTTP simples você deve ver uma grande queda no desempenho, ou seja, de cerca de 13000 req / s para 5200 req / s (ou seja, 2/5).
- Os dados transferidos para o handshake TLS podem ser maiores do que o que você tem como carga dentro de sua solicitação HTTP simples (Editar: com base no tamanho do valor de suas respostas varia de 60 bytes a 50 KB, provavelmente não é isso relevante).
- Mas você também tem muitos cálculos para o handshake TLS, tanto no cliente quanto no lado do servidor. E mais, porque você está usando o ECDHE, consulte o link .
Os cálculos durante o handshake de TLS precisam de muito tempo de CPU e é por isso que seria importante fornecer informações sobre a carga da CPU. Pode ser que você esteja simplesmente atingindo o máximo que a CPU pode fazer, seja no servidor ou no cliente. Por favor, note também que o banco de dados do apache é de encadeamento único, então seria suficiente para maximizar o desempenho de um único núcleo de CPU, mesmo se os outros estivessem ociosos. E mesmo se você usar vários segmentos, o cálculo ainda leva tempo. Usar openssl speed
não reflete o que realmente é feito dentro do handshake TLS e também testa apenas a velocidade máxima com um único encadeamento, não com vários cálculos em paralelo e todo o cache de lixo etc. envolvido.
Assim, embora isso possa ser uma referência interessante para ver o que é possível, isso não reflete a realidade na maioria dos casos. O fato é que o TLS pode reduzir muito o desempenho, mas com o tráfego HTTP comum, você terá solicitações maiores, o HTTP mantido ativo e a reutilização da sessão TLS, o que reduz o impacto do dispendioso handshake TLS.
Mas se o benchmark for realmente limitado no desempenho do servidor e não no desempenho do cliente, a configuração pode refletir servidores usados para rastreamento, onde você pode ter apenas uma pequena resposta (ou seja, 1x1 pixel) de vários sites diferentes sem nenhum tipo de reutilização de sessão TLS ou HTTP manter-se ativo.