AWS EC2上的Websocket负载平衡

时间:2014-06-07 19:42:17

标签: amazon-web-services amazon-ec2 websocket load-balancing

我们正在构建一个在AWS EC2上使用WebSockets的扩展应用程序。我们正在考虑使用默认的ELB(Elastic Load Balancing),但这不必要地使负载均衡器本身成为交通繁重操作的瓶颈(参见this related thread),因此我们目前正在寻找一种方法。向客户端发送" 良好实例"的连接详细信息改为连接。但是,Elastic Load Balancer API似乎不支持排序查询​​" 给我(公共)连接详细信息",这很奇怪,因为是任何负载均衡器的核心功能。也许我没看过正确的地方?

更新

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

  1. Use ELB in TCP mode通过ELB隧道传输所有流量。
  2. 只需连接到ELB为您的GET请求连接的实例的公共IP即可。第二种解决方案要求启用公共IP,但不通过ELB路由所有流量。
  3. 我担心最后一部分,因为我认为ELB与它给你的实例不在同一个建筑物中。但我想,它通常是在同一个建筑物中或与实例有一些其他高速连接?在这种情况下,隧道开销可以忽略不计。

    两种解决方案似乎同样可行,或者我在监督某些事情?

2 个答案:

答案 0 :(得分:1)

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

在某些情况下,开发自己的负载平衡逻辑可能是有意义的,特别是如果您的机器使用情况取决于ELB系统本身无法访问的非常特殊的指标。

答案 1 :(得分:1)

是的,我说两种解决方案都是可行的。

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

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