Про те, як застосувати Node.js для серверної частини Інтернету речей. Розбираємося з питаннями безпеки і показуємо пару реальних прикладів інтеграції платформи в IoT.
1. Оцінка стану ринку
У 2019 ринкова виручка IoT досягла 212 мільярдів доларів. У світі налічується близько 26,7 мільярда підключених пристроїв IoT. До 2025 року це число досягне 75,4 мільярда.
За оцінками ООН, на лютий 2020 року чисельність населення становить 7,7 мільярда чоловік. У середньостатистичної людини є близько 3-4 пристроїв IoT. Напевно у вас є хоча б одby з таких пристроїв: смарт-годинник, фітнес-трекер, смарт-ТВ або, може бути, навіть «розумна» машина.
Очікується, що в 2025 році чисельність населення досягне 8,1 мільярда чоловік і на кожну людину припадатиме 9-10 IoT-пристроїв.
Думаємо, ви вже зрозуміли до чого ми хилимо. Напевно ви були б не проти приєднатися до цього ринку і тим більше, щоб ваш IoT-пристрій буd одним з тих дев'яти-десяти, що будуть у кожного.
Статистичні дані отримані від Statista і ООН.
2. Вибір правильного фреймворка
Клієнтська частина IoT-пристроїв представлена самим апаратним забезпеченням. Вона написана на C, C ++ , Lua та інших низькорівневих мовах програмування. Через апаратні обмеженя з цим нічого не поробиш.
Поряд з високою продуктивністю, користувачі IoT-пристроїв віддають пріоритет низької вартості і енергоефективності. Тому додатки для пристроїв слід писати на низькорівневих мовах. Принаймні, поки що.
Але ви ніяк не обмежені у виборі фреймворка і мови програмування для серверної частини IoT-додатків. На наш погляд, Node.js — правильний вибір. І ось чому.
2.1. Швидкість і продуктивність
Так як будь-який IoT-пристрій постійно працює з динамічними даними, потрібен фреймворк, здатний працювати з додатками, що працюють в режимі реального часу і з великими об'ємами даних.
Node.js працює на високоефективному і масштабованому JavaScript движку V8 від Google. Внаслідок цього Node.js є основною платформою для роботи з додатками, що працюють в режимі реального часу і постійно змінюваними даними.
2.2. Node.js легко інтегрується з протоколами IoT
Додатки інтернету речей активно використовують протокол MQTT для обміну повідомленнями між пристроями. Для транспортування і інкапсуляції цей протокол задіє WebSockets. Як MQTT, так і WebSockets добре підтримуються і легко інтегруються з Node.JS.
2.3. Модулі Node.js полегшують розробку IoT
У Node.js є npm (менеджер пакетів, англ. Node Package Manager) з безліччю корисних пакетів для IoT-пристроїв. Існує близько 80 пакетів для Intel IoT Edison, Arduino і Raspberry Pi. Крім того, він містить більше 30 пакетів для різних датчиків, маячків і модулів.
2.4. Ресурсоефективність і масштабованість
Розробники вважають за краще працювати з Node.js, так як він не вимагає великого обсягу ресурсів. Процесор і оперативна пам'ять не перевантажені. Крім того, Node.js має високу масштабованість, що абсолютно необхідно для більшості сучасних компаній.
3. Уникаємо підводних каменів
Вхід в нішу IoT може привести вас до успіху. Перша і найголовніша задача, яку ви повинні вирішити, — безпека.
3.1. Безпечна аутентифікація
Існує безліч інструментів для аутентифікації в Node.js: токени, JWT, Auth0 і т.д. Кожен з них має свої переваги і недоліки. Для початку подивимося на них з точки зору IoT.
Токени ефективні, але не на 100% безпечні. Вони є відмінним способом налаштування аутентифікації, так як дозволяють ідентифікувати конкретного користувача і прийняти рішення про те, надавати чи забороняти йому доступ. Токен може бути зашифрований будь-яким алгоритмом.
Однак, апаратне забезпечення (сканери, датчики, хаби і інші штуки IoT) мають зберігати цей токен або дані логіна в прошивці. Це означає, що зловмисники можуть вкрасти токен, якщо у них є фізичний доступ до апаратних засобів. Те ж саме стосується JWT і Auth0.
З іншого боку, ви можете використовувати будь-які інструменти для аутентифікації на стороні сервера і інтегрувати такий інструмент в платформу Node.js. Є багато npm-пакетів, які дозволяють зробити це вручну: Auth0, Passport і JWT. Є також пакети для інтеграції з хмарними IoT-сервісами: @ azure-iot / authentication , aws-iot-device-sdk і т.д.