扩展Azure IoT中心,分区和自定义路由/端点

时间:2018-02-19 14:32:12

标签: azure partitioning azure-eventhub azure-iot-hub

我们的解决方案使用Azure IoT中心将数千台设备连接到我们的后端。设备报告运行状态,并根据此状态控制设备。挑战在于设备是以组的形式安装的,并且设备的状态更改会影响组中的其他设备。因此,我们需要按顺序处理组的消息。我宁愿使用设备groupId来分区消息。 IoT集线器及其默认端点使用deviceId对消息进行分区,我们必须找到跨分区同步消息的其他方法。到目前为止,我们已经使用了一个信号量,因为我们在一个过程中运行所有内容,所以信号量很好。

由于我们已经接近单个App Service计划无法再处理所有消息的程度,我们需要扩展解决方案。因此,信号量将不再足够,我们需要找到一种分配和同步消息的替代方案。

计划是在IoT中心使用自定义路由,将消息转发到一个或多个事件中心端点。目前我看到两个选项:

  1. 如果在使用自定义路由/端点时可能影响分区密钥,我们可以为每个设备分配一个groupId,并将其用于分区消息。这会将组的所有消息路由到同一个处理器,而无需任何额外的同步,这使我们可以简单地扩展事件处理器以处理更多消息。遗憾的是,在使用自定义路由/端点时,我还没有找到影响消息分区键的方法,看起来这不是一个可行的解决方案。

  2. 将多个自定义事件中心端点添加到IoT中心,并使用groupId将邮件路由到端点。这将要求我们部署多个事件处理器实例,每个实例处理器实例都配置为使用"其"活动中心。由于事件中心至少有2个分区,我们仍然需要使用信号量来同步发往事件处理器的消息。这似乎是唯一可行的选择,但为扩展增加了相当多的复杂性,因为我们必须手动部署和配置每个处理器实例,而不是简单地扩展App Service计划并使用分区来分发消息。

  3. 在使用自定义路由/端点时,有没有办法更改分区密钥,允许我们实现解决方案1.,还是有其他更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

基于源(groupId)将IoT Hub流拆分为子流的简单方法是使用Azure功能(AF),请参阅以下屏幕摘要。

enter image description here

AF样本:

FORMAT