首页 > 解决方案 > 许多有序队列 - 如何在应用程序实例之间自动重新平衡流?

问题描述

问题描述

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

换句话说,我想实现这样的事情:

分布式队列

..但是,如果我的一个应用程序失败了,其他实例应该占用当前剩余的所有流量,并正确分配(负载相等)。

请注意,我的代码是用node.js v10 (typescript) 编写的,我的基础设施是基于Azure的,所以除了自托管解决方案(如 RabbitMQ)外,基于 azure 的解决方案(如 Azure 服务总线)也是可能的,但较少供应商锁定,对我来说更好的解决方案;)

我现在的架构

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

在此处输入图像描述

我有 100 000 个车辆跟踪器设备(不同的,许多制造商和协议),它们中的每一个都与我的一个名为decoder的自定义应用程序进行通信。这个小型微服务解码并统一来自跟踪器的有效负载并将其发送到分布式队列。每个跟踪器每 10-30 秒发送一次消息。

请注意,我必须保持来自单个设备的消息顺序,这非常重要!

在下一步中,我有处理应用程序微服务,我想要扩展(分叉/集群)取决于跟踪器设备的数量。这个应用程序的每个分支都应该订阅一些主题/消费者组来处理来自设备的消息,同时保持秩序。处理每条消息大约需要 1-3 秒。

请注意,在每时每刻,我都可以添加或删除跟踪器设备,并且此信息应自动传播到处理应用程序的分支,并且此实例应该能够自动重新平衡队列中的流量。

问题是如何用尽可能少的(node.js)代码行来做到这一点,同时保持解决方案简单、干净和便宜?:)

如上图所示,如果 3 号分叉失败,系统必须决定哪个工作分叉应该收到“蓝色”消息。此外,如果 3 号分叉返回,也需要重新平衡。

我自己的研究

我读到了 Apache Kafka with Consumer Groups,但 Kafka 对我来说很难学习和实施。

我阅读了 RabbitMQ 和消费者组/许多主题,但我不知道如何编写自动重新平衡功能以及如何使用 rabbitMQ(哪些插件?哪些设置/配置?有很多选项......)。

我阅读了有关带有消息会话的 Azure 服务总线,但它具有供应商锁定(天蓝色云),成本很高,并且与其他解决方案一样,不提供开箱即用的完全自动重新平衡。

我读过 Redis Streams(与消费者组),但它是新功能(缺少 node.js 库),也不提供自动重新平衡。

标签: node.jsarchitectureapache-kafkarabbitmqmessage-queue

解决方案


1 个消息代理

对于第一个问题,您应该寻找一个成熟的 m2m 协议代理,它可以让您自由设计自己的智能数据交换算法。

2 负载均衡器

第二个问题的答案是您必须使用性能良好的负载均衡器来处理如此庞大的 100000 辆联网汽车。我建议使用 Azure API Gateway 或 Nginx 负载均衡器。

现在让我们看看一些联网汽车解决方案,并分析 Aws IoT 或 Azure IoT 如何很好地完成这项工作。

开源物联网解决方案

开源物联网解决方案

Nginx 或 API Gateway 用于负载平衡目的,而事件处理在 Kafka 上完成。使用kafka你可以实现自己的规则引擎来进行智能数据切换。同样,任何作为 IoT 桥接器的 Message Broker 都会做得更好。如果我是你,你会使用 VerneMQ 来实现 MQTTv5 功能和数据路由。在这种情况下,不需要队列。同样,如果您想使用 azure queue,则必须集中精力管理队列分叉和抢占。要无缝控制队列,您必须编写 Azure Queue Trigger server-less Function。因此,您不被供应商锁定的目标将无法实现。

一句话,使用 VerneMQ,使用 Nginx 实现 MQTT V5 非常好实现,但由于所有这些都是开源产品,因此您必须具有强大的实现和故障排除能力,否则您的业务运营将无法支持。

最好使用专业的物联网云服务来解决数千辆联网汽车的问题。这是有偿的,因为服务的 SLA 标准很高,在系统运行管理上花费很少。

Azure 物联网解决方案

Azure 物联网解决方案

如果您使用的是 Azure 解决方案,则您使用的是无需担心负载平衡的 IoT 中心。使用 Azure 设备 SDK,您可以将所有带有移动 LTE sim、OBD 插件等的汽车连接到云端。然后 azure 函数可以处理事件处理等等。

AWS 物联网解决方案

AWS 物联网解决方案

与 Azure IoT 设备 SDK 不同,AWS IoT 有用于设备的 sdk。但在这个架构中,我们希望以稍微不同的方式完成联网汽车项目。对于事物影子的抖动和实际设备状态同步,我们在边缘端使用了 AWS GreenGrass 核心解决方案。除了无服务器物联网事件处理,我们还解决了整个联网汽车解决方案。

同样,Azure IoT edge 可用于向设备双胞胎提供所有罐头信息,并在实际汽车和双胞胎之间进行同步。

希望这将使您清楚地了解如何实施并查看供应商锁定或解锁情况的成本效益。

谢谢你。


推荐阅读