Amazon上通过SSL的Websocket延迟问题';易北河

Amazon上通过SSL的Websocket延迟问题';易北河,ssl,amazon-ec2,websocket,amazon-elb,Ssl,Amazon Ec2,Websocket,Amazon Elb,我按照此链接中的说明进行操作: 将ELB设置为与Websocket一起工作(在TCP模式下将ELB forward 443设置为8443)。现在我看到了wss的这个问题:服务器发送消息1,客户端不接收它;几秒钟后,服务器发送消息2,客户机接收两条消息(两条消息大约为30字节)。我可以相当容易地复制这个问题。如果我在服务器上使用iptable设置端口转发,并让客户端直接连接到服务器(端口443),那么我也不会有问题,问题似乎只发生在wss上。ws工作正常 服务器正在运行jetty8 我查看了EC2

我按照此链接中的说明进行操作: 将ELB设置为与Websocket一起工作(在TCP模式下将ELB forward 443设置为8443)。现在我看到了wss的这个问题:服务器发送消息1,客户端不接收它;几秒钟后,服务器发送消息2,客户机接收两条消息(两条消息大约为30字节)。我可以相当容易地复制这个问题。如果我在服务器上使用iptable设置端口转发,并让客户端直接连接到服务器(端口443),那么我也不会有问题,问题似乎只发生在wss上。ws工作正常

服务器正在运行jetty8

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


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

从:

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

当您对前端和后端使用HTTP(第7层)时 连接时,负载平衡器解析请求和 在将请求重新发送到之前终止连接 已注册实例。这是由提供的默认配置 弹性负载平衡

从:

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

您是否可以尝试进行更多测量,并了解延迟如何取决于消息大小


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

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

SSL是否在ELB上终止并转发未加密?那么现在客户端是直接连接到EC2实例的IP还是ELB的IP?如果连接到ELB的IP,这难道不会使ELB成为瓶颈吗?负载平衡器通常不会占用CPU。负载平衡器的全部目的就是将网络流量引导到正确的方向。理论上它唯一的瓶颈是网络带宽。在ELB的案例中,我想亚马逊会确保这永远不会成为你的瓶颈。如果没有,可能有一个监测功能,你可以看到你的ELB是否接近极限。我想让一个ELB过载并不是那么容易,它们可能有巨大的端口。你是否认为在一个实例前面有多个ELB会导致瓶颈?首先,多个厄尔巴鄂是错误的。然而,不,即使这样,它们也可能不是瓶颈。你有什么来支持你的假设?