Connaissez-vous Temporal ?

Connaissez-vous Temporal ?

Alexandre P. dans Dev - Le 15-02-2024

Lorsque vous intégrez un process business dans un projet applicatif, il est très compliqué de transposer la réalité sur un système informatique. Que ce soit au niveau des données, mais surtout au niveau process. C'est pourquoi je vous présente un outil qui est spécialement conçu pour intégrer des process de l'entreprise.

Avez vous eu à intégrer des process multi étapes en programmation ?

Cela peut être :

  • Une chaîne de vente (vente/paiement, mise à jour des stocks, logistique, livraison, consolidation en compta)
  • Une chaîne d'appro (commande, logistique, stockage, mise à jour des stocks, inventaire)

Tout process qui peut durer dans le temps est difficile à traduire informatiquement, car on a souvent du mal à savoir quand est-ce que les événement vont se produire.

A tel point que, les méthodes mises en place par les sociétés informatiques, consistent souvent à coder plusieurs étapes du process séparément, puis en planifier l’exécution récurrente.

Ainsi il n'est pas rare d'avoir une chaîne de vente qui ressemble à cela :

Process de vente traditionnel ><

⚠️ Si une étape est en erreur, c'est l'intégralité du process qui est remis en question.

Pour une pièce défectueuse à remplacer dans la commande avant expédition, il faudra rajouter une étape de réassort etc... Le simple fait de casser le schéma connu de process peut corrompre son fonctionnement. De même que les rattrapages sont souvent gérés à la main, c'est à dire, hors process.

Gérer la complexité d'un process long est un cauchemar pour tout développeur qui l'a déjà fait. Souvent, à cause du fait que chacune de ces étapes passe par un outil ou une passerelle dédié. Chaque équipe de l'entreprise ayant son mode de fonctionnement, il n'est pas rare d'avoir :

  • Un logiciel de Caise AAAA
  • Un logiciel de gestion de stock BBBB
  • Un prestataire de livraison avec une plateforme CCCC
  • Un logiciel comptable DDDD

Vous voyez où je veux en venir ? Les passerelles sont souvent différentes, et jusqu'à présent, il y a peu d'outils capable d'unifier tout le process, de gérer facilement le prolongement d'une étape dans le temps, un retry de process sans avoir à tout reprendre de 0. J'ai l'air de décrire quelque chose de magique et d'impossible jusque là. Pourtant cet outil existe réellement et il s'appelle Temporal ⚡ !

temporal-logo-dark.svg ><

Pourquoi cette solution est incroyable ?

Temporal est une technologie qui a été créée par le Tech Lead d'Amazon SQS. Et rien qu'avec ça on sait que le bougre en a sous le coude avec les process asynchrones.

SQS pour Simple Queue Service, est un service d'Amazon qui permet à plusieurs briques de code de s'interfacer (via un messaging system) efficacement et à moindre coût. Il s'agit d'un outil taillé pour les architectures micro-service.

Temporal est tout de même différent de SQS, il peut fonctionner de plusieurs façons, même au sein d'un service unique et sera plutôt un orchestrateur de process. Il s'agit d'un moteur de workflow, c'est à dire qu'il va séquencer les étapes les unes après les autres afin de reproduire tout le process de A à Z. Que vous soyez en micro-service ou en monolithique importe peu.

De même, il est très utilisé par des boîtes comme Uber, le géant de la mise en relation du transport pour une raison bien particulière : son extrême résilience vis à vis du long-run.

Le long run c'est quoi ?

Lorsque chacune de vos étapes de process peut tourner pendant période difficilement prévisible, il y a plusieurs façon de procéder :

  • Soit on fait du Cron (une tâche planifiée qui s'exécute automatiquement) et on réessaye régulièrement pour voir s'il y de nouveaux traitements à faire
  • Soit on a un process qui est tourne en tâche de fond et qui prend les jobs aussitôt qu'ils tombent (cela consomme de la ressource en permanence)

Temporal vous propose la seconde option, mais plutôt que ce soit vos systèmes qui passent en position d'attente, c'est le process de Temporal qui va le faire pour votre système, laisse ainsi de la ressource disponible pour continuer à opérer.

Dans l'idée, vous aurez besoin de coder des micro étapes de votre process. Tant que vous pouvez découper, il faut découper :

  • Sélection d'un produit = 1 étape
  • Paiement = 1 étape
  • Mise à jour de stock = 1 étape
  • Préparation de commande = 1 étape
  • Remise au livreur = 1 étape

Dans Temporal, ces étapes s'appellent des activities.

Si l'on peut découper encore plus finement, il faut le faire, et vous allez comprendre pourquoi. Le principe même de Temporal, c'est de venir Wrapper chacune de ces étapes, de manière à être capable de relancer uniquement celle qui s'est arrêté ou a rencontré une erreur.

En quoi est-ce une révolution ?

Au lieu d'avoir des process qui doivent être rejoué de A à Z en cas d'erreur, ici nous sommes dans une situation ou chacune des étapes peut être jouée l'une après l'autre, et lorsqu'une étape s'arrête, elle peut être reprise à tout moment.

A tel point que si vous avez un bug dans le code, cette fonctionnalité vous permet de redéployer entièrement votre projet. Le processus se relancera comme si rien n'avait bougé, et réexécutera uniquement l'activité en erreur.

Pas de gestion de l'invalidation à faire, pas de rollback à prévoir.

Je m'adresse à tout ceux qui ont déjà codé des process longs ☝️, vous savez de quoi je parle, pas vrai ? 😝

Après rien ne vous empêche de faire le flow sur mesure, qui gère le rollbck ou autre.

Cepandant, il y a quelques principes de base à respecter comme toujours utiliser des fonctions déterministes pour vos activities, car ces inputs vont créer un pattern qui permettra de savoir si oui ou non cette étape a déjà été jouée. Il faut qu'une fonction qui soit appelée avec le même input retourne le même résultat.

Les avantages de Temporal

Les avantages de Temporal sont légions :

  • sous Licence MIT
  • Gère la problématique de long run comme s'il s'agissait d'un jeu d'enfant
  • Built-in retry en cas d'erreur d'une étape
  • On ne relance pas un process entier depuis le début
  • Un dashboard détaillé pour suivre le process
  • Déclenchement par le code (client sdk à disposition), CLI ou autre
  • Scalable grâce aux workers
  • Concepts très simples mais très puissant si on a un besoin complexe à gérer

Les inconvénients de Temporal

  • En terme de ressources : Temporal a besoin de déployer un serveur pour orchestrer les jobs et des workers pour jouer les workflows
  • Est plus efficace avec une base de donnée (même si cela reste optionnel) car si non, rien ne sera loggé à chaque fois que l'on relance l'instance server

Conclusion

Je pense qu'il y a largement plus d'avantages que d'inconvénients. Vous pouvez même opter pour un modèle SaaS hébergé par la société qui édite Temporal, si vous décidez de déléguer l'administration d'un serveur.

Qu'attendez-vous pour vous y mettre ? Prochainement je vous parlerai de mes expériences avec Temporal.

#process#workflow#code#temporal

user picture
Alexandre P.

Développeur passionné depuis plus de 20 ans, j'ai une appétence particulière pour les défis techniques et changer de technologie ne me fait pas froid aux yeux.