Amazon ec2 弹性负载平衡器后面EC2上长时间运行的TCP连接的IP会改变吗?

Amazon ec2 弹性负载平衡器后面EC2上长时间运行的TCP连接的IP会改变吗?,amazon-ec2,amazon-web-services,load-balancing,Amazon Ec2,Amazon Web Services,Load Balancing,我有一个客户端应用程序,它使用TCP套接字连接到EC2上运行的自定义服务器。客户端和服务器之间的连接可能会持续一段时间(从几个小时到一整天) 我现在正在评估Amazon的ELB(弹性负载平衡器),但我担心由于ELB的IP动态变化,当IP变化时,现有连接将丢失。有人能证实它是这样工作的吗?是否只是与DNS名称关联的IP发生了更改?这是否与现有套接字连接的IP发生变化相同?最终,这种改变的效果会是切断现有的基于TCP的套接字连接吗 额外信息: 这不是“标准”http或基于浏览器的应用程序-客户端应用

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

我现在正在评估Amazon的ELB(弹性负载平衡器),但我担心由于ELB的IP动态变化,当IP变化时,现有连接将丢失。有人能证实它是这样工作的吗?是否只是与DNS名称关联的IP发生了更改?这是否与现有套接字连接的IP发生变化相同?最终,这种改变的效果会是切断现有的基于TCP的套接字连接吗

额外信息:


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

否。ELB将负载平衡新的传入连接,但不会撕毁和改变现有问题的方向

然而,正因为如此,我怀疑将ELB用于此类系统的好处。ELB不能保证在所有实例上都有公平的负载。考虑以下两个实例:

  • ELB将第一个连接指向实例A
  • ELB将第二个连接指向实例B
  • ELB将第三个连接指向实例A
  • 实例B连接在客户端完成时关闭
  • 现在A上有“重”负载,B上没有负载。此时,ELB将向B发送新连接,以平衡负载。当A的连接断开时,你会进入相反的情况——“B有重”负载,A没有负载

    当您有多个为短请求提供服务的实例时,ELB可能非常有用。对于长期连接,我将使用静态IP,而不是将这些实例隐藏在ELB后面


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

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

    然而,正因为如此,我怀疑将ELB用于此类系统的好处。ELB不能保证在所有实例上都有公平的负载。考虑以下两个实例:

  • ELB将第一个连接指向实例A
  • ELB将第二个连接指向实例B
  • ELB将第三个连接指向实例A
  • 实例B连接在客户端完成时关闭
  • 现在A上有“重”负载,B上没有负载。此时,ELB将向B发送新连接,以平衡负载。当A的连接断开时,你会进入相反的情况——“B有重”负载,A没有负载

    当您有多个为短请求提供服务的实例时,ELB可能非常有用。对于长期连接,我将使用静态IP,而不是将这些实例隐藏在ELB后面


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

    当您说“删除并重定向现有问题”时你的意思是现有连接的客户端将继续能够在同一个套接字上发送/rcv数据吗?啊,这是一个输入错误。我的意思是“不要拆掉……”。是的,这就是我的意思——现有客户机将继续使用他们已经建立的套接字连接。ELB不会触及这些。非常感谢您的确认-我会考虑更多您的建议,因为现在,对于我的需求,ELB似乎是最简单的方法(尤其是现有的连接将得到维护)。当您说“拆除并重定向现有问题”时你的意思是现有连接的客户端将继续能够在同一个套接字上发送/rcv数据吗?啊,这是一个输入错误。我的意思是“不要拆掉……”。是的,这就是我的意思——现有客户机将继续使用他们已经建立的套接字连接。ELB将不会触及这些。非常感谢您的确认-我会考虑更多您的建议,因为现在,对于我的需求,tho ELB似乎是最简单的方法(尤其是现有的连接将得到维护)。