Что же такое IoT?
Идея Internet of Things — во взаимодействии вещей с сервером и между собой, где участие человека сводится к минимуму. Например, счетчики электроэнергии, отсылающие показания в управляющую компанию; GPS-трекеры, отслеживающие движение такси; разнообразные фитнес-браслеты — это все интернет вещей.
Классическая архитектура интернета вещей включает в себя:
- IoT-устройства. Они собирают показания с датчиков и выполняют физические действия. Могут быть персональными, носимыми и встроенными.
- Шлюзы, которые получают информацию от устройств и передают им команды выполнения действий. Как правило, представлены аппаратным маршрутизатором или программным обеспечением; используют разные протоколы.
- Сервер, где хранятся, обрабатываются и анализируются показания датчиков. Может быть реализован на базе виртуального сервера, реальной машины или через облако.
- Клиентская часть, реализуется через мобильное или веб-приложение. Обеспечивает доступ к данным устройств и наглядному представлению результатов анализа.
В общем виде схема такого сервиса представлена на рисунке ниже:
Архитектура IoT на практике
Современные IoT-решения строятся на базе протоколов передачи данных (например, MQTT, AMQP, HTTP, CoAP и другие) и обеспечивают взаимодействие конечных устройств с облачными сервисами (например, Azure IoT Suite, Amazon Web Services IoT).
Как и большинство компаний, создающих программное обеспечение на заказ, мы работаем с IoT-устройствами заказчика. В Программные технологии не программируют их, наша задача — создать экосистемы сбора и анализа информации с уже готовых датчиков, а также разработать конечные пользовательские приложения. Поэтому прежде всего нас интересуют:
- протоколы передачи данных,
- средства сбора и анализа данных,
- серверная часть,
- визуализация информации на стороне клиента.
Первое, что мы делаем — оценка проекта. При этом важно понимать не только требования заказчика к пользовательской части, но и то, как будет реализован backend (серверная часть).
Какие решения предложить заказчику? Проанализируем популярные тенденции в сфере IoT.
Протоколы передачи данных
На сегодняшний день существует несколько протоколов прикладного уровня (Application layer) используемых при создании IoT-сервисов:
- CoAP,
- DTLS,
- Eddystone,
- HTTP,
- iBeacon,
- MQTT,
- PJON,
- STOMP,
- Websocket,
- XMPP.
Несмотря на их разнообразие на практике разработчики чаще применяют протоколы MQTT и HTTP. Кроме того, их поддерживают основные провайдеры облачных сервисов в своих решениях (Amazon, Microsoft, IBM, Google).***
Статистика использования протоколов подтверждается исследованием IoT Developer Survey 2018, проведенным Eclipse IoT Working Group (подразделение Eclipse Foundation) совместно с AGILE IoT, IEEE и Open Mobile Alliance.****
Из графиков видно, что последние три года MQTT и HTTP удерживают абсолютное лидерство среди всех протоколов, опережая ближайших конкурентов более чем в два раза.
В прошлом году сформировался новый тренд на применение протокола Websockets. Протокол был включен в веб-стандарт, и все самые популярные браузеры внедрили его в свое ядро. Websockets используется для непрерывной передачи данных между устройствами или между веб-страницами и серверами.
Тем не менее, самый оптимальный протокол для общения с IoT-устройствами — MQTT. Он разработан специально для этого направления, минимален по количеству передаваемых данных (в отличии от AMQP и HTTP), и не требует постоянного и стабильного соединения с интернетом (как HTTP и Websocket).
Разработчику также имеет смысл обратить внимание на протоколы iBeacon и Eddystone. Их можно использовать для определения местоположения пользователя (или объекта) внутри помещения. Протоколы поддерживаются в устройствах на базе iOS и Android.
Остальные протоколы сегодня менее популярны.
В IoT-проектах компании Программные технологии мы чаще всего применяем MQTT. Он прост в использовании, способен работать в условиях постоянной потери связи, легко встраивается в любую систему и не нагружает канал связи. В итоге проекты с MQTT снижают конечную стоимость решения и позволяют сэкономить заказчику как на процессе разработки, так и на дальнейшей эксплуатации системы.
Выбираем IoT-платформу
Из исследования IoT Developer Survey 2018 можно сделать еще несколько интересных выводов. Например, среди различных облачных сервисов IoT, Amazon Web Services (AWS) уверенно удерживает лидирующие позиции (см. рисунок ниже). Вторым по значению сервисом остается Microsoft Azure IoT.
Интересно, что Eclipse Foundation сравнивает с лидерами рынка решения от Kubernetes. По мнению исследователей, в 2018 году среди IoT-систем локального развертывания инфраструктуры и развертывания в облаке Kubernetes занял сразу пятое место, стартовав с нулевой позиции.
Что делает эти сервисы такими популярными?
Amazon Web Services IoT
Платформа AWS IoT Core позволяет подключать устройства ко всем сервисам AWS и другим устройствам, помогая собирать, хранить и анализировать данные даже при отсутствии сети интернет. AWS IoT дает возможность работать со множеством компонентов: от периферийных устройств до облачных систем, расширяя возможности для создания IoT-решений.
- Периферийное программное обеспечение помогает безопасно подключать устройства, собирать данные и действовать на основании полученной информации локально.
- Облачные сервисы позволяют быстро регистрировать и подключать большие и разнообразные по своему составу группы устройств, поддерживать их работоспособность, обеспечивать масштабируемость и безопасность, а также реагировать на события датчиков и приложений IoT. (Источник: https://aws.amazon.com/ru/iot/)
Microsoft Azure IoT
IoT-решение от Microsoft — это набор облачных сервисов. Они интегрированы со средой Azure, организующей двунаправленный обмен данными между устройствами и облаком. Сервис разрешает подключить к облаку практически любые сетевые устройства, идентифицировать их и управлять ими.
Microsoft Azure:
- поддерживает все популярные протоколы,
- предоставляет локальное хранилище и выделенную очередь сообщений для каждого подключенного устройства,
- обеспечивает безопасность за счет шифрования и подписывания передаваемых данных.
(Источник: https://azure.microsoft.com/ru-ru/services/iot-central/)
Google Cloud IoT
Производитель сообщает, что: «Google Cloud IoT — это полностью управляемый сервис, который позволяет просто и безопасно подключаться, управлять данными и загружать их из миллионов, разбросанных по различным регионам устройств. В сочетании с другими сервисами на платформе Google Cloud IoT, Cloud IoT Core предлагает полнофункциональное решение для сбора, обработки, анализа и визуализации данных интернета вещей для поддержки и повышения эффективности работы в режиме реального времени».
(Источник: https://cloud.google.com/iot-core/)
IBM Watson IoT Platform
IBM Watson IoT Platform не входит в тройку лидеров, но также обеспечивает:
- регистрацию устройств,
- подключение,
- контроль,
- оперативную визуализацию,
- хранение данных.
Ее особенность — в возможности быстро приступить к работе над IoT-проектами. Платформа поддерживает несколько языков программирования и множество сервисов, что позволяет запустить, развернуть и управлять приложением через облако буквально за несколько минут, даже если оно написано на уникальном (разработанном вами) языке программирования. Облачное хранилище IBM, а также некоторые сервисы стоят дешевле, чем у AWS и Microsoft Azure.
(Источник: https://developer.ibm.com/answers/questions/427732/difference-between-ibm-cloud-amazon-aws-microsoft/)
Лидеры рынка Microsoft и Amazon уделяют пристальное внимание развитию IoT-сервисов. AWS и Azure удобны и для разработчиков, и для пользователя, поэтому в Программные технологии мы отдаем предпочтение именно им.
Для выбранной платформы определяются совместимые с ней средства сбора и анализа данных.
Часто при решении задач в области интернета вещей используется технологии, аналогичные созданию веб-приложений (языки программирования, СУБД, фреймворки и так далее). Одни из них лучше подходят для быстрого прототипирования и проверки гипотез, другие — для внедрения промышленных решений.
В следующей статье мы рассмотрим, какие технологии полезны при работе с IoT-системами и на что стоит обратить внимание при проектировании серверной части.
Ссылки на источники:
* Gartner опубликовал исследование ТОП-10 стратегических трендов в ИТ на 2019 год: https://www.gartner.com/doc/3891569
** По оценкам IDC (международная исследовательская компания International Data Corporation), к 2025 году 25% собираемых данных будут обрабатываться в реальном времени, из них 95% — на базе IoT-решений: https://www.idc.com/
*** Основные провайдеры облачных сервисов поддерживают MQTT и HTTP в своих решениях:
https://docs.aws.amazon.com/en_us/iot/latest/developerguide/protocols.html
https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-protocols
https://www.ibm.com/support/knowledgecenter/en/SSWMAJ_2.0.0/com.ibm.ism.doc/Overview/ov00050.html
https://cloud.google.com/iot/docs/concepts/protocols
**** Eclipse Foundation проводит ежегодный опрос мнений среди разработчиков. В 2018 году в опросе участвовало более 500 специалистов.