Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何将长寿命TCP连接分发到各个节点,例如集群中的RabbitMQ节点?_Amazon Web Services_Rabbitmq_Load Balancing_Amazon Elb_Iot - Fatal编程技术网

Amazon web services 如何将长寿命TCP连接分发到各个节点,例如集群中的RabbitMQ节点?

Amazon web services 如何将长寿命TCP连接分发到各个节点,例如集群中的RabbitMQ节点?,amazon-web-services,rabbitmq,load-balancing,amazon-elb,iot,Amazon Web Services,Rabbitmq,Load Balancing,Amazon Elb,Iot,我将在AWS中部署一个RabbitMQ节点集群。我预计将有100k+(可能是1m+)个客户机-物联网设备-通过MQTT连接到RabbitMQ集群,并将保持24/7/365的连接 现在的问题是:如何将TCP连接从客户端分发到组成RabbitMQ集群的各个节点?我看到了几个选择: 使用AWS弹性负载平衡器 在AWS EC2上使用HAProxy 使用DNS循环 使用DNS SRV(例如,类似于SIP服务部署) 根据从服务器获取的地址列表或硬编码到设备中的地址列表,使用自定义的手写客户端负载平衡算法 考

我将在AWS中部署一个RabbitMQ节点集群。我预计将有100k+(可能是1m+)个客户机-物联网设备-通过MQTT连接到RabbitMQ集群,并将保持24/7/365的连接

现在的问题是:如何将TCP连接从客户端分发到组成RabbitMQ集群的各个节点?我看到了几个选择:

  • 使用AWS弹性负载平衡器
  • 在AWS EC2上使用HAProxy
  • 使用DNS循环
  • 使用DNS SRV(例如,类似于SIP服务部署)
  • 根据从服务器获取的地址列表或硬编码到设备中的地址列表,使用自定义的手写客户端负载平衡算法
  • 考虑到每个连接的负载量和预期持续时间,您会推荐上面列出的解决方案中的哪一种?或者是这些的组合?或者还有其他值得知道的解决方案吗

    编辑:对第一条评论中所述问题的回答:

    • 是的,当然
    • 保持间隔:我在想大约1分钟
    • 连接大部分空闲吗?->不,设备将报告各种传感器数据,我假设至少每分钟报告一次
    • 您的MQ群集节点可以服务多少个连接,每个连接的最大连接数,以及您计划加载多少连接?->如前所述,总共有100k+甚至1m+个连接,不知道每个节点有多少个,我正要进行一些测试来检查这一点
    • 此负载计划需要多少节点?->老实说,我还不知道,我假设10个足够100k+的连接,但这也取决于EC2机器的类型,对吗
    • 客户机是否分布在全球,您的系统是否集中在一个区域?->该系统面向全球,但最初我只计划覆盖一个地区;最终,我希望用单独的RabbitMQ集群覆盖其他区域,并让客户端通过基于地理位置或延迟的负载平衡进行连接

    编辑2:我刚刚发现了AWS ELB具有长寿命TCP连接的可能性。我还没有检查AWS ELB是否仍以这种方式运行,但它可能是我的用例的一个阻碍。是否有人对此或类似问题有任何经验?

    此处没有足够的信息来确定这些选项中是否有一个不在讨论范围内。您正在使用SSL吗?(可接受的答案包括“是的,当然。”)你的保持间隔是多少?连接大部分是空闲的吗?您的MQ群集节点可以服务多少个连接,每个连接的最大连接数,以及您计划加载多少连接?此负载计划需要多少个节点?客户机是否分布在全球,您的系统是否集中在一个区域?