对于Apache而言,HTTP相对于HTTP的性能影响有多大?


50

与同一个页面的http相比,https大致能带来多少性能提升?假设我可以处理abc.php的1000个请求/秒,那么通过https访问时它将减少多少?我知道这可能取决于硬件,配置,操作系统等,但是我只是在寻找一般的经验法则/估计。


2
很高兴看到一个可接受的答案。
嬉皮士2012年

Answers:


57

为了进行快速,肮脏的测试(即无任何优化!),我在本地Ubuntu 9.04 VM上同时启用了带有http和https(自签名证书)的简单Ubuntu apache2默认网站(上面说“它有效!”),并运行了apache ab包含10,000个请求的基准“ ”(无并发)。客户端和服务器在同一台机器/ VM上:

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

  • 测试时间: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:16的延迟要比https高。(更多关于延迟的重要性在这里

在测试中添加keep-alive(aboption -k)可以改善这种情况,因为现在所有请求都共享相同的连接,即SSL开销较低-但是https的测量速度仍然较慢:

结果HTTP与保活(” ab -k -n 10000 http://ubuntu904/index.html“)

  • 测试时间:1200
  • 每秒请求数:8334.86(#/秒)
  • 每个请求时间:0.120ms

具有保持活动状态(“ ”)的https的结果ab -k -n 10000 https://ubuntu904/index.html

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

结论

  • 在这个简单的测试用例中,https比http慢得多。
  • 启用https支持并对您的网站进行基准测试是一个好主意,以查看是否要为https开销付费。
  • 使用wireshark获得SSL开销的印象。

1
+1那里的工作很好。感谢您发布数字。
MN

我们可以了解该机器的硬件规格吗?加密高度依赖处理器能力。
马特·西蒙斯

1
我最近在VPS上做了很多测试,而影响性能的最重要的事情就是所使用的密码。如果将密码限制为128位,则您应该能够每秒收到约500-600个请求。使用将下降到<100的256位密码每秒请求一次。我相信自己进行测试时,每秒需要30个请求。显然,实际数字取决于您的计算机。
kovert,2009年

马特·西蒙斯(Matt Simmons),我使用了2核64位Ubuntu 9.04 VM(VMware Fusion),该虚拟机在2008早期的Mac Pro上运行,配备2个四核2.8 GHz Intel Xeon CPU。
knweiss

您的回答使我无法发布可能会在20秒内关闭的问题。谢谢!
MonkeyZeus 2014年

10

在现代服务器上,我会说您的瓶颈将是网络和应用程序,而不是加密。apache中的TLS / SSL将使用相当优化的C语言编写,因此与PHP代码相比是相形见,,尤其是当您要进行数据库访问之类的操作时。提供静态文件可能会产生更大的影响,因为加密将成为整个过程中更大的一部分。我无法提供任何具体数字,但是如果它超过5%并可能接近百分之几,我会感到惊讶。


2
大卫是对的,这取决于您拥有的内容类型。好的方法是使用apache基准测试httpd.apache.org/docs/2.2/programs/ab.html
半径

除了加密速度外,SSL握手又会如何影响服务器性能和吞吐量?
erotsppa

SSL握手会将两个数据包添加到连接的前面。其影响将在很大程度上取决于服务器和客户端之间连接的延迟。HTTP保持连接将减少此握手的影响。
大卫·帕什利


1

我发现在现代硬件上,与处理器(计算)绑定相比,我更有可能受特定事务的I / O绑定。在谈论压缩和加密时尤其如此。如今,128位加密是微不足道的-与使用SSL相比,构建和交付传出页面的难度通常要大得多,并且几年来HTTP和HTTP流量之间的性能没有显着差异。


1

我赞同对nginx的建议。在我自己的测试中,它作为专用的SSL卸载程序运行良好。


0

当然,如果SSL处理确实受到重创,您始终可以将其从服务器外移到专用盒中。在这里,使用nginx进行了很好的编写。这是我们在高负载的第7层负载平衡服务器上完成的。



0

根据我的经验,一般规则与您的公共密钥的大小(例如2048、4096、8192)直接相关。但是,我几乎不会注意到台式机环境中的差异,但是在移动设备上您会看到差异,因为它需要计算能力。

通常,这是不幸的,但是SSL一直而且很可能总是会带来巨大的性能损失。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.