Представлен выпуск EdgeX 2.0, открытой модульной платформы для обеспечения взаимодействия между IoT-устройствами, приложениями и сервисами. Платформа не привязана к оборудованию конкретных поставщиков и операционным системам, и развивается независимой рабочей группой, под эгидой организации Linux Foundation. Компоненты платформы написаны на языке Go и распространяются под лицензией Apache 2.0.
EdgeX позволяет создавать шлюзы, объединяющие имеющиеся IoT-устройства и собирающие данные от различных датчиков. Шлюз занимается как организацией взаимодействия с устройствами, так и выполняет первичную обработку, агрегирование и анализ информации, выступая промежуточным звеном между сетью из IoT-устройств и локальным управляющим центром или облачной инфраструктурой управления. На шлюзах также могут выполняться обработчики, оформленные в виде микросервисов. Взаимодействие с IoT-устройствами может быть организовано по проводной или беспроводной сети с использованием TCP/IP-сетей и специфичных (не-IP) протоколов.
Шлюзы разного назначения могут объединяться в цепочки, например, шлюз первого звена может решать задачи по управлению устройствами (system management) и обеспечению безопасности, а шлюз второго звена (fog-сервер) сохранять поступающие данные, выполнять аналитику и предоставлять сервисы. Система модульная, поэтому деление функциональности на отдельные узлы выполняется в зависимости от нагрузки: в простых случаях достаточно одного шлюза, а для крупных IoT-сетей может быть развёрнут целый кластер.
В качестве основы EdgeX выступает открытый IoT-стек Fuse, который применяется в шлюзах для IoT-устройств Dell Edge Gateway. Платформа может быть установлена на любое оборудование, включая серверы на базе CPU x86 и ARM, работающие под управлением Linux, Windows или macOS. Проект включает в себя подборку готовых микросервисов для анализа данных, обеспечения безопасности, управления и решения различных задач. Для разработки собственных микросервисов могут использоваться языки Java, Javascript, Python, Go и C/C++. Для разработки драйверов для IoT-устройств и датчиков предлагается SDK.
- Реализован новый web-интерфейс, созданный с использованием фреймворка Angular JS. Из достоинств нового GUI называется простота сопровождения и расширения функциональности, наличие мастера подключения новых устройств, средства для визуализации данных, значительно улучшенный интерфейс для управления метаданными, возможности мониторинга состояния сервисов (потребление памяти, нагрузка на CPU и т.п.).
- Полностью переписал API для работы с микросервисами, который теперь не зависит от коммуникационного протокола, более защищён, хорошо структурирован (использует JSON) и лучше отслеживает обрабатываемые сервисом данные.
- Повышена эффективность и предоставлена возможность создания легковесных конфигураций. Компонент Core Data, отвечающий за сохранение данных, теперь не является обязательным (например, его можно исключить когда нужно только обработать данные от датчиков без необходимости сохранять).
- Повышена надёжность и расширены средства для обеспечения качества предоставления сервиса (QoS). При передаче данных с сервисов устройств (Device Services, отвечают за сбор данных с датчиков и устройств) в сервисы обработки и накопления данных (Application Services), теперь можно использовать шину сообщений (Redis Pub/Sub, 0MQ или MQTT), не привязываясь к HTTP-протоколу REST и регулируя приоритеты QoS на уровне message broker. В том числе допускается прямая передача данных из Device Service в Application Service с опициональным дублированием в сервис Core Data. Поддержка передачи данных по протоколу REST сохранена, но не используется по умолчанию.
- Реализован универсальный модуль (secret provider) для извлечения секретных данных (пароли, ключи и т.п.) из защищённых хранилищ, таких как Vault.
- Для ведения реестра сервисов и настроек, а также для управления доступом и аутентификацией задействован инструментарий Consul. В API Gateway предоставлена поддержка обращения к API Consul.
- Минимизировано число процессов и сервисов, которым необходимы права root в контейнерах Docker. Добавлена защита от использования Redis в небезопасном режиме.
- Упрощена настройка API Gateway (Kong).
- Упрощены профили устройств, в которых задаются параметры датчиков и устройств, а также сведения о собираемых данных. Профили могут определяться в форматах YAML и JSON.
- Добавлены новые сервисы устройств:
- CoAP (написан на C) с реализацией протокола Constrained Application Protocol.
- GPIO (написан на Go) для подключения к микроконтроллерам и прочим устройствам, включая платы Raspberry Pi, через порты GPIO (General Pin Input/Output).
- LLRP (написан на Go) с реализацией проткола LLRP (Low Level Reader Protocol) для подключения к ридерам RFID-меток.
- UART (написан на Go) с поддержкой UART (Universal Asynchronous Receiver/Transmitter).
- Расширены возможности сервисов приложений (Application Services), отвечающих за подготовку и экспорт данных для их последующей обработки в облачных системах и приложениях. Добавлена поддержка фильтрации данных с датчиков по имени профиля устройства и типу ресурса. Реализована возможность отправки одним сервисом данных к нескольким получателям и подписки на несколько шин сообщений. Предложен шаблон для быстрого создания собственных сервисов приложений. Добавлен сервис LLRP inventory для сопоставления данных, поступающих от ридеров RFID-меток, с информацией из систем инвентаризации.
- Выбираемые номера портов для микросервисов приведены в соответствие с диапазонами, рекомендуемыми организацией IANA (Internet Assigned Numbers Authority) для приватного использования, что позволит избежать конфликтов с существующими системами.