Article publié par Adonis Harrouk, Data Engineer chez Keyrus
Avant de débuter votre lecture, je vous conseille de lire cet article si vous n’êtes pas familier avec le concept d’IoT.
En matière d’objets connectés, il est important dans certains domaines (et aussi très intéressant pour avoir un certain confort dans l’analyse) d’avoir des données qui se mettent à jour en temps réel. Imaginez devoir attendre un jour complet avant de consulter vos données se rapportant à l’état de votre agriculture, alors qu’il est possible que vos plantes soient en mauvaise santé et menacent de mourir du jour au lendemain ! Certes cet exemple est un peu extrême, mais le temps réel est un besoin que nous pouvons également retrouver dans des domaines comme le médical, le secteur de l’industrie, la domotique, et j’en passe.
Or, les objets connectés ont d’immenses quantités de données à nous offrir, car, rappelons-le, Gartner prévoit environ 20 milliards d’objets connectés en 2020 (et bien que d’autres sources en prévoient moitié moins, cela reste énorme). Mais ces données-là ne sont pas souvent bien formatées, et nécessitent certaines technologies afin de les extraire correctement pour pouvoir les manipuler. Ainsi, nous allons maintenant nous pencher sur comment récupérer le flux de données provenant d’un objet connecté (grâce une solution entièrement sur Microsoft Azure), afin de pouvoir analyser, manipuler et redistribuer ces données.
Tous les tutoriels concernant cette méthode sont disponibles sur le site de Microsoft.
Nous utilisons ici une carte électronique signée Microsoft et appelée la MxChip IoT Devkit. Cette petite carte, qui très simple d’utilisation, est l’une des meilleures manières de débuter dans le monde de l’IoT. Elle dispose de plusieurs capteurs permettant de récupérer différentes mesures : l’humidité, la température, la pression, la magnétométrie, l’accélération et l’orientation. Vous pouvez retrouver de nombreux exemples de projets sur le site de Microsoft afin de tester les possibilités de la carte. En fonction du firmware que vous choisirez pour votre carte, vous aurez plus ou moins de choses à faire afin de relier par la suite votre carte à l’IoT Hub.
Plus d’informations sur la carte : https://microsoft.github.io/azure-iot-developer-kit/
La solution Azure IoT Hub va nous permettre de nous connecter à notre carte électronique afin de récupérer les différentes données provenant de ses capteurs. Il est ensuite possible d’établir des règles, de choisir comment redistribuer les données, et de gérer l’ingestion des données.
Une autre solution appelée Azure IoT Central, qui est une solution SaaS (contrairement à l’IoT Hub qui est du PaaS), intègre d’autres modules rendant la gestion encore plus facile, tels qu’une plate-forme no-code permettant d’établir des règles/fonctions simples en fonction des paramètres reçus, ainsi qu’un dashboard des données de la carte. Elle connecte très facilement divers objets connectés, à savoir MxChip, Raspberry Pi 3 et Windows 10 IoT Core.
Les données de la MxChip reçues sous la forme de messages télémétriques
Analyse des données détaillées sur Azure IoT Central
Maintenant que nous avons bien récupéré les données de notre carte, on établit le point de terminaison et la route amenant à Databricks afin d’y récupérer les données et les analyser.
Databricks est un moteur d’exécution permettant, entre autres, l’analyse de flux en temps réel grâce au composant spark streaming, qui permet une mise à jour continuelle des données tant qu’un flux de données est en cours. Il est possible d’y effectuer de la visualisation, mais aussi du Machine/Deep Learning, le tout dans des langages tels que le Scala, le Java, le Python et le R.
Affichage du flux de données IoT sur Databricks, en temps réel, les données étant ici structurées en Python
Visualisation des données sur graphique (possibilité de changer les champs affichés)
Maintenant que nous avons transformé notre flux de données afin qu’il soit plus lisible, nous allons le sortir de Databricks pour qu’il puisse être récupéré par tout système et/ou logiciels souhaitant le consommer.
Le flux transformé est distribué en temps réel à Azure Event Hub
Le flux est bien récupéré par Azure Event Hub
Azure Event Hub est une solution similaire à Azure IoT Hub, sauf qu’elle couvre un périmètre plus général. Elle fournit une solution « Warm path », qui permet l’ingestion en pseudo temps réel en effectuant les traitements en mémoire (pas de persistance des données). Enfin, une particularité intéressante de Azure Event Hub est qu’on peut y intégrer Apache Kafka afin d’obtenir le meilleur des deux solutions.
Cette comparaison nous permettra d’observer leurs avantages respectifs, et de comprendre pourquoi il est intéressant de coupler les deux solutions.
Pour résumer les différences entre les deux technologies, il faut noter que Kafka est plus difficile à mettre en place qu’Azure Event Hubs, mais offre un bien plus haut débit de données et aucune limite en termes de taille de message. On peut donc dire que Kafka est plus puissant qu’Azure Event Hub. Néanmoins, ce dernier se démarque par sa simplicité d’utilisation grâce au fait que ce soit une solution PaaS. Aucun code n’est demandé afin de configurer Event Hub, tout se fait sur l’interface et simplement. La puissance d’Event Hub reste assez haute et est capable de couvrir les besoins de beaucoup de projets. Le choix de Kafka sera guidé selon la volonté d’aller vers de l’open source, de s’affranchir de services managés (coût) ou pour des projets impliquant de forts débits.
Cependant, comme nous l’avons vu dans la partie précédente, il est possible de coupler Azure Event Hub et Kafka. Cela est très utile si l’on a une architecture Kafka déjà présente par exemple, et qu’on souhaite la fédérer avec des solutions Azure afin d’interagir en mode cloud et profiter des configurations simplifiées d’Event Hub en termes de sécurité, de limite de débit (throttling), de disponibilités des données, etc.
Conclusion
À partir de ces patterns d’architecture, une multitude de projets pourraient être effectuées dans des cas plus concrets avec des objets connectés. On pourrait par exemple se servir du flux sortant de Databricks et l’envoyer sur Power BI afin d’obtenir des dashboards dont les graphiques se mettent à jour en temps réel, au fur et à mesure que les données arrivent. Il est aussi possible de penser à des projets orientés Machine/Deep Learning sur des objets connectés, comme la reconnaissance vocale ou la maintenance prédictive.