【发布时间】:2018-02-19 14:32:11
【问题描述】:
我们的解决方案使用 Azure IoT 中心将数千台设备连接到我们的后端。设备报告运行状态,并根据此状态控制设备。挑战在于设备以组的形式安装,并且设备的状态更改会影响组中的其他设备。因此,我们需要按顺序处理组的消息。我宁愿使用设备 groupId 来划分消息。 IoT 中心及其默认端点使用 deviceId 对消息进行分区,我们不得不寻找其他方法来跨分区同步消息。到目前为止,我们为此使用了一个信号量,它运行良好,因为我们在一个进程中运行所有内容。
随着我们接近单个应用服务计划无法再处理所有消息的地步,我们需要扩展解决方案。因此,信号量已经不够用了,我们需要找到一种替代方案来分发和同步消息。
计划是在 IoT 中心使用自定义路由,将消息转发到一个或多个事件中心终结点。目前我看到两个选项:
如果在使用自定义路由/端点时可能影响分区键,我们可以为每个设备分配一个 groupId,并将其用于分区消息。这会将一个组的所有消息路由到同一个处理器,而无需任何额外的同步,从而允许我们简单地扩展事件处理器以处理更多消息。遗憾的是,在使用自定义路由/端点时,我也没有找到影响消息分区键的方法,而且看起来这不是一个可行的解决方案。
-
将多个自定义事件中心终结点添加到 IoT 中心,并使用 groupId 将消息路由到终结点。这将需要我们部署多个事件处理器实例,每个实例都配置为使用“其”事件中心的消息。由于事件中心至少有 2 个分区,我们仍然需要使用信号量来同步发往事件处理器的消息。这似乎是唯一可行的选择,但增加了相当多的扩展复杂性,因为我们必须手动部署和配置每个处理器实例,而不是简单地扩展应用服务计划并使用分区来分发消息。
在使用自定义路由/端点时是否可以更改分区键,从而使我们能够实现解决方案 1.,还是有其他更好的方法来实现这一点?
【问题讨论】:
标签: azure partitioning azure-eventhub azure-iot-hub