对于Elastic Load Balancer后面的EC2上的长时间运行TCP连接,IP是否会发生变化?

时间:2012-11-05 19:00:45

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

我有一个客户端应用程序,它使用TCP套接字连接到在EC2上运行的自定义服务器。客户端和服务器之间的连接可以持续一段时间(多个小时到一整天)。

我现在正在评估亚马逊的ELB(Elastic Load Balancer),但我担心由于ELB的IP动态变化,当IP发生变化时,现有的连接将会丢失。谁能确认这是否有效?它只是与DNS名称相关联的IP发生了变化吗?这与现有套接字连接的IP改变是一回事吗?最终,这种改变的效果是否会切断现有的基于TCP的套接字连接?

额外信息:

这不是一个“标准”的基于http或浏览器的应用程序 - 客户端应用程序在移动设备上实时运行,并通过专用的TCP套接字与服务器通信。服务器执行连续逻辑,并通过此单个TCP套接字连接在连接的生命周期内与客户端来回通信。我想确保当ELB决定更改IP时,客户端不必重新连接到服务器(即,销毁/重新创建套接字连接)(如果您合法地离开wifi /蜂窝范围或其他东西,这是一回事,但是我不想因为ELB的突发事件而断开连接。)

1 个答案:

答案 0 :(得分:1)

没有。 ELB将负载平衡新的传入连接,但不会拆除和重定向现有问题。

但是,我会质疑使用ELB的好处正是因为这个原因。 ELB无法保证所有实例的公平负载。请考虑以下具有两个实例的方案:

  1. ELB将第一个连接指向实例A.
  2. ELB将第二个连接指向实例B.
  3. ELB将第三个连接指向实例A.
  4. 当客户端完成时,实例B连接断开。
  5. 现在你在A上有“沉重”负载,而在B上根本没有负载。此时,ELB将向B发送新连接,以均衡负载。当A连接断开时,你会遇到相反的情况 - B上的“负载”负载,A上没有负载。

    当您有多个服务于短请求的实例时,ELB非常有用。对于长期连接,我会使用静态IP而不是隐藏ELB背后的那些实例。

    请注意,实际上可以混合使用两种方法,并使用指向ELB和静态IP的两个单独域名,使同一实例响应ELB前端请求和静态IP请求。