Intereting Posts

https和http for apache对性能的影响有多大?

大致相当于同一页面的http的性能影响会达到多less? 假设我可以处理1000个请求/秒的abc.php,通过https访问时会减less多less? 我知道这可能是依赖于硬件,configuration,操作系统等,但我只是寻找一个一般的经验法则/估计。

对于一个快速和肮脏的testing(即没有任何优化!)我在本地Ubuntu 9.04虚拟机上启用了简单的Ubuntu apache2默认网站(它只是说“它工作!”)与http和https(自签名证书),并运行apache基准“ ab ”与10,000个请求(没有并发)。 客户端和服务器在同一台机器/ VM上:

http (“ ab -n 10000 http://ubuntu904/index.html ”)的结果

  • testing时间: 2.664
  • 每秒请求数:3753.69(#/秒)
  • 每个请求的时间:0.266ms

https (“ ab -n 10000 https://ubuntu904/index.html ”)的结果:

  • 考试时间: 107.673
  • 每秒请求数:92.87(#/秒)
  • 每个请求的时间:10.767ms

如果你在一个请求的tcp / ip通信中仔细看看(例如使用tcpdump或wireshark),你会发现http的情况下,客户端和服务器之间需要10个数据包,而https需要16个数据包:https的延迟要高得多。 (更多关于这里延迟的重要性)

将keep-alive( ab选项-k )添加到testing可以改善这种情况,因为现在所有请求都共享相同的连接,即SSL开销较低 – 但https仍然可以测量得较慢:

http with keep-alive的结果(“ ab -k -n 10000 http://ubuntu904/index.html ”)

  • testing时间: 1.200
  • 每秒请求数:8334.86(#/秒)
  • 每个请求的时间:0.120ms

https与keep-alive的结果(“ ab -k -n 10000 https://ubuntu904/index.html ”):

  • testing时间: 2.711
  • 每秒请求数:3688.12(#/秒)
  • 每个请求的时间:0.271ms

结论

  • 在这个简单的testing用例中,https比http慢得多。
  • 启用https支持并对您的网站进行基准testing,看看您是否想要支付https开销。
  • 使用wireshark获得SSL开销的印象。

在现代服务器上,我会说你的瓶颈将是networking和你的应用程序,而不是encryption。 Apache中的TLS / SSL将用相当优化的C语言编写,所以会被PHP代码所淹没,特别是在你要做数据库访问的时候。 提供静态文件可能会有更大的影响,因为encryption将成为整个过程的一个更大的部分。 我不能给你任何具体的数字,但是如果超过5%,可能更接近几个百分点,我会感到惊讶。

不要假设任何事情,自己testing! 当然在你的特定networking应用程序。

  • AB
  • 围城
  • JMeter的

我发现在现代硬件上,比起处理器(计算),我更有可能成为特定事务的I / O界限。 谈论压缩和encryption时尤其如此。 现在128位encryption是微不足道的 – 我通常比我使用SSL更难构build和发送传出页面,并且在几年内没有注意到http和https之间的性能差异。

我第二个build议nginx。 在我自己的testing中,它作为一个专用的SSL卸载程序很好。

当然,如果SSL处理难度很大,您可以随时将其从服务器移动到专用的盒子。 有一个很好的写在这里用nginx做这个。 这是我们在高负载的第7层负载均衡服务器上所做的。

我可以确认,与其他包含的元素(脚本,networking等)相比,encryption的额外负载是非常小的。

根据我的经验,一般规则直接关系到你的公钥有多大(例如,2048,vs 4096,vs 8192)都要花费更长的时间。 不过,我几乎不能注意到桌面环境的差异,但是移动设备是您看到差异的地方,因为它需要计算能力。

一般来说,这是不幸的,但SSL始终并将可能会一直承担巨大的性能损失。