2013-03-05 102 views
0

我遵循以下链接中的指令: 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上。 ws工作正常。亚马逊ELB上通过SSL的Websocket的延迟问题

服务器正在运行jetty8。

我查了EC2论坛,没有找到任何东西。我想知道是否有人看到同样的问题。

感谢

+0

SSL在ELB上终止并转发未加密? – oberstet 2013-03-07 16:29:39

回答

1

从你的描述,这个漂亮的可能是一个缓冲的问题与ELB。快速研究表明,这实际上是问题。

ELB docs

当您使用TCP两个前端和后端连接,您 负载平衡器将请求转发到后端实例 不修改标题。此配置也不会 插入会话粘性Cookie或X-Forwarded- *标头。

当使用HTTP(层7),用于既前端和后端 连接,负载平衡器解析报头在所述请求和 终止之前的连接重新发送该请求到 注册的实例( S)。这是 Elastic Load Balancing提供的默认配置。

AWS forums

我相信这是HTTP/HTTPS具体,但不配置的,但不能说 我敢肯定。您可能想尝试在端口80上使用简单的TCP 模式使用ELB,我相信这只会将流量传递到 客户端,反之亦然,无需缓冲。

你可以尝试做更多的测量,看看这个延迟如何取决于消息大小?

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

+0

那么客户端现在是直接连接到EC2实例的IP还是连接到ELB的IP?如果是ELB的知识产权,这不会使ELB成为瓶颈吗? – xrDDDD 2013-08-17 00:21:49

+0

负载平衡器通常不会对CPU造成任何影响。负载平衡器的重点在于将网络流量转向正确的方向。理论上唯一的瓶颈就是网络带宽。在ELB的情况下,我想亚马逊会确保这永远不会成为你的瓶颈。如果没有,那么ELB可能有一个监控功能,您可以看到您是否接近限制。我想超载一个ELB并不是那么容易,他们可能拥有巨大的端口。 – 2013-08-17 17:05:00

+0

前面也许多个ELBs EC2实例的.. – xrDDDD 2013-08-20 03:40:33

0

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