1

我已经为一些基于物联网和工业4.0概念的演示目的构建了测试应用程序。以下是重要的一点。用于远程监控的Azure解决方案

  1. 我有建立在Windows的IoT后台应用(上树莓 裨3)收集传感器数据,并推到MS Azure云。有 可能是许多同时的物联网设备。
  2. 在Azure方面,IoT Hub接收设备到云消息。
  3. 然后将数据传递到将数据传递到事件中心的流分析作业。
  4. 事件中心在我的配置中有2个消费者组,这两个组都由Azure Web应用程序使用。
  5. WebJob使用默认使用者组来存储历史数据,而MVC 5应用程序使用图像中名为消费者组1的自定义使用者组。
  6. MVC 5应用程序使用SignalR将数据传递给连接的用户以更新仪表板。
  7. 为了演示的目的,这个场景似乎工作正常,我们有5或10个同时连接到云webapp。

以下是安装程序的体系结构图

IoT solution Architecture diagram

问题

现在对于真正的情况可能有许多用户同时云应用和存在的问题时,云来进入游戏中,它可以将webapp横向放大到许多实例,在这种情况下直接从Event Hub读取事件可能会产生问题,而不是所有的web-app实例都会收到所有事件这是错误的,我认为这是MS Azure remote monitoring Architecture diagram的原因,即webapp不直接从Event Hub读取消息。

问题

什么可能是最好/入住改变上述架构来解决问题,但还是显示实时事件给客户?

+1

@CSharpRocks哈哈,你刚刚提供了他已经包含的链接。 –

+0

使用[逻辑体系结构](https://docs.microsoft.com/en-us/azure/iot-suite/iot-suite-remote-monitoring-sample-walkthrough#logical-architecture)时,使用Azure时会出现什么问题存储(Blob)在里面? –

+0

@ RitaHan-MSFT在我脑海中唯一的问题是我可以实现传递给Web GUI的实时事件吗?因为目前它全部由Event Hub处理,并且每当有新事件发生时它就直接传递给GUI,在Logical architecture中它被存储在Blob中,不直接传递给GUI。一旦发生新事件,我需要更新GUI。 –

回答

1

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

每次事件的集线器分区的最大数量是32。

注意,一个消费者组内的单个分区不能在任何时候连接超过5个并发读取。因此,例如,如果您有一个事件中心,则最多支持32 * 5个并发读取器。

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

就可能造成问题,而直接在这种情况下,阅读从事件中心 事件,而不是所有的web应用程序实例将接收所有事件...

有一些可能的原因:

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

我测试了五个同步阅读器从一个分区接收事件的情况。没有事件损失。

希望这对你有所帮助。如果有任何问题,请随时通知我。

+0

感谢您的解释。我没有指定分区键。因为事件中心设置为流分析作业的输出。我认为事件分布在RR时尚的分区中。阅读我使用'EventProcessorHost'。此外,一个Web应用程序可以有20个并行实例(Scale-up),并且每个实例都有自己的EventProcessorHost,因此在这种情况下,一些Web应用程序实例可能会错过消息?,因为EventProcessorHost会在云存储中全局保留偏移量。我可以使它与EventProcessorHost一起工作吗? –