Quanto de desempenho atinge https vs http para apache?


50

Aproximadamente quanto de um desempenho atingido o https levará em comparação com o http da mesma página? Suponha que eu possa lidar com 1000 solicitações / s para abc.php, quanto isso diminuirá quando acessado por https? Eu sei que isso pode depender de hardware, configuração, sistema operacional etc etc, mas estou apenas procurando uma regra geral / estimativa.


2
Seria bom ver uma resposta aceita para isso.
Hyppy

Respostas:


57

Para um teste rápido e sujo (ou seja, sem otimização alguma!), Ativei o site padrão Ubuntu apache2 simples (que apenas diz "Funciona!") Com http e https (certificado autoassinado) em uma VM local Ubuntu 9.04 e executei o apache referência " ab" com 10.000 solicitações (sem simultaneidade). Cliente e servidor estavam na mesma máquina / VM:

Resultados para http (" ab -n 10000 http://ubuntu904/index.html")

  • Tempo necessário para os testes: 2,666 segundos
  • Pedidos por segundo: 3753.69 (# / s)
  • Tempo por solicitação: 0.266ms

Resultados para https (" ab -n 10000 https://ubuntu904/index.html"):

  • Tempo necessário para os testes: 107,673 segundos
  • Pedidos por segundo: 92,87 (# / s)
  • Tempo por solicitação: 10.767ms

Se você der uma olhada mais de perto (por exemplo, com tcpdump ou wireshark) na comunicação tcp / ip de uma única solicitação, verá que o caso http requer 10 pacotes entre cliente e servidor, enquanto https requer 16: a latência é muito maior com https. (Mais sobre a importância da latência aqui )

A adição de keep-alive ( abopção -k) ao teste melhora a situação, porque agora todas as solicitações compartilham a mesma conexão, ou seja, a sobrecarga do SSL é menor - mas https ainda é mensurável mais devagar:

Resultados para http com keep-alive (" ab -k -n 10000 http://ubuntu904/index.html")

  • Tempo necessário para os testes: 1.200 segundos
  • Pedidos por segundo: 8334.86 (# / s)
  • Tempo por solicitação: 0.120ms

Resultados para https com keep-alive (" ab -k -n 10000 https://ubuntu904/index.html"):

  • Tempo necessário para os testes: 2,711 segundos
  • Pedidos por segundo: 3688.12 (# / s)
  • Tempo por solicitação: 0.271ms

Conclusão :

  • Neste simples caso de teste, o https é muito mais lento que o http.
  • É uma boa ideia habilitar o suporte para https e comparar o seu site para ver se você deseja pagar pela sobrecarga do https.
  • Use o wireshark para obter uma impressão da sobrecarga do SSL.

11
+1 Bom trabalho lá. Obrigado por postar os números.
MN

Podemos obter algumas especificações sobre o hardware dessa máquina? a criptografia é altamente dependente da energia do processador.
22610 Matt Simmons

11
Recentemente, fiz muitos testes em um VPS e a melhor coisa que afetou o desempenho foi a cifra sendo usada. Se você restringir as cifras a 128 bits, poderá receber de 500 a 600 solicitações por segundo. Usando uma cifra de 256 bits que cairá para <100 solicitações por segundo. Acredito que quando fiz meus próprios testes foram 30 solicitações por segundo. Obviamente, os números reais dependem da sua máquina.
22410 kovert

Matt Simmons, usei uma VM do Ubuntu 9.04 (VMware Fusion) de 2 bits e 64 bits em execução em um Mac Pro do início de 2008 com duas CPUs Intel Xeon Quad-Core de 2,8 GHz e 2,8 GHz.
knweiss

Sua resposta me impediu de postar uma pergunta que seria encerrada em 20 segundos. Obrigado!
MonkeyZeus

10

Em servidores modernos, eu diria que seu gargalo seria a rede e seu aplicativo, não a criptografia. O TLS / SSL no apache será escrito em C bastante otimizado, portanto será diminuído pelo seu código PHP, especialmente se você estiver fazendo coisas como acesso ao banco de dados. A veiculação de arquivos estáticos provavelmente terá um impacto maior, pois a criptografia se tornará uma parte maior de todo o processo. Não posso dar números concretos, mas ficaria surpreso se fosse mais de 5% e provavelmente mais perto de alguns por cento.


2
David está certo, depende do tipo de conteúdo que você possui. A boa forma seria a de benchmark com apache banco httpd.apache.org/docs/2.2/programs/ab.html
raio de

Além da velocidade de criptografia, e o handshake SSL, isso terá algum impacto no desempenho e na taxa de transferência do servidor?
21411 erotsppa

O handshake SSL adicionará alguns pacotes à frente de uma conexão. O impacto disso dependerá enormemente da latência da conexão entre o servidor e o cliente. Keepalives HTTP reduzirão o impacto desse handshake.
David Pashley


1

Acho que no hardware moderno, é mais provável que eu esteja vinculado à E / S para uma transação específica do que ao processador (computação). Isso é particularmente verdade quando se fala em compactação e criptografia. Atualmente, a criptografia de 128 bits é trivial - geralmente, sou muito mais afetado ao criar e entregar as páginas de saída do que ao SSL, e não noto uma diferença significativa no desempenho entre o tráfego http e https em alguns anos.


1

Eu segundo a recomendação para nginx. Nos meus próprios testes, ele se manteve bem como um descarregador SSL dedicado.


0

Obviamente, se o processamento do SSL for difícil, você sempre poderá movê-lo do servidor para uma caixa dedicada. Há uma boa descrição de como fazer isso com o nginx aqui . Isso é algo que fizemos em servidores com carga equilibrada da camada 7 altamente carregados.


0

Posso confirmar que a carga adicionada para criptografia é muito pequena em comparação com todos os outros elementos incluídos (scripts, rede, ...)


0

De acordo com minha experiência, a regra geral está diretamente relacionada ao tamanho da sua chave pública (por exemplo, 2048, vs 4096, vs 8192), e isso leva muito mais tempo. No entanto, mal consigo notar uma diferença em um ambiente de desktop, mas o celular é onde você vê a diferença, pois exige poder de computação.

Em geral, é lamentável, mas o SSL sempre e sempre terá uma enorme penalidade de desempenho.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.