bco*_*cop 5 ssh amazon-web-services elastic-load-balancer
我正在从事一个项目,其中超过 5 万台设备需要使用反向 SSH 隧道与我的服务器进行通信。
这些设备也将在这些端口上产生和移动大量流量,从而消耗大量的网络和服务器上的 CPU。
我正在使用 AWS EC2 堆栈,并选择了一个中等服务器(4 个 CPU 内核和 16 GB RAM)。
由于单个服务器无法处理 5 万多个连接,因此我必须找到一种以某种方式负载平衡流量的方法。
假设每个 EC2 实例最多可以支持 500 个反向 SSH 连接,而不会阻塞,我将需要 50000/500 = 100 个服务器(对于 50k 设备:假设这是目前的硬目标)。
虽然我最终将需要 100 台服务器,但设备的增加将是渐进式的,因此从第一天起我就不需要 100 台服务器。
随着与服务器通信的设备数量的增加,此计数应逐渐增加。
处理这个问题的显而易见的方法是通过 Elastic Load Balancing,或者 Elastic IP(两个概念都有点不同,但 ELB 显然是要走的路)。
但是 ELB 可以在正常的通信协议上工作,例如 HTTP/HTTPS/TCP。
我的情况有点不同:每个设备都分配了不同的端口。
例如:
Dev 1 port = 2000
Dev 2 port = 2001
Dev 3 port = 2003
Dev 50000 port = 52000
Run Code Online (Sandbox Code Playgroud)
我希望整个负载平衡发生在反向 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)
...
Run Code Online (Sandbox Code Playgroud)
很明显,1.1.1.1-1.1.1.3等服务器都是由ELB启动和管理的。
dev 1 在 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
Run Code Online (Sandbox Code Playgroud)
在内部,此 ELB 将启动服务器 1:1.1.1.1 用于前 500 个连接,然后 1.1.1.2 用于接下来的 500 个连接,直到最后,第 50000 个设备将在(可能)1.1.255.200 上注册
我只想使用正向域名:ports.my-domain.com,并希望 AWS 处理其余的。
在线 AWS 教程给出了不同的实现概念,例如:AWS Cloud Watch、AWS Elastic Bean stalk、AWS Cloud Formation、AWS 容器服务(再次:docker 端口概念与我的要求不同)等,但所有这些解释都不是正是在这个方向。
想听听关于哪种技术堆栈为我的要求提供最佳实现的建议。
感谢所有反馈...
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |