AWS EC2 上的 Websocket 负载平衡

Posted

技术标签:

【中文标题】AWS EC2 上的 Websocket 负载平衡【英文标题】:Websocket Load Balancing on AWS EC2 【发布时间】:2014-07-28 20:26:16 【问题描述】:

我们正在 AWS EC2 上构建一个使用 WebSockets 的扩展应用程序。我们正在考虑为此使用默认的 ELB(弹性负载平衡),但这会不必要地使负载平衡器本身成为流量繁重操作的瓶颈(请参阅this related thread),因此我们目前正在寻找一种方法来发送客户端将“好实例”的连接详细信息改为连接。但是,Elastic Load Balancer API 似乎不支持“给我一个好的实例的(公共)连接详细信息”这样的查询,这很奇怪,因为这是任何负载均衡器的核心功能.也许我只是没看对地方?

更新:

目前,我们正在研究两种使用默认实现的简单解决方案:

    Use ELB in TCP mode 将所有流量通过 ELB 进行隧道传输。 只需连接到 ELB 为您的 GET 请求连接到的实例的公共 IP。第二种解决方案需要启用公共 IP,但不会通过 ELB 路由所有流量。

我很担心最后一部分,因为我假设 ELB 与它提供给您的实例不在同一栋建筑中。但我认为,它通常在同一栋建筑中,还是与实例有其他高速连接?在这种情况下,隧道开销可以忽略不计。

这两种解决方案似乎同样可行,还是我在监督什么?

【问题讨论】:

【参考方案1】:

是的,我认为这两种解决方案都是可行的。

第二个的好处是,它允许对您可能想要实现的负载平衡逻辑进行更大程度的自定义(提供对 ELB 循环的改进),在初始 HTTP GET 请求之后将请求分派到您方便的服务器。

缺点可能在安全方面。尚不清楚安全性和 SSL 是否是您要求的一部分,但如果是,第二种解决方案会强制您在 ec2 实例级别处理它,这可能会带来不便并影响每个节点的性能。否则 websocket 通信可能不安全。

【讨论】:

【参考方案2】:

如果您的应用程序设法使 ELB 成为瓶颈,那么您就是一条大鱼。您为什么不首先尝试使用他们的负载均衡器,相信他们的工作是正确的?很难让它“更好”,而最困难的部分是首先定义什么是“更好”。您在问题中肯定没有很好地定义这一点,所以我很确定您只使用他们的负载均衡器就可以了。

在某些情况下,开发自己的负载平衡逻辑可能很有意义,尤其是当您的机器使用依赖于 ELB 系统本身无法访问的非常特殊的指标时。

【讨论】:

感谢您的意见!我更新了我的问题,也许可以澄清它。

以上是关于AWS EC2 上的 Websocket 负载平衡的主要内容,如果未能解决你的问题,请参考以下文章

我是不是需要在 DB 上进行会话集群以在 AWS/EC2 上使用 HAProxy 对 Jetty WebSockets 服务器进行负载平衡?

EC2:多个域的 HTTPS 负载平衡

使用 tomcat 服务器和 aws 负载均衡器将 http 请求重定向到 https

网络负载均衡器的AWS EC2安全组权限

AWS RDS中的负载平衡或只读副本

AWS 应用程序负载均衡器上的 Websocket + SSL