Dans un premier article, nous avons vu les avantages d’utiliser les concepts de l’approche Cloud Native pour construire une plateforme IoT. Ce présent article a pour but d’expliquer comment ces concepts peuvent être appliqués à un projet de station agricole connectée.
Station agricole connectée
Démo
Sous le capot
Pour rappel, l’approche Cloud Native se caractérise par l’utilisation de microservices, de conteneurs, de livraisons en continu grâce à des pipelines CI/CD, de la couverture de code par des tests unitaires et de validation de bout en bout, et d’infrastructures exprimées sous forme de code.
Microservices
Conteneurs & Kubernetes
Tous les composants de chaque microservice sont déployés dans des conteneurs au sein d’un cluster orchestré par Kubernetes. Un article a été rédigé pour ceux qui voudraient s’initier aux fondamentaux de Kubernetes en 5 minutes. La figure 3 illustre l’implémentation choisie de l’architecture en microservices présentée dans la figure 2. L’installation de toutes les bases de données s’appuie sur des ressources de type Statefulset de Kubernetes. Pour les applications en Python, elle s’appuie sur une ressource de type Deployment avec la possibilité de se dimensionner en fonction de la charge grâce au mécanisme Horizontal Pod Autoscaler.
- Device Management : les stations utilisent le protocole MQTT pour communiquer avec la plateforme d’où la présence d’un cluster VerneMQ qui joue le rôle du serveur MQTT.
- Data Indexing : une application indexer développée en Python se charge de récupérer les données d’un topic MQTT et de les stocker dans un index Elasticsearch.
- Data Processing : des traitements sur les données sont exécutés en utilisant le framework Apache Spark avec le langage de programmation Scala. Actuellement, un seul traitement est lancé à intervalle de temps régulier, il s’agit de la conversion des données stockées dans Elasticsearch en fichiers au format Parquet stockés dans un stockage orienté objet, Minio (une alternative Open Source de AWS S3).
Il est tout à fait envisageable d’implémenter d’autres traitements comme par exemple des traitements de data science/machine learning.
Fig 3 : Implémentation de l’architecture en microservices
Les communications depuis l’exterieur et au sein de la plateforme sont sécurisées par différents mots de passe et chiffrées grâce à des certificats auto-signés.
De plus, une application en Vue.js également déployée sur Kubernetes a été développée pour visualiser les données accessibles depuis l’API REST. Au niveau du capteur, le code à exécuter se trouve dans une image Docker disponible depuis GCR, le dépôt Docker de GCP.
Déploiement
Aller plus loin
Au travers de cette suite d’articles, nous avons pu voir pourquoi et comment il était possible de construire une plateforme IoT sur Kubernetes avec les concepts de l’approche Cloud Native. La plateforme présentée dans cet article constitue un socle idéal pour bâtir un projet prêt à être mis en production, contrairement à des PoC fait de façon quick and dirty. De plus, la plateforme peut être déployée chez n’importe quel fournisseur de cloud en modifiant seulement quelques lignes de code qui utilise gcloud (la CLI de GCP). Par conséquent, nous ne sommes donc pas enfermés par un fournisseur en particulier (vendor lock-in).
Les prochaines étapes que l’on pourrait envisager pour améliorer cette plateforme sont la mise à l’échelle pour prendre en compte des milliers de capteurs, développer une application web plus performante, intégrer et construire d’autres types de capteurs, et ajouter des nouvelles fonctionnalités comme la notification et le monitoring de la plateforme.