Traqueur de camions : Un modèle IoT utilisant OpenShift et d'autres services IBM Cloud

Combiner les services IBM Cloud pour produire une variété d'informations

Truck Tracker est un service qui reçoit des données d'une flotte de camions qui se déplacent à travers le pays. Il peut s'agir de n'importe quelle donnée (par exemple, la consommation de carburant, les informations sur le conducteur, la température ambiante ou toute autre donnée pouvant être mesurée pendant que vous roulez). Pour les besoins de cet article, il s'agira de l'identifiant du camion et de sa position (coordonnées lat/long). Truck Tracker stocke les données dans différentes bases de données et vous indique également la position actuelle des camions sur une carte.

Certains utilisateurs d'applications ont besoin de ces données pour effectuer des analyses. Par exemple, pour connaître le nombre de kilomètres parcourus par la flotte au cours des dernières 24 heures ou la quantité de carburant consommée. Pour cela, tous les points de données peuvent être stockés dans un magasin de documents fiable comme IBM Cloudant, ainsi que recherchés et agrégés à volonté. IBM Cloudant est une base de données distribuée entièrement gérée, optimisée pour les charges de travail lourdes et les applications web et mobiles à croissance rapide.

D'autres utilisateurs pourraient avoir besoin de savoir où se trouvent actuellement les camions. Pour cela, il suffit de connaître la dernière position connue de chaque camion. Dans ce cas, Redis est une solution parfaite - un magasin clé-valeur rapide où la clé est l'identifiant unique du camion et la valeur est sa dernière position connue.

IBM Cloud® Databases for Redis est un magasin de structures de données en mémoire entièrement géré qui peut être utilisé comme base de données, cache et courtier de messages.

Les données peuvent être utilisées à d'autres fins, encore inconnues, qui nécessitent d'y accéder ou de les stocker de différentes manières.

Vos camions sillonnent le pays et les données en sortent en masse. Comment s'assurer que tout le monde obtient les données dont il a besoin ? C'est là qu'intervient IBM Event Streams, une plateforme de flux d'événements qui vous aide à créer des applications intelligentes capables de réagir aux événements dès qu'ils se produisent. Il s'agit d'un service entièrement géré qui repose sur le logiciel libre Apache Kafka.

Les Event Streams peuvent recevoir les données des camions (producteurs de données) et les transmettre aux diverses applications qui les utiliseront (consommateurs de données).

Enfin, vous devrez exécuter votre service Truck Tracker quelque part, et pour cela nous utiliserons Red Hat OpenShift on IBM Cloud, un moyen rapide et sécurisé de conteneuriser et de déployer des charges de travail d'entreprise dans des clusters Kubernetes. Nous allons provisionner un cluster Red Hat OpenShift on IBM Cloud, y déployer nos applications et les mettre à disposition des services de base de données qui ont besoin d'y accéder. Nous allons également créer une application publique permettant de visualiser les positions des camions sur une carte. En savoir plus sur Red Hat OpenShift on IBM Cloud

Ce que vous allez construire

Il s'agit du système de haut niveau que nous allons construire :

La solution Truck
solution Truck

Dans un scénario réel, vos générateurs de données (les appareils IoT du camion) devraient trouver un moyen de communiquer avec l'application Event Streams, probablement à l'aide du protocole MQTT. Nous simulerons nos camions voyageant à travers le pays et envoyant des données en utilisant un script producer.js) qui générera une localisation de camion toutes les secondes en lisant un ensemble prédéfini de paires lat/long d'un couple de "road trips"LAToDallas.json et boulderToNYC.json et en l'introduisant dans les Event Streams

Ce tutoriel devrait vous prendre environ une heure. Cette formation ne sera pas gratuite, car certains des services IBM que nous utiliserons n'ont pas de volet gratuit, mais si vous déprovisionnez les services après l'avoir terminée, vous ne devriez pas avoir à payer plus de quelques dollars.

Ce dont vous avez besoin

Avant de commencer, il est conseillé d'installer quelques outils de productivité indispensables :

  • Un compte IBM Cloud pay-as-you-go (assurez-vous que vous êtes connecté à votre compte)
  • IBM CLI- l'interface de ligne de commande pour interagir avec l'API IBM. Vous devez vous assurer qu'il dispose des plug-ins suivants :
    • openshift (oc)
    • registre des conteneurs (cr)
  • Assurez-vous d'avoir accès à un terminal Mac ou Linux.
  • La CLI de Kubernetes- une interface de ligne de commande pour exécuter des commandes sur les clusters Kubernetes.
  • Terraform - Automatise la mise à disposition de vos ressources.
  • Docker Nous utiliserons Docker pour créer les images qui exécuteront votre code dans votre cluster - assurez-vous d'être connecté à votre compte Docker
  • jq - Processeur JSON de ligne de commande léger et flexible
  • Git- un système de contrôle de version distribué, libre et open source
  • Node.js et npm

