【问题标题】:Azure IoT Hub - Recovering from a device flooding the hub with reported device twin messagesAzure IoT 中心 - 从使用报告的设备孪生消息淹没中心的设备中恢复
【发布时间】:2020-09-02 12:10:59
【问题描述】:

我有一个 Azure IoT 中心应用程序和一个设备刚刚开始发送消息,指示每隔一秒报告的设备孪生属性发生变化。在几个小时内,当天的总消息量就超过了 5 万条。当这个数字达到 40k 时,IoT 中心对所有客户的响应变得非常缓慢 - 不仅直到设备关闭,而且直到所有这些消息都设法通过系统,这似乎是几个小时后或直到第二天早上.

因此,如果发生这种类型的泛滥,所有客户的整个系统都会因运行缓慢而停止运行。

这是一个设备错误,需要修复,但我想知道是否有办法(如果发生这种情况)让整个 IoT 中心恢复正常且速度不慢?诸如踢有问题的设备或重新启动集线器之类的东西。或者更好 - 有没有办法防止设备以超过每分钟 x 条消息的速度淹没集线器?

【问题讨论】:

  • IoT Hub 使用的规模层和单位数量是多少?
  • 这是 S1 - 标准。另外 - IoT 中心单元的数量:1
  • 尝试切换到 S3,其节流限制约为 S1 的 5 倍。请注意,价格是最高的,例如每件 2,500 美元
  • 是的,我想过,但这并不是真正的解决方案。这就像购买更多硬件以获得更快的速度。我需要解决问题的根源。设备不应该能够如此快速地发送消息,或者我应该能够让所有客户的 IoT 中心的整体速度很快恢复正常。
  • 可能是 Failover 功能可以帮到你,查看更多详情docs.microsoft.com/en-us/azure/iot-hub/tutorial-manual-failover,

标签: azure azure-iot-hub


【解决方案1】:

您可以构建一些逻辑来在违规设备开始向您的集线器发送垃圾邮件时将其踢出。一种方法可能是将所有 twinChangeEvents 路由到一个单独的端点并编写一个流分析作业来对每个 deviceId 的消息进行分组,并在 X 分钟的滑动窗口中保持事件计数。在计数达到您设置的阈值后,您可以调用 Azure 函数来禁用设备并发送通知。

有一个警告,docs 状态:

如果变化率太高,或其他原因,如 内部故障,IoT 中心可能只发送一个通知 包含所有更改。

我不知道您的设备是否达到了该速率,但我认为这将是踢出违规设备的合适方法。

【讨论】:

    【解决方案2】:

    在某个时候,一旦达到您购买的层级和单位的限制限制,IoT 中心就会开始拒绝您的消息。现在,要处理超出限制的消息,或者 IoT 中心处理消息 you should auto-scale your IoT hub 的速度很慢。

    根据上面提供的链接中的文档:-

    本文中概述的示例解决方案提供了在当前消息计数超过设定阈值(例如,90% 的允许消息)的情况下监控 IoT 中心的能力,并且在这种情况下,以自动将 IoT 中心扩展到下一个容量单位。

    归根结底,您还需要自动缩减 IoT 中心的规模,以便在接收到的流量较低的情况下,IoT 中心的成本不会很高。检查上面文章链接中的Scaling down 部分。

    【讨论】:

      猜你喜欢
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多