我即将在AWS中部署RabbitMQ节点集群。我预计会有100k +(可能是1m +)客户端 - 物联网设备 - 它们将通过MQTT连接到RabbitMQ集群,并将保持24/7/365全天候连接。
现在的问题是:如何将TCP连接从客户端分发到包含RabbitMQ群集的各个节点?我看到了几个选项:
- 使用AWS Elastic Load Balancer
- 在AWS EC2上使用HAProxy
- 使用DNS循环法
- 使用DNS SRV(例如,在SIP服务部署中)
- 使用自定义手写客户端负载平衡算法,基于从服务器获取或硬编码到设备中的地址列表
醇>
考虑到每个连接的负载量和预期持续时间,您会推荐上面列出的解决方案吗?或者可能是这些的组合?或者还有其他值得了解的解决方案吗?
编辑:第一条评论中所述问题的答案:
- SSL:是的,当然是
- keepalive interval:我在考虑1分钟
- 连接是否大部分闲置? - >不,设备将报告各种传感器数据,我假设至少每分钟一次
- 您的MQ群集节点可以连接多少个连接,每个,最大以及您计划加载多少连接? - >如前所述,100k +甚至1m +连接总数,不知道每个节点有多少,我正要进行一些测试来检查
- 您计划为此次加载需要多少个节点? - >老实说,我还不知道,我认为10应该足够100k +连接,但这也取决于EC2机器的类型,对吗?
- 客户是全球分布的,是您的系统,还是集中在一个地区? - >该系统是全球目标,但最初我只打算覆盖一个地区;最终我希望覆盖其他具有独立RabbitMQ集群的区域,并让客户端连接基于地理或延迟的负载均衡
编辑2:我刚刚发现了具有长期TCP连接的潜在Black Hole problem AWS ELB。我还没有检查AWS ELB是否仍然以这种方式运行,但它可能是我的用例的显示阻止。有没有人有过这个或类似问题的经验?