Instructions étape par étape

Étape 1 : Obtenez une clé d'API pour déployer l'infrastructure sur votre compte

Suivez les étapes de ce document pour créer une clé API et notez-la pour l'étape 2.

Etape 2 : Cloner le repo et se rendre dans le répertoire Terraform

git clone https://github.com/IBM-Cloud/truck-tracker.git
cd truck-tracker/terraform

Créez un document appelé terraform.tfvars avec les zones suivantes :

ibmcloud_api_key = "<YOUR_API_KEY_FROM_STEP_1>"
region = "eu-gb"
redis_password  = "<MAKE_UP_A_PASSWORD>"

Le document terraform.tfvars contient des variables que vous souhaitez garder secrètes afin qu'elles soient ignorées par le dépôt GitHub.

Étape 3 : Créer l'infrastructure

TL;DR - exécuter le script Terraform :

terraform init
terraform apply --auto-approve

Le dossier Terraform contient un certain nombre de scripts simples :

  • main.tf Indique à Terraform d'utiliser IBM Cloud.
  • variables.tf contains the variable definitions whose values will be populated from terraform.tfvars.
  • cloudant.tf creates a standard Cloudant DB and some credentials that we will use later to access it.
  • redis.tf creates the Redis instance and some credentials that we will use later to access it.
  • eventstreams.tf creates the Event Streams instance and some credentials that we will use later to access it.
  • registry.tf creates the Container Registry that will hold your container images.
  • iam.tf creates the access key that is needed to interact with the Container Registry.
  • vpc.tf creates the VPC (Virtual Private Cloud) infrastructure that will be needed to deploy an OpenShift cluster. Cela inclut un VPC, des sous-réseaux et des passerelles publiques dans trois zones de disponibilité différentes.
  • cos.tf create a single Cloud Object Storage instance that is needed by OpenShift to manage the cluster.
  • openshift.tf creates a cluster of virtual machines inside your VPC, where you will deploy your applications.

Il faudra plusieurs minutes pour que les bases de données et les autres ressources soient prêtes, mais vous devriez maintenant avoir des ressources VPC, un cluster de machines virtuelles, une instance IBM Cloud® Databases for Redis, une base de données Cloudant et une instance Event Streams dans votre compte, ainsi qu'un espace de noms Container Registry pour vos images de conteneurs. Vous pouvez vérifier en visitant la section Ressources de votre compte IBM Cloud

Étape 4 : Créer des images de conteneurs et les déployer sur OpenShift

À ce stade, toute votre infrastructure est prête à recevoir des données. Nous devons maintenant construire et déployer les différents modules qui produiront et consommeront les données, ainsi que l'application qui affichera la position du camion sur une carte.

Exécutez le script de construction - mais avant cela, êtes-vous connecté à IBM Cloud CLI et à Docker?

Allez à la racine du projet et tapez ce qui suit :

./build.sh

Étape 5 : Surveillez vos camions

La fin du script produira une URL - quelque chose comme https:// some.thing.eu-gb.appdomain.cloud

Si vous visitez l'URL qui a été généré, vous devriez voir une carte des États-Unis et, après quelques secondes, plusieurs marqueurs sur la carte qui représentent vos camions :

Le Truck Tracker Vue large*Vue " caption-side="bottom"} tous{: caption="camions*

Si vous faites un zoom sur l'un de ces marqueurs, vous le verrez se déplacer le long de la route. En tant que gestionnaire de flotte, vous savez désormais où se trouvent tous vos camions.

caption-side=bottom"
Le Truck Tracker Vue en zoom*Vue d'un

Ce que vous venez de faire

Le script build.sh

Le script build.sh a plusieurs fonctions :

  1. Il construit une image docker pour chacun des services dont vous avez besoin. Le producteur, les consommateurs et l'application web se trouvent tous dans des dossiers différents. Chaque dossier possède son propre fichier Dockerfile simple qui est utilisé par le script pour créer une image de conteneur, qui est ensuite téléchargée dans le IBM Container Registry.
  2. Il crée un ensemble de secrets kubernetes avec tous les identifiants qui seront nécessaires pour accéder aux différents services IBMIBM Cloudant, Redis et Event Streams
  3. Il déploie le code de l'application (et les secrets) sur le cluster Red Hat OpenShift on IBM Cloud en utilisant les instructions contenues dans le deployment.yml script.

