1

У меня есть тестовое приложение для некоторых демонстрационных целей, которое основано на концепции IoT и Industry 4.0. Ниже приведены важные моменты.Azure Решение для удаленного мониторинга

  1. У меня есть построить фоновое приложение на Windows, IoT (на Raspberry Pi 3) для сбора данных датчиков и нажать на MS Azure облако. Там может быть много одновременных устройств IoT.
  2. На стороне Azure IoT Hub получает устройство для сообщений в облаке.
  3. Затем данные передаются в сообщение аналитики потока, которое передает данные в концентратор событий.
  4. Event hub имеет две группы пользователей в моей конфигурации, которые оба используются веб-приложением Azure.
  5. Группа По умолчанию Consumer используется WebJob для хранения исторических данных, а пользовательская группа потребителей, названная как группа потребителей 1, используется приложением MVC 5.
  6. Приложение MVC 5 использует SignalR для передачи данных подключенному пользователю для обновления панели мониторинга.
  7. Для демонстрационной цели этот сценарий, похоже, работает нормально, где у нас есть 5 или 10 одновременных соединений с облачным webapp.

Ниже приводится архитектура схема установки

IoT solution Architecture diagram

Проблема

Теперь для реальных сценариев может быть много одновременных пользователей в облако приложения и есть тот момент, когда облако приходит в игру, и он может горизонтально масштабировать веб-приложение во многих случаях, он может создать проблему при прямом чтении событий из Event Hub в этом случае, и не все экземпляры веб-приложений будут получать все события Какая ошибка, и я думаю, что это причина в MS Azure remote monitoring Architecture diagram, что webapp не читает сообщения непосредственно из Event Hub.

Вопрос

Что может быть лучшим/изменения qucik к описанной выше архитектуре для решения этой проблемы и до сих пор показывают в реальном времени события для клиентов?

+1

@CSharpRocks lol, вы только что предоставили ссылку, которую он уже включил. –

+0

В чем проблема при использовании [Логической архитектуры] (https://docs.microsoft.com/en-us/azure/iot-suite/iot-suite-remote-monitoring-sample-walkthrough#logical-architecture), что с Azure Хранение (Blob) в нем? –

+0

@ RitaHan-MSFT Единственный вопрос, на мой взгляд, я могу достичь события реального времени, проходящего в веб-графический интерфейс? так как в настоящее время все обрабатывается Event Hub, и всякий раз, когда появляется новое событие, оно напрямую передается в графический интерфейс. В «Логической архитектуре» он хранится в Blob, а не напрямую передается в GUI. Мне нужно обновить графический интерфейс, как только появится новое событие. –

ответ

1

Чтение данных о событиях непосредственно из концентратора событий ограничено этими quotas and limits.

Максимальное количество разделов на концентратор событий равно 32.

Обратите внимание, что один раздел в группе потребителей не может иметь более 5 одновременных читателей, связанных в любое время.

Так, например, если у вас есть один концентратор событий, поддерживаются 32 * 5 одновременных считывателей.

Если у вас есть еще несколько одновременных пользователей (> 32 * 5), вам нужно увеличить количество концентраторов событий.

Это может создать проблему при прямом чтении событий из Event Hub , и в этом случае не все экземпляры веб-приложений получат все события ...

Там некоторые возможные причины:

  1. Если один или несколько читателей отключить из-за Epoch настройки.
  2. If you don't specify a partition key when publishing an event, a round robin assignment is used. Тогда получение из указанного раздела приведет к потере данных событий других разделов.

Я тестирую сценарий, что пять одновременных считывателей получают событие из одного раздела. Нет потерь событий.

Надеюсь, это полезно для вас. Если есть какие-либо проблемы, пожалуйста, сообщите мне.

+0

Спасибо за объяснение. Я не указываю ключ раздела. потому что Event-концентратор задан как результат задания Stream Analytics. и я думаю, что события распределены между разделами в стиле RR. Для чтения я использую 'EventProcessorHost'. Кроме того, веб-приложение может иметь 20 параллельных экземпляров (Scale-up), и каждый из них будет иметь свой собственный EventProcessorHost, поэтому в этом случае некоторые экземпляры веб-приложений могут пропускать сообщения ?, потому что EventProcessorHost будет сохранять свои смещения глобально в облачном хранилище. Могу ли я заставить его работать с EventProcessorHost? –