由于一切都应该是https,我启用了它,并注意到https与http相比要慢得多。
我在达拉斯有一个Ubuntu / YAWS服务器。我使用" yaws -daemon --nodebug"
启动YAWS如果我这样做
和
来自服务器本身,https需要大约100ms和http 20ms,即差值为80ms。
当我们从瑞典,欧洲尝试时,https是1400毫秒,http是350毫秒。由于大西洋上的延迟,这些数字可能是合乎逻辑的。
然而,现在到了奇怪的事情。
我在达拉斯也有一台Windows / IIS服务器。
如果我在两台服务器上比较简单的http-get请求,则YAWS服务器的差异https-penalty比IIS大得多。 (我也测试过Tomcat,它的行为类似于IIS)。
它似乎也与延迟相关,即从服务器越长,IIS和YAWS之间的差异越大。
当我使用来自瑞典的达拉斯的IIS服务器进行类似测试时,https为1000毫秒,而http与YAWS相同,即IIS的速度比雅虎快得多(400毫秒)。这几乎就像是YAWS进行额外的网络呼叫。
我也一直在试验
刚刚提取了他们报告的SSL时间。请注意,YAWS的SSL时间增加得更快
| YAWS | IIS
Dallas | 79ms | 75ms
New York | 212ms | 87ms
Amsterdam | 503ms | 315ms
好的,我该怎么办?
2015-08-20更新
我更新了雅马比2.0,是的,性能差异仍然存在。
使用
curl -v --trace-time --trace-ascii echo.log https://share.spreadsheetconverter.com/echo/
并将其与
进行比较curl -v --trace-time --trace-ascii server1.log https://www.spreadsheetserver.com/server1/
我对所有行进行了比较,我发现我们在一行中放松了300毫秒。
这是我们与Yaws 2.0交谈时的样子
17:37:54.606668 == Info: TLSv1.2, TLS handshake, Finished (20):
17:37:54.606692 => Send SSL data, 16 bytes (0x10)
0000: ......Jb.9...#.^
17:37:54.758726 == Info: TLSv1.2, TLS change cipher, Client hello (1):
17:37:54.758761 <= Recv SSL data, 1 bytes (0x1)
0000: .
17:37:55.107695 == Info: TLSv1.2, TLS handshake, Finished (20):
17:37:55.107726 <= Recv SSL data, 16 bytes (0x10)
0000: ..........Y.xV.!
17:37:55.107784 == Info: SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA
当我与IIS交谈时
17:40:25.247308 == Info: TLSv1.0, TLS handshake, Finished (20):
17:40:25.247329 => Send SSL data, 16 bytes (0x10)
0000: ........f4..qh:(
17:40:25.376893 == Info: TLSv1.0, TLS change cipher, Client hello (1):
17:40:25.376925 <= Recv SSL data, 1 bytes (0x1)
0000: .
17:40:25.377081 == Info: TLSv1.0, TLS handshake, Finished (20):
17:40:25.377103 <= Recv SSL data, 16 bytes (0x10)
0000: ....C..'.A,..'R.
17:40:25.377142 == Info: SSL connection using TLSv1.0 / AES128-SHA
对于Yaws和IIS,第一个&#34;发送SSL数据&#34;需要150毫秒
对于IIS,两个即时&#34; Recv SSL数据&#34;没有延迟。
然而,在Yaws的情况下,我们必须等待350毫秒的第一个&#34; Recv SSL数据&#34;,然后下一个是立即
这就像IIS中的异步,但在雅司中同步。在IIS中,要接收的数据与Send的ack组合,但在Yaws中,它是两个单独的请求。
所有这些要求必须通过大西洋。如果我改为使用相同的数据中心,那么差异要小得多。
答案 0 :(得分:1)
Nginx或HAproxy可以解决这个问题。 您应该终止代理节点上的HTTPS流量。之后,您应该在erlang节点上传递HTTP流量。 此外,在没有代理的情况下将erlang节点保持在互联网上并不是一个好习惯。