Le script deployment.yml

Ce script indique à Openshift ce qu'il faut déployer sur les machines du cluster Openshift. Dans notre cas, il s'agit de :

  1. Producteurs de données trucktrackerproducer*).
  2. Consommateurs de données trucktrackerredisconsumer et trucktrackercloudantconsumer
  3. Application web trucktrackerweb)

Dans tous les cas, ils tirent une image du registre des conteneurs et reçoivent quelques variables d'environnement avec les informations d'identification dont ils ont besoin pour accéder à des services externes.

Le système Truck Tracker

Le système Truck Tracker est un ensemble de scripts Node.js simples qui utilisent quatre paquets principaux :

  1. @ibm-cloud/cloudant pour se connecter à IBM Cloudant et lire/écrire des données.
  2. Redis pour se connecter à l'instance Redis et lire/écrire des données.
  3. kafkajs pour se connecter à l'instance Event Streams.
  4. Express pour activer un simple serveur web qui permet d'interagir avec les données.

Il existe cinq fichiers principaux :

  1. server.js: This runs the web server and communicates with Redis. Il reçoit régulièrement des appels du front-end vers la route /data. Il se connecte à Redis, télécharge un objet avec l'ID et la position de chaque camion et le renvoie au front-end.
  2. index.html: This is the one and only page of the front end application. Lorsqu'il se charge, il affiche une carte des États-Unis provenant de l'impressionnant service Open Street Map. Ensuite, il effectue une boucle de cinq secondes au cours de laquelle il envoie une requête HTTP au backend server.js), récupère tous les camions et leurs positions et les parcourt en boucle pour indiquer leur dernière position sur la carte. Chaque camion dispose d'un marqueur cartographique dont les coordonnées sont mises à jour à chaque cycle.
  3. producer.js: This takes in a location file and a truck_id from the script invocation and then loops through all the data points in the location file. Chaque point de données est transformé en un message contenant l'identifiant du camion et les coordonnées lat/long et publié une fois par seconde dans les Event Streams Pour plus de fun, il choisit un point de départ aléatoire le long de l'itinéraire, fait demi-tour et revient lorsqu'il atteint la fin du fichier de localisation.
  4. cloudantConsumer.js: This script creates a trucktracker database in Cloudant if it does not already exist and then polls Event Streams at regular intervals for more data. Lorsque les données arrivent, elles sont écrites en masse dans Cloudant.
  5. redisConsumer.js: This script polls Event Streams at regular intervals for data. Lorsque les données arrivent, elles sont écrites dans un "hash" Redis où la clé de hash est l'ID du camion et la valeur est la donnée du camion (lat/long). Cet arrangement de hachage permet au script server.js d'extraire toutes les données du camion en une seule fois. L'avantage est que si, pour une raison quelconque, l'un de vos consommateurs tombe en panne, il reprendra là où il s'est arrêté sans perdre de données, car Event Streams connaît le dernier point de données qu'il a servi à chaque consommateur. Découpler ainsi les systèmes producteurs de données des systèmes consommateurs de données est une bonne pratique de conception qui accroît la résilience et la tolérance aux pannes.

Summary

Dans ce tutoriel, nous avons combiné un certain nombre de services IBM pour modéliser un modèle IoT réaliste dans lequel des appareils connectés à Internet sur des camions produisent des données qui sont consommées par diverses applications à des fins différentes.

En raison de la nature gérée de tous ces services, en tant que développeur d'applications, vous pouvez vous concentrer sur la résolution de vos problèmes commerciaux et nous laisser faire le gros du travail de gestion de l'infrastructure pour vous, économisant ainsi des mois de travail sur des activités non essentielles telles que l'approvisionnement en serveurs, le déploiement de logiciels, les correctifs, la sécurité et d'autres encore.

Si vous avez suivi ce tutoriel, n'oubliez pas de déprovisionner votre infrastructure pour ne plus avoir à payer de frais. Sur votre terminal, procédez comme suit :

cd terraform/
terraform destroy

Si vous souhaitez passer à l'étape suivante de votre parcours de développeur, consultez nos offres d'essai.