繁体   English   中英

Erlang YAWS https税

[英]Erlang YAWS https tax

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

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

如果我做

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

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

从服务器本身来看,https需要大约100毫秒和http 20毫秒,即差异是80毫秒。

当我们尝试从瑞典,欧洲,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/

我比较了所有行,我看到我们在一行中松动了300ms。

这就是我们与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,第一个“发送SSL数据”需要150毫秒

对于IIS,两个立即“Recv SSL数据”没有延迟。

但是,在Yaws的情况下,我们必须等待350ms才能获得第一个“Recv SSL数据”,然后下一个是立即

这就像IIS中的异步,但在雅司中同步。 在IIS中,要接收的数据与Send的ack组合,但在Yaws中,它是两个单独的请求。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM