De nos jours, il existe diverses solutions open source pour réduire la complexité du développement de systèmes distribués et gérer des workflows durables. Ce rapport compare et analyse en profondeur quatre projets open source principaux : Temporal, Restate, Hatchet et Inngest.
Vue d’ensemble et concepts clés #
Temporal #
Temporal est une solution open source de plateforme d’exécution durable qui abstrait la complexité de la construction de systèmes distribués. Il préserve l’état complet de l’application même en cas de défaillance de l’hôte ou du logiciel et facilite la migration de l’exécution vers d’autres machines1. Temporal élimine le besoin d’écrire du code personnalisé pour la gestion des minuteries, le sourcing d’événements, les points de contrôle d’état, les tentatives, et les délais2.
Temporal est utilisé par des milliers d’entreprises, dont Stripe, Netflix, Datadog, HashiCorp, Alaska Airlines et Box, tant pour des charges de travail critiques que pour des charges de travail de base. Il est connu que tous les messages de Twilio, chaque transaction de Coinbase et chaque histoire de Snap utilisent Temporal1.
Restate #
Restate est un moteur d’exécution durable open source conçu pour construire des applications sans serveur avec état. En écrivant du code ressemblant à des services RPC ordinaires, le moteur enregistre l’état d’exécution et, après un crash, il restaure l’état précédent pour reprendre l’exécution à partir du point d’interruption3.
En outre, Restate suspend automatiquement l’exécution dans des situations telles que des temps d’attente longs ou des retards de réponse d’autres services, évitant ainsi le gaspillage de ressources informatiques. Ceci signifie que les services Knative peuvent être mises à l’échelle à zéro pendant ces “temps d’attente”3.
Hatchet #
Hatchet est une file de tâches distribuée et tolérante aux pannes, conçue pour résoudre des problèmes d’évolutivité, tels que la concurrence, l’équité et la limitation de débit4. Il remplace des systèmes de files d’attente ou de pub/sub complexes afin de concevoir des charges de travail durables capables de se remettre d’échecs et de résoudre divers problèmes d’évolutivité5.
Hatchet offre un démarrage à faible latence (temps de démarrage moyen de 25 ms) et un planificateur à haut débit, intégrant des stratégies telles que FIFO, LIFO, Round Robin et Priority Queue pour contourner les problèmes d’évolutivité courants avec un minimum de configuration6.
Inngest #
Inngest est une plateforme de workflow durable open source qui fonctionne sur tous les cloud. Elle permet d’écrire du code pour des étapes de longue durée avec état, qui se réessaye automatiquement en cas d’échec7. Elle abstrait tout ce qui concerne les files d’attente, les événements, et l’état, permettant ainsi de se concentrer sur le code.
Inngest a été fondée en 2021 par Dan Farrelly, ancien CTO de Buffer, et Tony Holdstock-Brown, ancien ingénieur chez Docker, et a reçu un investissement en seed de 3 millions de dollars en 2023, mené par GGV8.
Comparaison des caractéristiques techniques #
Architecture et stack technologique #
Temporal utilise une bibliothèque grpc écrite en Go, fournissant une abstraction de développement qui préserve l’état complet de l’application9. Il utilise un modèle de travail où le client exécute des fonctions de workflow, mais où le travail réel est effectué par un worker9.
Restate expose ses services via un serveur HTTP/2 et peut être utilisé avec Knative pour déployer des applications sans serveur3. Restate est fourni sous forme d’un seul binaire, ce qui simplifie l’exécution et l’exploitation ; il est développé en Rust, offrant une efficacité des ressources et une grande résilience10.
Hatchet prend en charge le regroupement transactionnel basé sur Postgres et l’exécution de style DAG. Il revendique une évolutivité horizontale sur plusieurs régions avec Postgres et une évolutivité verticale à plus de 10k TPS en utilisant des fonctions comme SKIP LOCKED et des fonctionnalités récentes des versions de PG11.
Inngest a conçu et construit un système de mise en file d’attente l’utilisant, prenant en charge le multi-tenancy, le batching et le debouncing, et est en transition vers FoundationDB. Le backend est principalement écrit en Go, utilisant des caches, clickhouse, des flux d’événements et de la coordination7.
Langages supportés #
Les langages de programmation supportés par chaque projet sont les suivants :
- Temporal : bien que non spécifiquement mentionné, Go semble être le langage principal.
- Restate : prend en charge Golang, Java, Kotlin, Typescript, Rust, Python3.
- Hatchet : fournit un SDK open source pour Python, Typescript et Go5.
- Inngest : propose SDK pour Typescript (47%), Go (48%), Java et Python, avec des appels de fonction inter-langue possibles712.
Comparaison des fonctionnalités #
Temporal :
- Préservation de l’état complet de l’application et migration vers d’autres machines1.
- Traitement automatique des minuteries, sourcing d’événements, points de contrôle d’état, tentatives, délais2.
- Élimination du besoin de systèmes de files d’attente, de pub/sub, et de planificateurs1.
Restate :
- Fournit de la durabilité au code à style de service RPC3.
- Restauration de l’état précédent et reprise de l’exécution après un crash3.
- Economie de ressources par suspension automatique de l’exécution en cas de temps d’attente long3.
- Prise en charge de machines à états, traitement d’événements, sagas, et tâches asynchrones13.
Hatchet :
- Planification haute performance avec latence ultra-basse (temps de démarrage moyen de 25 ms)6.
- Stratégies intégrées comme FIFO, LIFO, Round Robin, et Priority Queue4.
- Politiques de réessai personnalisées et traitement d’erreurs intégré4.
- Prise en charge de Cron, de la planification unique, de la protection des pics, et du streaming progressif4.
Inngest :
- Contrôle de flux multi-tenants (concurrence, throttling, debounce, priorisation)14.
- Prise en charge des appels de fonction entre plusieurs langages7.
- Traitement batch, regroupement de nombreux événements en un seul appel de fonction7.
- Tableau de bord amélioré, suivi et indicateurs intégrés7.
- Outils de récupération avancés tels que la répétition de fonctions, la suspension, et l’annulation en masse7.
Cas d’utilisation et domaines d’application #
Temporal #
Temporal est adapté pour des cas d’utilisation tels que l’orchestration de services, le traitement des transactions, la gestion des infrastructures, des travaux asynchrones et la planification de tâches1. Il est particulièrement utilisé par de grandes entreprises telles que Stripe, Netflix, Datadog, HashiCorp, Alaska Airlines, et Box pour des charges de travail critiques1.
Restate #
Restate convient pour des workflows, des applications basées sur des événements, la mise en œuvre de modèles de sagas, et le traitement d’événements avec état3. Lorsqu’il est utilisé avec Knative, il permet de construire des applications sans serveur qui maintiennent l’état même dans des situations de faible disponibilité. Il permet également de construire diverses applications telles que des workflows, des sagas, et du traitement d’événements avec état (en combinaison avec Knative Eventing)3.
Hatchet #
Hatchet est adapté pour des cas d’utilisation tels que l’équité pour l’IA générative (pour éviter que les utilisateurs occupent le système), le traitement batch pour l’indexation de documents et d’images, l’orchestration de workflows dans des systèmes multi-modaux, et la précision dans le traitement basé sur des événements4.
Inngest #
Inngest est adapté pour des cas d’utilisation tels que des workflows pour des agents d’IA, l’équité pour l’IA générative, le traitement batch pour l’indexation de documents, et l’orchestration de workflows pour des systèmes multi-modaux14. De plus, il prend en charge des étapes de fonction liées à l’IA, des index de recherche/RAG et des pipelines de données, ainsi que des intégrations et des webhooks, des flux de paiement et de facturation7.
Analyse des avantages et inconvénients #
Temporal #
Avantages :
- Plateforme fiable prouvée par des milliers d’entreprises1.
- Offre une haute fiabilité grâce à la préservation complète de l’état de l’application1.
- Solution 100 % open source sous licence MIT1.
Inconvénients :
- Selon l’analyse, il peut être difficile d’analyser le fonctionnement en jonglant entre Go, Rust et TypeScript9.
- La structure interne est complexe, rendant l’analyse des informations de transmission/réception de données sur le protocole difficile9.
Restate #
Avantages :
- Proposé en tant que binaire unique, simplifiant l’exécution et l’exploitation10.
- Efficacité des ressources et robustesse élevées (développé en Rust)10.
- Peut être déployé en tant que serveur HTTP sans état/serverless3.
Inconvénients :
- En tant que projet relativement nouveau, son écosystème peut être plus petit que celui de Temporal.
- Stratégie de déploiement pouvant être complexe (déploiement stateful dans un cluster k8s ou utilisation d’un service cloud Restate)3.
Hatchet #
Avantages :
- Basé sur Postgres, réduisant le risque de perte de données (comparé aux solutions basées sur Redis)11.
- Offre une planification à faible latence (temps de démarrage moyen de 25 ms) et une haute capacité de traitement6.
- Intègre des fonctionnalités de visibilité pour les développeurs d’applications11.
Inconvénients :
- Utilise actuellement RabbitMQ pour le pub/sub, nécessitant des dépendances supplémentaires11.
- Envisage d’utiliser NATS pour la connexion entre moteurs et travailleurs, une partie encore en développement11.
Inngest #
Avantages :
- SDK convivial pour les développeurs avec une conception API claire7.
- Fournit un serveur de développement local, facilitant les tests et le débogage14.
- Offre des fonctionnalités de contrôle de flux multi-tenants14.
Inconvénients :
- La licence SSPL peut poser des difficultés pour certaines entreprises15.
- Go (48 %) et TypeScript (47 %) étant les principaux langages, le soutien pour d’autres langages peut être limité12.
Licences et communauté #
Temporal est proposé sous licence MIT et est développé en open source avec une communauté active1. La licence de Restate n’est pas clairement spécifiée dans les résultats de recherche. Hatchet est également proposé sous licence MIT5. Inngest est sous Server Side Public License (SSPL), incluant également une licence Apache 2.0 selon un retard de publication open source (DOSP)7.
Conclusion #
Les quatre projets open source offrent des solutions pour l’exécution durable et la gestion des workflows, mais chacun a une approche et des forces uniques.
Temporal est la solution la plus mature et la plus largement adoptée, adaptée aux charges de travail critiques. Restate se concentre sur la construction d’applications sans serveur avec état, tout en étant très efficace en termes de ressources. Hatchet, en tant que file de tâches basée sur Postgres, réduit le risque de perte de données et fournit une visibilité adaptée aux développeurs. Inngest, centré sur l’expérience développeur, fournit une plateforme de workflow fonctionnant sur tous les clouds, intégrant un contrôle de flux multi-tenant.
Le choix d’un projet peut dépendre de besoins spécifiques, de la stack technologique existante, et des compétences de l’équipe. Cependant, ces quatre solutions partagent un objectif commun : abstraire la complexité des systèmes distribués pour permettre aux développeurs de se concentrer sur la logique métier.
Références #
Ce contenu s’appuie sur des informations publiques concernant Temporal116217189, Restate31310192021, Hatchet452262311, et Inngest87151214242526.
Analyse comparative approfondie des projets open source Restate et Hatchet #
Restate et Hatchet sont toutes deux des solutions open source conçues pour traiter des charges de travail durables dans des systèmes distribués, mais elles adoptent des approches et mettent l’accent sur des domaines différents. Ce rapport commente les concepts clés, l’architecture, les fonctionnalités, les cas d’utilisation, etc., des deux projets afin d’analyser leurs avantages et inconvénients respectifs.
Concepts clés et objectifs #
Approche de Restate #
Restate est un moteur d’exécution durable qui se concentre sur la construction d’applications résilientes avec état. En écrivant du code ressemblant à des services RPC normaux, Restate enregistre l’état d’exécution, permettant de restaurer l’état précédent en cas de défaillance27.
Restate repose sur la philosophie “offrir de la durabilité sans changer la façon d’écrire le code” et permet aux développeurs de rédiger leur code de la même manière que pour les fonctions et services réguliers27. Cela allège considérablement la charge du développement de systèmes distribués complexes.
Approche de Hatchet #
Hatchet, quant à lui, est une file de tâches tolérante aux pannes, conçue pour remplacer des systèmes de files d’attente ou de pub/sub difficiles à gérer, en concevant des charges de travail capables de se remettre d’échecs28. Il est particulièrement conçu pour résoudre des problèmes d’évolutivité tels que la concurrence, l’équité et la limitation de débit28.
Hatchet vise à distribuer des travaux entre plusieurs workers avec une configuration minimale et à assurer une récupération fiable en cas d’échec. Il met également un accent fort sur la visibilité et l’observabilité pour les développeurs29.
Caractéristiques techniques et architecture #
Caractéristiques techniques de Restate #
Restate possède les principales caractéristiques techniques suivantes :
Il expose ses services via un serveur HTTP/2 et est fourni sous forme d’un seul binaire, permettant une exécution et une gestion simples27. Développé en Rust, il est efficace en ressources et très résilient, pouvant fonctionner dans divers environnements tels que FaaS, Kubernetes, serveurs ou conteneurs27.
Restate suspend également automatiquement l’exécution lorsque le temps d’attente est long, optimisant ainsi l’utilisation des ressources informatiques27.
Caractéristiques techniques de Hatchet #
Hatchet présente les principales caractéristiques techniques suivantes :
Il prend en charge le regroupement transactionnel basé sur Postgres et l’exécution de type DAG (graphique acyclique dirigé)28. En utilisant des fonctions telles que SKIP LOCKED et d’autres fonctionnalités récentes des versions PostgreSQL, il prétend pouvoir s’étendre horizontalement sur plusieurs régions et verticalement jusqu’à plus de 10k TPS28.
Il offre une latence ultra-basse (temps de démarrage moyen de 25 ms) et un haut débit de planification, intégrant des stratégies telles que FIFO, LIFO, Round Robin et Priority Queue, permettant ainsi de résoudre des problèmes d’évolutivité généraux avec une configuration minimale29.
Comparaison des fonctionnalités clés #
Fonctionnalités principales de Restate #
Restate propose les fonctionnalités principales suivantes :
Code de workflow : grâce à l’exécution durable, le code s’exécute jusqu’à la fin en toute sécurité, même après une panne27.
Appels d’API et webhooks : elle relie de manière sécurisée le code synchrone et les événements asynchrones, tels que les webhooks27.
Tâches asynchrones : toutes les fonctions appelées via Restate s’exécutent de manière durable et asynchrone27.
Traitement d’événements avec état : elle gère les événements provenant de sources d’événements comme Kafka tout en offrant des tentatives de réessai détaillées et une sémantique de workflow27.
Signaux durables : génère des workflows et des gestionnaires d’événements pour traiter les signaux externes, événements ou entrées utilisateurs de manière fiable27.
Idempotent : ajoute de l’idempotence à tous les RPC ou gestionnaires d’événements27.
Sagas : met en œuvre des transactions de longue durée appelées sagas qui annulent les opérations précédentes en cas d’interruption et de rollback27.
Machine à états : génère une machine à états cohérente et évolutive sans base de données ni transactions27.
Fonctionnalités principales de Hatchet #
Hatchet propose les fonctionnalités principales suivantes :
Observabilité : toutes les exécutions sont complètement recherchables, avec la possibilité de diffuser des journaux et de suivre des mesures telles que la latence, le taux d’erreurs ou des métriques personnalisées29.
Exécution pratique et durable : permet de rejouer des événements et de relancer manuellement l’exécution à un certain stade d’un workflow29.
Cron : configure un calendrier répétitif pour l’exécution de fonctions29.
Planification unique : planifie l’exécution des fonctions pour un moment et une date spécifiques29.
Protection contre les pics : traite en douceur les pics de trafic, exécutant uniquement ce que le système peut gérer29.
Streaming progressif : suit les mises à jour alors que les fonctions s’exécutent sur un worker en arrière-plan29.
Politiques de réessai personnalisées et traitement d’erreurs intégré : permet de se remettre rapidement de pannes temporaires28.
Cas d’utilisation et secteurs d’application #
Cas d’utilisation de Restate #
Restate est particulièrement adapté pour les cas d’utilisation suivants :
Workflows et processus de longue durée : grâce à une exécution durable, elle permet de gérer en toute sécurité des workflows complexes et des processus de longue durée27.
Applications basées sur des événements : elle traite des événements provenant de sources comme Kafka tout en maintenant l’état27.
Mise en œuvre des modèles de saga : elle permet d’implémenter des transactions longues et des modèles de compensation permettant d’annuler les travaux précédents en cas de rollback27.
Machine à états : elle permet de générer des machines à états cohérentes et évolutives même sans base de données ni transactions27.
Cas d’utilisation de Hatchet #
Hatchet est particulièrement adapté pour les cas d’utilisation suivants :
Équité pour l’IA générative : elle répartit équitablement les requêtes afin d’éviter que les utilisateurs surchargent le système28.
Traitement batch pour l’indexation de documents et d’images : elle réalise des traitements batch à grande échelle et peut reprendre le travail à mi-course en cas d’échec28.
Orchestration de workflows pour des systèmes multi-modaux : elle orchestre des entrées et sorties multi-modales et prend en charge l’exécution en style DAG28.
Précision dans le traitement basé sur des événements : répond à des événements externes ou internes au système et rejoue automatiquement les événements28.
Scalabilité et performance #
Scalabilité et performance de Restate #
Restate est proposée comme un binaire unique, simplifiant ainsi son exécution et son exploitation, développée en Rust pour être efficace et résiliente27. De plus, avec la version 1.2, Restate a ajouté des fonctionnalités de haute disponibilité et de déploiement distribué, renforçant ainsi sa scalabilité27.
Elle optimise les ressources informatiques en suspendant automatiquement l’exécution lorsque le temps d’attente est long et peut fonctionner de manière flexible dans divers environnements, tels que FaaS, Kubernetes, serveurs ou conteneurs27.
Scalabilité et performance de Hatchet #
Hatchet offre une latence ultra-basse (temps de démarrage moyen de 25 ms) et un haut débit de planification, garantissant une interaction en temps réel et la stabilité requise pour des tâches critiques29.
Il utilise un système de queues transactionnelles basé sur Postgres et tire parti de SKIP LOCKED ainsi que d’autres fonctionnalités clés des versions récentes de PostgreSQL, prétendant pouvoir s’étendre horizontalement sur plusieurs régions et verticalement à plus de 10k TPS28.
Expérience développeur et environnement de support #
Expérience développeur de Restate #
Restate permet aux développeurs d’écrire du code comme pour des fonctions et services normaux, réduisant ainsi leur préoccupation face à la complexité des systèmes distribués27. À partir de la version 1.2, Restate offre une interface graphique pour le débogage des applications distribuées, et un serveur de développement local pour améliorer l’environnement de développement et de test27.
Expérience développeur de Hatchet #
Hatchet fournit un SDK open source pour Python, Typescript et Go, afin de permettre aux développeurs d’utiliser les bons outils pour le développement28. De plus, il intègre des fonctionnalités d’observabilité pour améliorer l’expérience de développement et de débogage28.
Hatchet permet une recherche complète de toutes les exécutions, facilitant l’identification rapide des problèmes, en diffusant des journaux et en suivant la latence, le taux d’erreurs ou d’autres métriques personnalisées29.
Comparaison globale et critères de sélection #
Restate et Hatchet possèdent chacune des forces uniques et des cas d’utilisation optimisés.
Cas où Restate est adapté #
Lorsque vous avez besoin d’une exécution durable avec un minimum de modifications du code, lors de la mise en œuvre de patterns complexes tels que des sagas ou des machines à états, et lorsque l’efficacité et la résilience des ressources sont essentielles, Restate peut être plus adapté.
Cas où Hatchet est adapté #
Lorsque vous avez besoin d’une file de tâches et d’une distribution équitable des travaux, lorsque l’observabilité et la surveillance sont importantes, lorsque vous recherchez une solution optimisée pour des cas d’utilisation contemporains tels que l’IA générative, et lorsque vous souhaitez un système de queues transactionnelles fiable basé sur Postgres, Hatchet peut être plus adapté.
Conclusion #
Restate et Hatchet sont toutes deux des solutions open source puissantes pour traiter des charges de travail durables dans des systèmes distribués. Restate se concentre sur l’exécution durable et la mise en œuvre de divers patterns de systèmes distribués, tandis que Hatchet se concentre sur les queues de tâches, la distribution équitable des travaux et l’observabilité.
Chaque projet a ses propres forces et cas d’utilisation optimisés, il est donc important de choisir la solution appropriée en tenant compte des exigences du projet, de l’infrastructure existante et de l’expertise de l’équipe de développement. Les deux solutions partagent un objectif commun : abstraire la complexité du développement de systèmes distribués pour permettre aux développeurs de se concentrer sur la logique métier essentielle.
-
https://github.com/temporalio ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
-
https://knative.dev/blog/articles/Building-Stateful-applications-with-Knative-and-Restate/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
-
https://news.ycombinator.com/item?id=41604042 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
-
https://appmaster.io/fr/news/inggestneun-300man-jageum-jiweon-baegendeu-weokeupeulrou-gaebaleul-mogeumhabnida ↩︎ ↩︎
-
https://swcho.github.io/blogs/2023-12-25-temporal-2 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
-
https://news.ycombinator.com/item?id=39643136 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
-
https://www.inngest.com/blog/open-source-event-driven-queue ↩︎
-
https://restate.dev ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
-
https://github.com/hatchet-dev/hatchet ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