大致相当于同一页面的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
”)的结果
https (“ ab -n 10000 https://ubuntu904/index.html
”)的结果:
如果你在一个请求的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
”)
https与keep-alive的结果(“ ab -k -n 10000 https://ubuntu904/index.html
”):
结论 :
在现代服务器上,我会说你的瓶颈将是networking和你的应用程序,而不是encryption。 Apache中的TLS / SSL将用相当优化的C语言编写,所以会被PHP代码所淹没,特别是在你要做数据库访问的时候。 提供静态文件可能会有更大的影响,因为encryption将成为整个过程的一个更大的部分。 我不能给你任何具体的数字,但是如果超过5%,可能更接近几个百分点,我会感到惊讶。
不要假设任何事情,自己testing! 当然在你的特定networking应用程序。
我发现在现代硬件上,比起处理器(计算),我更有可能成为特定事务的I / O界限。 谈论压缩和encryption时尤其如此。 现在128位encryption是微不足道的 – 我通常比我使用SSL更难构build和发送传出页面,并且在几年内没有注意到http和https之间的性能差异。
我第二个build议nginx。 在我自己的testing中,它作为一个专用的SSL卸载程序很好。
当然,如果SSL处理难度很大,您可以随时将其从服务器移动到专用的盒子。 有一个很好的写在这里用nginx做这个。 这是我们在高负载的第7层负载均衡服务器上所做的。
我可以确认,与其他包含的元素(脚本,networking等)相比,encryption的额外负载是非常小的。
根据我的经验,一般规则直接关系到你的公钥有多大(例如,2048,vs 4096,vs 8192)都要花费更长的时间。 不过,我几乎不能注意到桌面环境的差异,但是移动设备是您看到差异的地方,因为它需要计算能力。
一般来说,这是不幸的,但SSL始终并将可能会一直承担巨大的性能损失。