在亚马逊的ELB上使用SSL上的Websocket延迟问题

时间:2013-03-05 19:04:46

标签: ssl amazon-ec2 websocket amazon-elb

我按照此链接中的说明操作: How do you get Amazon's ELB with HTTPS/SSL to work with Web Sockets?设置ELB以使用Websocket(在TCP模式下将ELB转发443到8443)。现在我看到wss的这个问题:服务器发送message1,客户端没有收到它;几秒钟后,服务器发送message2,客户端收到两条消息(两条消息都在30字节左右)。我可以很容易地重现这个问题。如果我在服务器上使用iptable设置端口转发并让客户端直接连接到服务器(端口443),我就不会遇到问题此外,问题似乎只发生在wss上。工作正常。

服务器正在运行jetty8。

我检查了EC2论坛并没有真正找到任何东西。我想知道是否有人见过同样的问题。

由于

2 个答案:

答案 0 :(得分:1)

根据您的描述,这很可能是ELB的缓冲问题。快速研究表明,这实际上就是问题所在。

来自ELB docs

  

当您使用TCP进行前端和后端连接时,您的   负载均衡器会将请求转发给后端实例   无需修改标题。此配置也不会   为会话粘性或X-Forwarded- *标题插入cookie。

     

对前端和后端使用HTTP(第7层)时   连接,您的负载均衡器解析请求中的标头和   在重新发送请求之前终止连接   注册实例。这是由提供的默认配置   Elastic Load Balancing。

来自AWS forums

  

我认为这是特定于HTTP / HTTPS但不可配置但不能   说我很有信心。您可能想尝试在纯TCP中使用ELB   端口80上的模式,我相信只会将流量传递给   客户端,反之亦然,没有缓冲。

您是否可以尝试进行更多测量并查看此延迟如何取决于邮件大小?

现在,我不完全确定你已经做了什么,失败了什么,什么没有失败。但是,从文档和论坛帖子来看,解决方案似乎是使用TCP / SSL(第4层)ELB类型,用于前端和后端。

答案 1 :(得分:0)

这与“Nagle算法”产生共鸣...... TCP堆栈可以配置为在通过线路发送请求之前捆绑请求以减少流量。这可以解释症状,但值得一试