Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Azure IoT как универсальная платформа для корпо...

SECR 2018
October 13, 2018

Azure IoT как универсальная платформа для корпоративных IoT решений. Всё ли так, как выглядит с первого взгляда?

SECR 2018
Андрей Коновалов
Ведущий технический эксперт, Мера НН

Слушатели данного доклада узнают о практическом опыте выбора облачной платформы для подключения специализированных «умных» устройств в одном из проектов для заказчика компании МЕРА. Выбор был сделан в пользу платформы Azure IoT, которая предоставляла оптимальный набор возможностей, но без сложностей при разработке и интеграции не обошлось.

Я расскажу об особенностях архитектуры Azure IoT сервисов и возможностях, которые были использованы в данном проекте. Доклад рассчитан на широкую аудиторию, интересующуюся Облачными IoT решениями.

SECR 2018

October 13, 2018
Tweet

More Decks by SECR 2018

Other Decks in Programming

Transcript

  1. 3 Проект Продукт - Управление видеоконференциями (Skype for Business, Zoom,

    WebEx, GotoMeeting и т.д.) в аквариумах (Huddle rooms) c устройств пользователей Стартап - Быстрее на рынок! - Готовое решение лучше оптимального - Нет времени на «Not invented here» - кооперация и партнерство! Устройство - Windows 10 на мини-PC (например, Intel NUC) - Умное устройство, с сервисами «на борту» - «Предлагает» себя для подключения и выполнения задач пользователя
  2. 4 Проект Приложения для пользователей под все платформы - Windows

    - Android - iOS - Mac OS Облако - Связать всё воедино - Веб приложение для пользователей - Управлять устройствами Роль в проекте - Компания «Мера» отвечала за всё в плане разработки ПО
  3. 6 Интернет вещей: мифы и требования продукта IoT упрощенно: -

    Датчики, метрики, аналитика и дашборды - Умный дом, город, завод - Устройства маленькие, ничего не умеют, невидимые и на батарейках IoT чуть шире: - Взаимодействие - любое устройство может выполнять некоторый набор задач.
  4. 7 Интернет вещей: требования продукта - Управление устройствами - добавить,

    изменить, удалить, подключить, обновить … - Команды на устройства и ответы - достаточно сложный протокол взаимодействия между приложениями и устройством. - Это ключевое отличие от базового понятия IoT - Данные с устройств – метрики, данные - Запросы с устройств – предоставить данные
  5. 8 Концепция для проекта Команды управления Запросы и управление Оповещения

    Приложения: Мобильные и десктоп Мини PC Windows 10 Облачные сервисы
  6. 10 High level IoT architecture – базовые компоненты IoT Hubs

    Services Storages Static Web data DBs/caches Mobile, Desktop Apps Web Apps Analytics Devices + Presentation layer IoT Event Hubs Business Logic
  7. 11 Ключевые компоненты Azure IoT Вещи/Устройства (Devices/Things) - Клиентские SDKs:

    C, .NET, Java, Python, Node, iOS Azure IoT Hub service - Облачный Шлюз для устройств, встроенное безопасное соединение - Протоколы: AMQP, MQTT, HTTP (с ограничениями) - Прием телеметрии, событий - Управление устройствами, реестр устройств, метаданные (Twin) - Расширяемый Шлюз, миллионы устройств - Множественные потребители (consumers), сохранение сообщений для устройств - Маршрутизация сообщений (routes) по предопределенным правилам
  8. 12 Device Twin - Device twins – это JSON документы

    - Хранят состояние устройства (метаданные, конфигурацию и состояние) - IoT Hub поддерживает device twin для каждого устройства - Desired – “желание” Облака, Reported – факт с устройства Link: Device Twins
  9. 13 Потенциальные компоненты Azure IoT Azure Event Hubs - Если

    нужно Big Data streaming - Базовая обработка миллионов событий в секунду - Трансформировать или сохранять данные, используя любые провайдеры и адаптеры Azure Stream Analytics - Обработка потоков событий, запросы, в том числе и на больших объемах. - Источники: любые - Запросы: извлекают информацию, создание и нахождение шаблонов, связей - Действия на основе шаблонов – предупреждения, отчеты, сохранение данных
  10. 14 Плюс то, что всех беспокоит… и зачем managed сервисы

    Безопасность - Просто включить TLS, но сложно убедить даже себя в достаточной безопасности. - Аудит безопасности решения и ответственность Развертывание и обслуживание - Быстрое и удобное - Инструменты DevOps - Осведомленность о состоянии сервисов Высокая доступность и восстановление работоспособности - Защита от отказов ЦоД - Гео-распределенная система - SLA
  11. 17 Требования и Облачные платформы – IoT (2017!) – часть

    1 Область AWS Azure Запрос проекта Device SDKs and connectivity MQTT/WS, HTTP SDKs: C, JS, Java, Python AMQP/WS, HTTP, MQTT, custom SDKs: C, JS, Java, Python, C# Windows 10 IoT Enterprise HTTP/Web socket требуются для сетей с firewall/proxy. Windows 10 – текущая OS устройства. Security Mutual, TLS Mutual, TLS Key or Certificate Требования по безопасности, риски и затраты на разработку собственного решения Cloud connectivity service AWS IoT Device gateway - D2C, C2D IoT Hub/Event Hub D2C, C2D Нужен двунаправленный, быстрый канал коммуникации с Облаком Device registry Registry, keys, shadow of a device Registry, keys storage, twin concept devices registry c мета-данными, состояниями и параметрами требуется, расширяемый. Device Management Basic, Registry based None for Enterprise Device Management IoT basic device/provision API IoT and MDM joined management Win 10 IoT CSP support Multitenant на уровне сервиса, SaaS. On-premise в очень далекой перспективе или не нужно.
  12. 18 Требования и Облачные платформы – IoT (2017!) – часть

    2 Область AWS Azure Запрос проекта Analytics, data flows Rules engine, AWS Analytics Azure Stream Analytics Метрики, аналитика, логгирование Visualization QuickSight Power BI Может потребоваться отдельный дашборд без разработки Веб приложения. Легко менять. Intelligent actions SNS Azure Notification Hub and Machine Learning Оповещения Scalability Gateway scales to billions IoT Hub scales to billions, other services – as well Нужно масштабировать и вверх и вниз, чтобы уменьшить стоимость Взгляд MS на сравнение с AWS https://docs.microsoft.com/en-us/azure/architecture/aws- professional/services Недавнее большое отличие! https://docs.microsoft.com/en-us/windows/iot- core/manage-your-device/AzureIoTDM https://github.com/ms-iot/iot-core-azure-dm-client/
  13. 19 Оценка нагрузки и стоимости IoT Service profile From User

    apps - per session To Cloud - per session From Cloud to Apps - per session To Device per session From Device per session Overall SmartDevice Number of Customers 600 Number of "SmartDevices" per Company 10 Number of "sessions" per "SmartDevice" per Day 10 Number of Users connected to SmartDevice per "Session" 10 Times Entered and Exited SmartDevice per User per Session 1,2 6 72 30 30 60 Action 1 per Session 0,5 5 2,5 2,5 2,5 5 Action 2 per Session 0,75 2 1,5 1,5 1,5 3 Action 3 per Session 0,5 3 1,5 1,5 1,5 3 Action 4 per Session 0,5 3 1,5 1,5 1,5 3 Keep alives 0,1 10 10 10 10 Additional reqs 1 1 10 10 10 Notifications from SmartDevice 25 2,5 2,5 Metrics - additional messaging per Session 0 0 Overall per session 99 25 57 39,5 96,5 Per Device per day 990 250 570 395 965 Per Customer per day 9900 2500 5700 3950 9650 For all companies per day , millions 5,940 1,5 3,42 2,37 5,79 Hub per month 500 $ На входе На выходе
  14. 20 Оценка стоимости (2017) Требуемые компоненты Оценка требований по ресурсам

    Amazon WS Azure SDKs для устройств 250000 Цель: 250 000 devices – финальная, есть и промежуточные – 6000, 25000, … Бесплатный Бесплатный AWS gateway Azure IoT Hub Одно устройство: 1000-5000 сообщений в день $5 за миллион сообщений 500$ в месяц и лимит в 6 миллионов сообщений в день 50$/400К; 300M/5000$ Сервисные сообщения тоже оплачиваются. Внутренние операции (обновления twins данных) тоже оплачиваются 512 bytes messages 4Kb messages Link: AWS IoT Pricing Link: Iot Hub pricing
  15. 22 Системная архитектура в проекте Mac Cloud services in Azure

    3Rd party Clouds Web Hub ID#1 VMs IoT Hub(s) Storage BLOBs SQL DB Metrics Web app Windows Android iOS Azure IoT Device C# SDK On-premise services 3Rd party Clouds IoT service Cloud API REST API WS API Apps Devices
  16. 24 Облачный сервис проекта - основа - Сервис написан на

    Java, работает в PaaS Azure App service (Tomcat/Java8) - Насколько хорошо MS поддерживает Java в Azure? Неплохо, но не на первом месте - Использует Azure IoT service SDK Java - Код SDK в открытом виде https://github.com/Azure/azure-iot-sdk-java
  17. 25 Cloud – подключаемся к IoT Hub-у Управление устройствами Обработка

    сообщений с устройств Реестр устройств Twin устройств - Внутри многих сервисов в Azure лежит паттерн Шины (Service Bus) ServiceBus Link - Service Bus может быть использован как отдельный сервис, бесплатен он только как часть других сервисов deviceMethod = DeviceMethod.createFromConnectionString(dvConnStr); eventClient = EventHubClient.createSync(ecConnStr, ecExecutorService); registryManager = RegistryManager.createFromConnectionString(dvConnStr); deviceTwin = DeviceTwin.createFromConnectionString(dvConnStr); private final String dvConnStr = "HostName=XXX-IOTHub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX"; Использует SAS ключ для подключения к IoT Hub
  18. 26 Создание устройств, получение ключей - Создание устройства, Java service

    - ID устройства сервис генерирует по нашему паттерну public Device addDevice(Hub hub) { String deviceId = getDeviceId(hub); device = Device.createFromId(deviceId, null, null); device = registryManager.addDevice(device); result.setDeviceId(iotDevice.getDeviceId()); result.setStatus(iotDevice.getStatus().getValue()); result.setConnectionState(iotDevice.getConnectionState().getValue()); result.setPrimaryKey(iotDevice.getPrimaryKey());
  19. 27 Cloud – обработка сообщений с устройств Link: Azure Read

    from built-in endpoint Link: Event Hubs Partitions - “Более-менее” стандартный Messaging - Упрощенно: IoT Hub = Event Hub + Device Registry + Twins - Особенности - Partitions - Упорядоченная последовательность событий. - Consumer groups
  20. 29 Подключение устройства к IoT Hub - Устройство используем Azure

    IoT device SDK для .NET Link: Azure IoT SDK .NET - Для подключения нужно: - Device ID - задаем при создании, хранится на устройстве - Device Key – генерируется при создании, передаем и храним на устройстве - URL IoT Hub - Протокол (набор протоколов) private DeviceClient CreateDevice(string _iotHubUri, IAuthenticationMethod _authMethod, IList<TransportType> _transports) device = DeviceClient.Create(_iotHubUri, _authMethod, type); var openTask = Task.Run(() => device.OpenAsync());
  21. 30 Управление устройством https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-direct-methods - Используем концепцию direct method -

    Request-Reply взаимодействие - Есть таймаут - Там где нужно немедленная реакция и действие (например, включить вентилятор) Облачный сервис: result = deviceMethod.invoke(deviceId, methodName, 20L, 0L, payload); Устройство await m_deviceClient.SetMethodHandlerAsync("keepalive", recieveKeepAliveMessage, null); static Task<MethodResponse> recieveKeepAliveMessage(MethodRequest methodRequest, object userContext)
  22. 31 Device Twin в проекте Link: Device Twins - Обновление

    ПО – текущая версия ПО – с устройства, требуемая версия - с Облака, сравнение - Получение токена авторизации на REST API - В момент подключения есть только один канал авторизации - Устройство может посмотреть уже созданный ранее токен
  23. 33 Корпоративные сети - UDP разрешен наружу? – Нет -

    Разрешен любой TCP-based протокол? – Нет, только HTTP/s - Любые порты разрешены для доступа в Интернет? – Нет - Доступ в Интернет без прокси сервера? – Нет - Wi-Fi сеть имеет подключение к LAN? – Нет Решение -> AMQP over Websockets - TCP, HTTP upgrade, 443/8443 - Поддерживает прокси, но… не поддерживает авто-конфигурационный скрипт для прокси! Решение 1: менять библиотеку и сделать поддержку внутри Решение 2: прописать адрес прокси отдельно для библиотеки и выключить явное прокси для всего остального Какой путь мы выбрали? Правильно!
  24. 34 “Друзья! У нас снова 8000!” - Ограничение бесплатного IoT

    Hub – 8000 сообщений в сутки. Как это много – 8К сообщений в день для устройств? А 400К? Зависит от многих факторов. Но многое зависит и от качества протокола и реализации Пример: - Keep alive каждую минуту -> 60*24 = 1440 сообщений - Забыл клиента рядом с устройством -> минус 2К
  25. 35 E2E мониторинг Проблема: Бэк-енд Сервис перестает получать сообщения с

    IoT Hub IoT Hub: - Никаких ошибок, работает видимо корректно, передает сообщения на выход Облачный сервис - Никаких ошибок, работает видимо корректно, что получает – обрабатывает Вместе – не работают. Облачный сервис не получает сообщений. Почему? И до сих пор невыясненные причины.
  26. 36 E2E мониторинг Решение для обнаружения проблемного состояния: «Петля» обработки

    - В ответ на входящее сообщение в облачный сервис отправит гарантированно сообщение назад в IoT сервис - Создается функция, регулярно отсылающая такое сообщение Мониторинг - Создается правило для мониторинга в IoT Hub на регулярное присутствие сообщения с ответом - При наличии проблемы -> пропадает сообщение - > Alert!
  27. 38 В заключение Состояние проекта - Опыт позитивный: система работает,

    заказчик не жалуется на стоимость владения - Четыре развертывания (Dev, QA, Staging, Demo/Production) Что можно улучшить - Множество DevOps инструментов, которые еще не изучались и не применялись - Метрики: - Не используем стандартный путь, нужно добавлять Azure Stream Analytics - Немедленное правильное состояние устройства (подключено или нет) требует доработки
  28. 39 Выводы - Не бояться смотреть шире при выборе инструментов

    для реализации проектов - Azure IoT - зрелое решение со своими потенциальными достоинствами - Azure и Windows дружат - Ценообразование очень быстро меняется
  29. 40 Azure IoT Пожалуйста, вопросы? Андрей Коновалов [email protected] [email protected] Не

    забываем про Azure IoT! Azure IoT Reference Architecture https://aka.ms/iotrefarchitecture Кратко https://docs.microsoft.com/en-us/azure/iot-fundamentals/ Или с удовольствием отвечу чуть позже Или совсем позже ->