【问题标题】:Delay issue with Websocket over SSL on Amazon's ELB亚马逊 ELB 上基于 SSL 的 Websocket 延迟问题
【发布时间】:2013-02-20 08:08:09
【问题描述】:

我按照此链接中的说明进行操作: 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 工作正常。

服务器正在运行 jetty8。

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

谢谢

【问题讨论】:

  • SSL 是否在 ELB 上终止并且未加密转发?

标签: ssl amazon-ec2 websocket amazon-elb


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    来自ELB docs

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

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

    来自AWS forums

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

    您能否尝试进行更多测量,看看此延迟如何取决于消息大小?

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

    【讨论】:

    • 那么现在客户端是直接连接到 EC2 实例的 IP 还是 ELB 的 IP?如果到ELB的IP,那不是让ELB成为瓶颈吗?
    • 负载均衡器通常不执行 CPU 密集型操作。负载均衡器的全部意义在于将网络流量引导到正确的方向。它理论上唯一的瓶颈是网络带宽。对于 ELB,我想亚马逊会确保这永远不会成为您的瓶颈。如果没有,您的 ELB 可能有一个监控功能,您可以在其中查看您是否接近限制。我想让 ELB 过载并不容易,它们可能有巨大的端口。
    • 您认为一个实例前面的多个 ELB 会导致瓶颈吗?首先,堆叠许多 ELB 是错误的。但是,不,即使那样,它们也可能不是瓶颈。你有什么来支持你的假设?
    猜你喜欢
    • 2021-07-25
    • 2016-12-31
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2014-04-20
    • 1970-01-01
    相关资源
    最近更新 更多