Erlang YAWS https税

时间:2015-01-31 11:07:43

标签: ssl erlang yaws

由于一切都应该是https,我启用了它,并注意到https与http相比要慢得多。

我在达拉斯有一个Ubuntu / YAWS服务器。我使用" yaws -daemon --nodebug"

启动YAWS

如果我这样做

  

时间curl -i https://share.spreadsheetconverter.com/echo/

  

时间curl -i http://share.spreadsheetconverter.com/echo/

来自服务器本身,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进行额外的网络呼叫。

我也一直在试验

  

http://tools.pingdom.com/fpt/

刚刚提取了他们报告的SSL时间。请注意,YAWS的SSL时间增加得更快

          |  YAWS  |  IIS
Dallas    |  79ms  |  75ms 
New York  |  212ms |  87ms
Amsterdam |  503ms | 315ms

好的,我该怎么办?

  • 我的YAWS设置中是否有错误?
  • 将NGINX放在YAWS前解决问题,并让Nginx处理https?
  • 我的SSL证书中是否有错误?它们可以更快还是更慢?我已查看https://www.ssllabs.com/ssltest/analyze.html

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中,它是两个单独的请求。

所有这些要求必须通过大西洋。如果我改为使用相同的数据中心,那么差异要小得多。

1 个答案:

答案 0 :(得分:1)

Nginx或HAproxy可以解决这个问题。 您应该终止代理节点上的HTTPS流量。之后,您应该在erlang节点上传递HTTP流量。 此外,在没有代理的情况下将erlang节点保持在互联网上并不是一个好习惯。