erotsppa Asked: 2009-07-22 10:45:58 +0800 CST2009-07-22 10:45:58 +0800 CST 2009-07-22 10:45:58 +0800 CST https 与 http 对 apache 的性能影响有多大? 772 与同一页面的 http 相比,https 对性能的影响大约是多少?假设我可以为 abc.php 处理 1000 个请求/秒,通过 https 访问时会减少多少?我知道这可能取决于硬件、配置、操作系统等,但我只是在寻找一般的经验/估计规则。 performance apache-2.2 8 个回答 Voted knweiss 2009-07-22T16:25:28+08:002009-07-22T16:25:28+08:00 为了进行快速和肮脏的测试(即没有任何优化!)我在本地 Ubuntu 9.04 VM 上启用了简单的 Ubuntu apache2 默认网站(它只是说“它有效!”),并在本地 Ubuntu 9.04 VM 上使用 http 和 https(自签名证书)并运行 apache对ab10,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 如果您仔细查看(例如使用 tcpdump 或 wireshark)单个请求的 tcp/ip 通信,您会发现 http 情况需要客户端和服务器之间的 10 个数据包,而 https 需要 16:使用 https 的延迟要高得多。(更多关于延迟的重要性在这里) 在测试中添加 keep-alive ( aboption -k) 可以改善这种情况,因为现在所有请求都共享相同的连接,即 SSL 开销较低 - 但 https 仍然可以测量得更慢: 带有 keep-alive (" ")的http的结果ab -k -n 10000 http://ubuntu904/index.html 测试时间:1.200秒 每秒请求数:8334.86 (#/sec) 每个请求的时间:0.120ms 带有 keep-alive (" ") 的https的结果ab -k -n 10000 https://ubuntu904/index.html: 测试时间:2.711秒 每秒请求数:3688.12 (#/sec) 每个请求的时间:0.271ms 结论: 在这个简单的测试用例中,https 比 http 慢得多。 启用 https 支持并对您的网站进行基准测试以查看您是否要支付 https 开销是一个好主意。 使用 wireshark 来了解 SSL 开销。 David Pashley 2009-07-22T10:53:04+08:002009-07-22T10:53:04+08:00 在现代服务器上,我会说您的瓶颈将是网络和您的应用程序,而不是加密。apache 中的 TLS/SSL 将使用经过相当优化的 C 语言编写,因此与您的 PHP 代码相比将相形见绌,尤其是在您要做数据库访问之类的事情时。提供静态文件可能会产生更大的影响,因为加密将成为整个过程中更大的一部分。我不能给你任何具体的数字,但如果超过 5% 并且可能接近几个百分点,我会感到惊讶。 SaveTheRbtz 2009-07-22T14:04:48+08:002009-07-22T14:04:48+08:00 不要假设任何事情,自己测试!当然是在您的特定网络应用程序上。 抗体 围城 JMeter Keith 2009-07-22T11:08:16+08:002009-07-22T11:08:16+08:00 我发现在现代硬件上,我更可能受特定事务的 I/O 限制,而不是受处理器(计算)限制。在谈论压缩和加密时尤其如此。这些天,128 位加密是微不足道的 - 我通常比使用 SSL 更难构建和交付传出页面,并且在几年内没有注意到 http 和 https 流量之间的性能显着差异。 Chris 2009-07-23T02:23:37+08:002009-07-23T02:23:37+08:00 我支持 nginx 的建议。在我自己的测试中,它作为专用的 SSL 卸载程序表现良好。 Coops 2009-07-22T10:59:33+08:002009-07-22T10:59:33+08:00 当然,如果 SSL 处理确实受到重创,您可以随时将其从服务器移至专用盒子。这里有一篇关于使用 nginx 执行此操作的好文章。这是我们在高负载的第 7 层负载平衡服务器上所做的事情。 Francesco Abeni 2009-07-22T13:01:00+08:002009-07-22T13:01:00+08:00 我可以确认,与包含的所有其他元素(脚本、网络等)相比,加密的额外负载非常小 Areeb Soo Yasir 2016-04-19T14:15:17+08:002016-04-19T14:15:17+08:00 根据我的经验,一般规则与您的公钥有多大直接相关(例如 2048、4096 和 8192)都需要更长的时间。然而,我几乎看不出桌面环境有什么不同,但移动设备是你看到不同之处的地方,因为它需要计算能力。 一般来说,这是不幸的,但 SSL 总是并且很可能总是会带来巨大的性能损失。
为了进行快速和肮脏的测试(即没有任何优化!)我在本地 Ubuntu 9.04 VM 上启用了简单的 Ubuntu apache2 默认网站(它只是说“它有效!”),并在本地 Ubuntu 9.04 VM 上使用 http 和 https(自签名证书)并运行 apache对
ab
10,000 个请求(无并发)进行基准测试。客户端和服务器位于同一台机器/VM 上:http ("
ab -n 10000 http://ubuntu904/index.html
")的结果https (" ")的结果
ab -n 10000 https://ubuntu904/index.html
:如果您仔细查看(例如使用 tcpdump 或 wireshark)单个请求的 tcp/ip 通信,您会发现 http 情况需要客户端和服务器之间的 10 个数据包,而 https 需要 16:使用 https 的延迟要高得多。(更多关于延迟的重要性在这里)
在测试中添加 keep-alive (
ab
option-k
) 可以改善这种情况,因为现在所有请求都共享相同的连接,即 SSL 开销较低 - 但 https 仍然可以测量得更慢:带有 keep-alive (" ")的http的结果
ab -k -n 10000 http://ubuntu904/index.html
带有 keep-alive (" ") 的https的结果
ab -k -n 10000 https://ubuntu904/index.html
:结论:
在现代服务器上,我会说您的瓶颈将是网络和您的应用程序,而不是加密。apache 中的 TLS/SSL 将使用经过相当优化的 C 语言编写,因此与您的 PHP 代码相比将相形见绌,尤其是在您要做数据库访问之类的事情时。提供静态文件可能会产生更大的影响,因为加密将成为整个过程中更大的一部分。我不能给你任何具体的数字,但如果超过 5% 并且可能接近几个百分点,我会感到惊讶。
不要假设任何事情,自己测试!当然是在您的特定网络应用程序上。
我发现在现代硬件上,我更可能受特定事务的 I/O 限制,而不是受处理器(计算)限制。在谈论压缩和加密时尤其如此。这些天,128 位加密是微不足道的 - 我通常比使用 SSL 更难构建和交付传出页面,并且在几年内没有注意到 http 和 https 流量之间的性能显着差异。
我支持 nginx 的建议。在我自己的测试中,它作为专用的 SSL 卸载程序表现良好。
当然,如果 SSL 处理确实受到重创,您可以随时将其从服务器移至专用盒子。这里有一篇关于使用 nginx 执行此操作的好文章。这是我们在高负载的第 7 层负载平衡服务器上所做的事情。
我可以确认,与包含的所有其他元素(脚本、网络等)相比,加密的额外负载非常小
根据我的经验,一般规则与您的公钥有多大直接相关(例如 2048、4096 和 8192)都需要更长的时间。然而,我几乎看不出桌面环境有什么不同,但移动设备是你看到不同之处的地方,因为它需要计算能力。
一般来说,这是不幸的,但 SSL 总是并且很可能总是会带来巨大的性能损失。