rabbitmq 许多有序队列-如何在应用示例之间自动重新平衡流?

wmtdaxz3  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(731)

问题描述

我想为我的项目部署分布式、有序队列解决方案,但遇到了问题:

  • 我应该使用哪种工具/解决方案?哪一种最容易实现/学习并且基础架构成本更低?RabbitMQ,Kafka,Redis Streams?
  • 如何在故障情况下或当新的主题/流被添加到系统时为每个消费者实现主题/流的自动重新平衡

换句话说,我想认识到这样的东西:
distributed queues
..但是,如果我应用程序之一失败,则其它示例应获取当前以适当分布(相等负载)留下的所有业务。
请注意,我的代码是在node.jsv10(TypeScript)中编写的,我的基础架构基于Azure,因此除了自托管解决方案(如RabbitMQ)之外,基于Azure的解决方案(如Azure Service Bus)也是可能的,但较少的供应商锁定对我来说是更好的解决方案

我目前的架构

现在我提供一个更详细的背景我的系统:

我有100000个车辆跟踪器设备(不同的设备,不同的制造商和协议),每个设备都与我的一个名为decoder的自定义应用程序进行通信。这个小微服务解码并统一来自跟踪器的有效载荷,并将其发送到分布式队列。每个跟踪器每10-30秒发送一次消息。
注意,我必须保持来自单个设备的消息的顺序,这是非常重要的!
下一步,我有一个处理应用微服务,我想根据跟踪器设备的数量来扩展(分叉/集群)。这个应用的每个分叉都应该订阅一些主题/消费者组,以处理来自设备的消息,同时保持顺序。处理每个消息大约需要1-3秒。
请注意,在每个时刻,我都可以添加或删除跟踪器设备,并且此信息应自动传播到处理应用程序的分支,并且此示例应能够自动重新平衡队列中的流量。
问题是如何用尽可能少的(node.js)代码行做到这一点,同时保持解决方案简单、干净和便宜?:)
如上图所示,如果3号分叉出现故障,系统必须决定哪个工作分叉应该得到“蓝色”信息。同样,如果3号分叉返回,也需要重新平衡。
我自己的研究
我在消费者团体中读到过ApacheKafka,但Kafka对我来说很难学习和实施。
我读了很多关于RabbitMQ和消费者组的主题,但我不知道如何编写自动重新平衡功能,也不知道如何使用RabbitMQ(哪些插件?哪些设置/配置?有这么多选项...)。
我读过关于Azure Service Bus与message sessions的文章,但它有供应商锁(Azure云),它的成本很高,而且像其他解决方案一样,不提供开箱即用的完全自动重新平衡。
我读过Redis Streams(有消费者组),但它是新特性(缺少node.js库),也不提供自动再平衡。

3zwjbxry

3zwjbxry1#

1消息代理程序

对于第一个问题,你应该寻找一个成熟的m2m协议代理,这将给予你在设计自己的智能数据交换算法的自由。

2负载平衡器

对于第二个问题的答案,你必须使用性能良好的负载平衡器来处理如此庞大的100000辆连接的汽车。我建议使用Azure API网关或Nginx负载平衡器。
现在让我们来看看一些互联汽车解决方案,并分析Aws IoT或Azure IoT如何出色地完成这项工作。

开源物联网解决方案

OpenSource IoT Solution
Nginx或API网关用于负载平衡,而事件处理在Kafka上完成。使用Kafka,您可以实现自己的智能数据交换规则引擎。类似地,任何消息代理作为物联网桥都会做得更好。如果我是您,您将使用VerneMQ来实现MQTTv 5功能和数据路由。在这种情况下,队列是不需要的。同样,如果你想使用Azure队列,你必须集中精力管理队列分叉和抢占。为了无缝地控制队列,你必须编写Azure队列触发器无服务器函数。因此,你不被供应商锁定的目标将是不可能实现的。
总之,使用VerneMQ,MQTT V5与Nginx的实现将是伟大的实现,但由于所有这些都是开源产品,您必须在实现和故障排除方面很强,否则您的业务运营将在支持失败。
最好使用专业的物联网云服务来解决成千上万辆互联汽车的问题。这是值得的,因为服务的SLA是非常高的标准,在系统运营管理方面几乎没有工作。

Azure物联网解决方案

Azure IoT Solution
如果您使用Azure解决方案,您将使用IoT Hub,无需担心负载平衡问题。使用Azure设备SDK,您可以将所有带有移动的LTE SIM卡、OBD插件等的汽车连接到云。然后Azure功能可以处理事件处理等。

AWS物联网解决方案

AWS IoT Solution
与Azure IoT Device SDK不同,AWS IoT有面向设备的sdk。但在这个架构中,我们想要完成的互联汽车项目略有不同。对于事物影子的晃动和实际设备状态同步,我们在边缘端使用了AWS GreenGrass核心解决方案。随着无服务器的IoT事件处理,我们解决了整个互联汽车解决方案。
类似地,Azure IoT edge可用于向设备双胞胎提供所有CAN信息,并在实际汽车和双胞胎之间进行同步。
希望这将给你一个清晰的想法如何实施和看到成本效益超过供应商锁定或解锁的情况。

  • 谢谢-谢谢

相关问题