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.