Shadow
Shadow
AGAP2 IT PARIS – HD-7405940
Blog > 01 juillet 2024 - TECH

Efficacité, sécurité, simplicité : l’alliance Node.js/Docker/Kubernetes

Shadow

Cas pratique

Concevoir des systèmes de monitoring facilement déployables, sécurisés et simples d’usage : tel est l’un des enjeux de l’industrie 4.0. Pour notre premier cas pratique, nous proposons l’association de trois technologies, Node.js côté langage, Docker pour la conteneurisation, et Kubernetes pour le déploiement, afin de développer une application adaptée. Avantages et exemples à suivre.

 

Node.js : un langage aux multiples applications

Dans les systèmes industriels connectés actuels, Node.js jouit d’un statut d’outsider. Ce framework JavaScript avancé s’utilise en effet habituellement pour la création de serveurs web, dans les services de transactions en ligne, pour des microservices dans la finance… On sait par exemple que Netflix ou PayPal ont largement contribué à la popularité de Node.js dans ces domaines. 

Mais certains avantages qui font le succès de Node.js dans le tertiaire commencent à pouvoir se déployer aussi dans le secteur secondaire. Cela tient en particulier à ses grands principes « architecturaux ». En premier lieu, le modèle asynchrone et le concept d’événement offrent une souplesse d’exécution et une gestion optimisée, en temps réel, des connexions simultanées. Pour le monitoring dans un contexte de fabrication, cela rend son usage plus simple que d’autres architectures (en particulier celles basées sur SCADA avec des environnements spécifiques). La scalabilité de Node.js, son écosystème open source, son immense champ d’application (depuis un serveur web jusqu’aux firmwares de puces embarquées sur les capteurs IoT, en backend et en frontend), en font un candidat sérieux pour être maintenant déployé sur des lignes de production connectées.

Docker : un conteneur qui se maintient à flot

Que l’on souhaite augmenter le nombre de processus utilisant Node.js, le déployer sur une plus grande échelle (par exemple en ajoutant une deuxième ligne de production à une solution de monitoring intégrée), voire ajouter davantage de capteurs au fur et à mesure du temps, il convient d’utiliser la puissance d’un outil de conteneurisation comme Docker. Cette plateforme bien connue aujourd’hui offre une garantie de stabilité dans des environnements variés, et fluidifie la scalabilité et les mises à jour d’applis déployées sur des systèmes complexes. De plus, par rapport aux machines virtuelles, la conteneurisation offre une baisse de coût énergétique grâce à une sollicitation moins forte du hardware.

Kubernetes : une belle bande de pods

Pour ordonner entre eux les conteneurs, et pouvoir bénéficier d’une scalabilité et de mises à jour sécurisées, il est habituel de combiner Docker et Kubernetes. Facile d’utilisation, cette plateforme garantit l’automatisation du déploiement des conteneurs, veille à l’équilibrage entre les différents conteneurs pour éviter les charges trop brusques sur le réseau et permet de surveiller et de redémarrer sans dommage un grand nombre de conteneurs Docker. C’est pourquoi Kubernetes peut être vu comme une couche supérieure de Docker, les clusters de Kubernetes orchestrant les conteneurs eux-mêmes (par le biais de pods). Le déploiement de Kubernetes modifie profondément l’architecture d’un système informatique dans l’industrie, avec la mise en place de clusters pour chaque étape de production.

Cas pratique : implantation d’un système Node.js conteneurisé sur plusieurs lignes de production

Mesurer les vibrations d’une machine, les températures d’un four industriel, connaître précisément l’hygrométrie ou la teinte d’un papier en cours de fabrication… les capteurs et le monitoring jouent évidemment un rôle crucial dans les industries modernes. Alors que se développent la maintenance prédictive et les outils d’automatisation de la prise de décision, il n’a jamais été aussi important d’élaborer des systèmes résilients pour exploiter en temps réel les données de toute une ligne de production, voire de plusieurs machines, et en optimiser l’utilisation.

Dans ce cas pratique, nous nous proposons d’établir un ensemble de technologies éprouvées dans le domaine du Web à un domaine bien particulier : l’industrie manufacturière. L’idée de départ ? Réaliser une application Node.js disponible pour tous les salariés affectés à une même machine, où sont centralisées en temps réel les données de capteurs répartis sur l’ensemble d’une ligne de production.

Du capteur au backend

Pour cela, l’équipe de développement doit d’abord collecter l’ensemble des données de chaque capteur. L’utilisation de Node.js permet notamment d’élaborer une plateforme utilisant les protocoles de l’Internet des Objets pour centraliser dans une même plateforme software les températures qui seraient transmises via Modbus, des vibrations enregistrées par le protocole OPC UA, etc. L’intérêt de Node.js dans ce cadre demeure la large disponibilité de bibliothèque compatible avec les différents formats de données et de communications (en l’espèce modbus-serial et node-opcua), et leur uniformisation en JSON. Et ce sans risque de blocage dû aux nombreuses connexions en temps réel.

Utilisation de Docker

Pour déployer la collecte de données, il sera important d’installer l’appli Node.js et ses bibliothèques dans un Dockerfile, qui sera mis en place sur chaque poste gérant des capteurs. Cela conditionne à la fois la phase de tests, puis l’orchestration à grande échelle de l’application. Un autre Docker, différent, pourra servir à l’exécution de la conversion de données puis à la réalisation d’une API. C’est à partir de cette dernière que l’application de monitoring à destination des salariés pourra être codée et exécutée sur un autre Docker. 

Utilisation de Kubernetes

Ces quatre Dockerfile créés (Collecte de data, Traitement, API, Frontend utilisateur) peuvent ensuite être orchestrés en créant des services Kubernetes correspondants. De cette façon, le cluster Kubernetes gérera en temps réel l’arrivée de multiples données, et offrira un équilibrage pour ne pas saturer l’application, via un service comme LoadBalancer, conçu pour gérer les instances en fonction du nombre de capteurs. 

Cette architecture Kubernetes dispose donc d’un contrôle automatisé de sa scalabilité : à travers différentes fonctions, elle peut ensuite être répliquée sur une autre ligne de production, avec d’autres capteurs intégrés. Ce qui peut être utile pour un déploiement progressif sans avoir à changer l’architecture globale. De plus, l’ajout d’un capteur, d’un poste de travail, d’une machine, peut être réalisé assez facilement, par la création de Dockers dont l’exécution sera gérée par le cluster Kubernetes, et sa mise à jour faite automatiquement, sans arrêter le service de monitoring en parallèle.

Conclusion

Le choix d’une pile technologique Node.js/Docker/Kubernetes dans l’industrie peut être une application très pratique des possibilités offertes aujourd’hui par différents modules open source bien connus dans le monde des services web. C’est pourquoi l’acculturation au langage Node.js, aux applications multiples, à la logique de conteneurisation Docker et d’orchestration Kubernetes s’avère une très bonne approche pour les ingénieurs/développeurs s’orientant vers la mise en place d’applis puissantes et efficaces.