【问题标题】:Azure Solution for Remote monitoringAzure 远程监控解决方案
【发布时间】:2017-04-14 11:23:23
【问题描述】:

我已经为一些演示目的构建了一个基于 IoT 和工业 4.0 概念的测试应用程序。以下是重点。

  1. 我已经在 Windows IoT 上构建了一个后台应用程序(在 Raspberry Pi 3) 收集传感器数据并推送到 MS Azure 云。那里 可以是多个同时使用的 IoT 设备。
  2. 在 Azure 端 IoT 中心接收设备到云的消息。
  3. 然后将数据传递到流分析作业,该作业将数据传递到事件中心。
  4. 事件中心在我的配置中有 2 个使用者组,这两个使用者组都由 Azure Web 应用程序使用。
  5. WebJob 使用默认 Consumer 组来存储历史数据,而 MVC 5 应用程序使用图像中命名为 Consumer group 1 的 Custom Consumer 组。
  6. MVC 5 应用使用SignalR 将数据传递给连接的用户以更新仪表板。
  7. 出于演示目的,此场景似乎运行良好,我们有 5 或 10 个同时连接到云 web 应用程序。

以下是设置的架构图

问题

现在对于实际场景,可能会有很多用户同时使用云应用程序,并且有一点云开始发挥作用,它可以将 web 应用程序水平扩展到许多实例,直接从 Event 读取事件可能会产生问题在这种情况下集线器,并非所有 Web 应用程序实例都会接收所有事件这是错误的,我认为这就是 MS Azure remote monitoring Architecture diagram 中的原因,Web 应用程序没有直接从事件中心读取消息。

问题

对上述架构进行哪些最佳/快速更改以解决问题并仍向客户端显示实时事件?

【问题讨论】:

  • @CSharpRocks 哈哈,你刚刚提供了他已经包含的链接。
  • 使用Logical architecture 和 Azure Storage(Blob) 有什么问题?
  • @RitaHan-MSFT 我心中唯一的问题是我能否实现将事件实时传递到 Web GUI?因为目前它全部由事件中心处理,每当有新事件时,它都会直接传递给 GUI,在Logical architecture 中,它被存储在 Blob 中,而不是直接传递给 GUI。一旦有新事件,我需要更新 GUI。

标签: architecture azure-web-app-service iot azure-eventhub azure-iot-hub


【解决方案1】:

直接从事件中心读取事件数据受到这些quotas and limits 的限制。

每个事件中心的最大分区数为 32。

请注意,消费者组中的单个分区在任何时候都不能有超过 5 个并发读取器。

因此,例如,如果您有一个事件中心,则最多支持 32*5 个并发阅读器。

如果您有更多同时用户 (>32*5),您需要增加事件中心的数量。

直接从事件中心读取事件时可能会产生问题 在这种情况下,并非所有网络应用实例都会收到所有事件...

有一些可能的原因:

  1. 如果一个或多个阅读器由于Epoch 设置而断开连接。
  2. If you don't specify a partition key when publishing an event, a round robin assignment is used。然后从指定分区接收会丢失其他分区的事件数据。

我测试了五个同时读取器从一个分区接收事件的场景。没有事件丢失。

希望这对您有所帮助。如果有任何问题,请随时告诉我。

【讨论】:

  • 感谢您的解释。我没有指定分区键。因为事件中心设置为流分析作业的输出。我认为事件以 RR 方式分布在分区之间。对于阅读,我使用EventProcessorHost。此外,一个 web-app 可以有 20 个并行实例(Scale-up),每个实例都有自己的 EventProcessorHost,所以在这种情况下,一些 web-app 实例可能会丢失消息?因为 EventProcessorHost 将在云存储中全局保存其偏移量。我可以让它与 EventProcessorHost 一起工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多