Amazon web services 使用AWS在不同端口上使用反向SSH隧道实现动态负载平衡

Amazon web services 使用AWS在不同端口上使用反向SSH隧道实现动态负载平衡,amazon-web-services,ssh,elastic-load-balancer,Amazon Web Services,Ssh,Elastic Load Balancer,我正在从事一个项目,其中超过5万台设备需要使用反向SSH隧道与我的服务器通信 这些设备还将产生大量流量,并在这些端口之间移动,从而消耗服务器上的大量网络和CPU 我使用的是AWSEC2堆栈,并选择了一个中等规模的服务器(4个CPU内核和16 GB RAM) 由于一台服务器无法连接5万个以上的连接,因此我必须找到一种方法以某种方式平衡流量 假设每个EC2实例可以支持多达500个反向SSH连接,而不会阻塞,我将需要50000/500=100个服务器(对于50k设备:假设这是目前的硬目标) 虽然我最终

我正在从事一个项目,其中超过5万台设备需要使用反向SSH隧道与我的服务器通信

这些设备还将产生大量流量,并在这些端口之间移动,从而消耗服务器上的大量网络和CPU

我使用的是AWSEC2堆栈,并选择了一个中等规模的服务器(4个CPU内核和16 GB RAM)

由于一台服务器无法连接5万个以上的连接,因此我必须找到一种方法以某种方式平衡流量

假设每个EC2实例可以支持多达500个反向SSH连接,而不会阻塞,我将需要50000/500=100个服务器(对于50k设备:假设这是目前的硬目标)

虽然我最终需要100台服务器,但设备的增加将是渐进的,所以从第一天起我就不需要100台服务器

随着与服务器通信的设备数量的增加,此计数应逐渐增加

处理这一问题的明显方法是通过弹性负载平衡,或者弹性IP(这两个概念略有不同,但ELB显然是可行的方法)

但是ELB可以在正常的通信协议上工作,比如HTTP/HTTPS/TCP

我的场景有点不同:每个设备都分配了不同的端口

例如:

Dev 1 port      = 2000
Dev 2 port      = 2001
Dev 3 port      = 2003
Dev 50000 port  = 52000
我希望在反向SSH隧道的端口上实现整个负载平衡,这与整个ELB概念不同

我可以使用DNS名称,例如:ports.my-domain.com

然后,此DNS应该是ELB的中心,在需要时启动/停止新的EC2服务器,并执行端口转发,如:

ports.my-domain.com
|
|- 1.1.1.1 (port range: 2000-2500)
|- 1.1.1.2 (port range: 2501-3000)
|- 1.1.1.3 (port range: 3001-3500)
...
显然,服务器1.1.1.1-1.1.1.3等都是由ELB启动和管理的

当Dev1在端口2000上建立反向SSH时,它总是被分配相同的IP:1.1.1.1,因此存在粘性端口概念,虽然CLB(AWS经典负载平衡器)支持,但不适用于TCP端口

我更喜欢:所有设备都将与ports.my-domain.com通信,并请求如下隧道:

Dev 1       -> ports.my-domain.com: 2000
Dev 2       -> ports.my-domain.com: 2001
Dev 50000   -> ports.my-domain.com: 52000
在内部,此ELB将为前500个连接启动服务器1:1.1.1.1,然后为接下来的500个连接启动1.1.1.2,直到最后,第50000个设备将在(可能)1.1.255.200上注册

我只想使用转发域名:ports.my-domain.com,其余的由AWS处理

在线AWS教程提供了不同的实现概念,如:AWS云观察、AWS弹性豆茎、AWS云形成、AWS容器服务(同样:docker ports的概念与我的要求不同)等。但所有这些解释都不完全是朝着这个方向

我想听听关于什么技术堆栈能够最好地实现我的需求的建议


感谢所有反馈…

您能否详细说明为什么要使用反向SSH?如果您只使用HTTP/S,您似乎正在创建一个已经存在的非常复杂的系统。我已经看到ElasticBeanstalk可以扩展到数百台机器(在不需要时可以缩小),并且它几乎为您提供了所有服务。不过我很可能错过了一些东西。如果您假设一个连续连接,那么您已经遇到了一个问题。基本上,这是一种中继服务器的实现。这些设备将向中继服务器发送视频/音频流,视频/音频流可以从中继服务器传播到其他地方。99.99%的连通性非常理想;所以是的,这是我需要连续连接的条件。。。我无法想象HTTP/S将如何在这方面帮助我,或者我完全错过了一些东西。现在这更有意义了。您可能想看看RTP协议(或其他类似RTMP的协议),因为它们是为您可能遇到的一些问题而设计的。使用经典的负载平衡器,您可以根据流量进行扩展。听起来很酷的产品-对不起,我没有更好的答案!非常感谢你的激励:是的!我已经在使用RTP协议,设备上的后端服务器是RTSP。正如你提到的,我也尝试过使用CLB,但是注意到它几乎没有缺点,所以它不适合100%。我还计划再次访问CLB,也许我错过了一些事情。你找到解决问题的方法了吗?我运行在一个非常相似的场景中。