Ir al contenido

Temporal, Restate, Hatchet, Inngest 오픈소스 프로섹트 비교 분

·3040 palabras·15 mins

Hoy en día, existen diversas soluciones de código abierto para reducir la complejidad en el desarrollo de sistemas distribuidos y gestionar flujos de trabajo duraderos. En este informe, compararemos en profundidad cuatro proyectos de código abierto: Temporal, Restate, Hatchet e Inngest.

Resumen y conceptos clave
#

Temporal
#

Temporal es una solución de código abierto que actúa como una plataforma de Ejecución Durable, abstrayendo la complejidad de construir sistemas distribuidos. Preserva el estado completo de la aplicación incluso ante fallos de hardware o software y permite migrar la ejecución sin problemas a otras máquinas1. Temporal elimina la necesidad de escribir código personalizado para temporizadores, almacenamiento de eventos, puntos de control del estado, reintentos y tiempos de espera, apoyando así la aceleración del desarrollo2.

Es utilizada por miles de empresas en cargas de trabajo críticas y fundamentales, como Stripe, Netflix, Datadog, HashiCorp, Alaska Airlines y Box. Se dice que todos los mensajes de Twilio, todas las transacciones de Coinbase y todas las historias de Snap utilizan Temporal1.

Restate
#

Restate es un proyecto de código abierto que actúa como un motor de Ejecución Durable, enfocado en la construcción de aplicaciones serverless con estado. Al escribir código que parece un servicio RPC típico, el motor guarda el progreso de ejecución y, tras un fallo, restaura el estado anterior para reanudar desde el punto de interrupción3.

Restate también pausa automáticamente la ejecución en situaciones como latencias largas o retrasos en las respuestas de otros servicios, evitando el desperdicio de recursos computacionales. Esto significa que servicios como Knative pueden escalar a cero durante los “tiempos de espera”3.

Hatchet
#

Hatchet es una cola de tareas distribuida y tolerante a fallos, diseñada para abordar problemas de escalabilidad, como concurrencia, equidad y limitación de velocidad4. Permite diseñar cargas de trabajo duraderas que se recuperan de fallas, reemplazando colas heredadas difíciles de gestionar o sistemas pub/sub5.

Ofrece programación de baja latencia (promedio de 25 ms de tiempo de inicio) y alto rendimiento, con estrategias integradas como FIFO, LIFO, Round Robin y Priority Queue que permiten sortear problemas de escalabilidad comunes con una configuración mínima6.

Inngest
#

Inngest es una plataforma de flujos de trabajo durable de código abierto que funciona en cualquier nube. Permite la escritura de funciones de etapas de ejecución a largo plazo que se reintentan automáticamente en caso de fallos7. Abstrae todo lo relacionado con colas, flujos de eventos y estados, permitiéndote concentrarte en el código.

Fue fundado en 2021 por Dan Farrelly, ex CTO de Buffer, y Tony Holdstock-Brown, ex ingeniero de Docker, y recibió 3 millones de dólares en financiación inicial por parte de GGV en 20238.

Comparación de características técnicas
#

Arquitectura y pila tecnológica
#

Temporal utiliza una biblioteca grpc escrita en Go y proporciona una abstracción de desarrollo que preserva el estado completo de la aplicación9. Funciona utilizando un patrón de trabajador, donde el cliente ejecuta funciones de flujo de trabajo que, en realidad, son ejecutadas por los trabajadores9.

Restate expone el servicio a través de un servidor HTTP/2 y se puede usar junto con Knative para desplegar aplicaciones serverless3. Se presenta como un único binario, lo que simplifica su ejecución y operación, y está desarrollado en Rust, lo que lo hace eficiente en recursos y altamente resiliente10.

Hatchet soporta colas de transacciones y ejecución estilo DAG basadas en Postgres. Afirma que puede escalar horizontalmente a través de varias regiones y escalar verticalmente a más de 10k TPS utilizando SKIP LOCKED y las características clave de las últimas versiones de PG, como la replicación activa-activa11.

Inngest ha diseñado y construido un sistema de colas propio que admite multiinquilino, lotes y rebotes, está en transición a FoundationDB, y su backend está escrito en su mayoría en Go, utilizando almacenamiento en caché, clickhouse, flujos de eventos y orquestación7.

Lenguajes soportados
#

Los lenguajes de programación soportados por cada proyecto son:

  • Temporal: Aunque no está explícitamente mencionado en los resultados, Go parece ser el lenguaje principal.
  • Restate: Soporta Golang, Java, Kotlin, Typescript, Rust y Python3.
  • Hatchet: Ofrece SDK de código abierto para Python, Typescript y Go5.
  • Inngest: Proporciona SDK para Typescript (47%), Go (48%), Java y Python, con la posibilidad de llamadas de funciones entre lenguajes712.

Comparación de funcionalidades
#

Temporal:

  • Preservación del estado completo de la aplicación y migración a otras máquinas1.
  • Manejo automático de temporizadores, almacenamiento de eventos, puntos de control del estado, reintentos y tiempos de espera2.
  • Eliminación de la necesidad de colas, sistemas pub/sub y programadores1.

Restate:

  • Proporciona durabilidad a través de código estilo servicio RPC3.
  • Restauración del estado anterior tras un fallo y reanudación de la ejecución desde el punto de interrupción3.
  • Ahorro de recursos a través de la pausa automática de la ejecución en caso de alta latencia3.
  • Posibilidad de implementar máquinas de estado, procesamiento de eventos, sagas y trabajos asíncronos13.

Hatchet:

  • Programación de baja latencia (promedio de 25 ms de tiempo de inicio) y alto rendimiento6.
  • Estrategias integradas como FIFO, LIFO, Round Robin y Priority Queue4.
  • Políticas de reintento personalizadas y manejo de errores integrado4.
  • Soporte para cron, programación de una sola vez, protección contra picos y streaming progresivo4.

Inngest:

  • Control de flujo con reconocimiento de múltiples inquilinos (concurrencia, limitación de velocidad, rebote y prioridades)14.
  • Soporte para llamadas de funciones entre múltiples lenguajes7.
  • Procesamiento por lotes y agrupamiento de muchos eventos en una sola llamada de función7.
  • Mejoras en el panel de control, seguimiento y métricas integradas7.
  • Herramientas avanzadas de recuperación como reproducción de funciones, pausa y cancelación masiva7.

Casos de uso y aplicaciones
#

Temporal
#

Temporal es adecuado para casos de uso como orquestación de servicios, procesamiento de transacciones, gestión de infraestructuras, trabajos asíncronos y programación de tareas1. Se utiliza en cargas de trabajo críticas por grandes empresas como Stripe, Netflix, Datadog, HashiCorp, Alaska Airlines, y Box1.

Restate
#

Restate es ideal para flujos de trabajo, aplicaciones basadas en eventos, implementación de patrones de saga y procesamiento de eventos con estado3. Utilizado junto con Knative, permite construir aplicaciones serverless que conservan el estado incluso en situaciones de baja disponibilidad. Permite implementar diversas aplicaciones como flujos de trabajo, sagas y procesamiento de eventos con estado (combinado con Knative Eventing)3.

Hatchet
#

Hatchet es adecuado para casos de uso como equidad para inteligencia artificial generativa (asegura que un usuario ocupado no sobrecargue el sistema), procesamiento por lotes para indexación de documentos e imágenes, orquestación de flujos de trabajo para sistemas multimodales y precisión para procesamiento basado en eventos4.

Inngest
#

Inngest se adapta a flujos de trabajo para agentes de inteligencia artificial, equidad para IA generativa, procesamiento por lotes para indexación de documentos, y orquestación de flujos de trabajo para sistemas multimodales14. También apoya casos de uso relacionados con funciones en cadenas de IA, indexación de búsqueda/RAG y canalizaciones de datos, integración y flujos de pagos y facturación7.

Análisis de pros y contras
#

Temporal
#

Pros:

  • Plataforma confiable validada por miles de empresas1.
  • Alta confiabilidad gracias a la preservación del estado completo de la aplicación1.
  • Solución 100% de código abierto con licencia MIT1.

Contras:

  • La complejidad puede dificultar el análisis de operaciones al cambiar entre Go, Rust, y TypeScript9.
  • Estructura interna complicada, dificultando el análisis basado en información de transmisión y recepción de datos a nivel de protocolo9.

Restate
#

Pros:

  • Presentado como un único binario que simplifica su ejecución y operación10.
  • Eficiencia y resiliencia debido al uso de Rust10.
  • Capacidad para desplegarse como un servidor HTTP serverless/stateless3.

Contras:

  • Como proyecto relativamente nuevo, puede tener una comunidad más pequeña comparada con Temporal.
  • La estrategia de despliegue puede ser compleja (despliegue stateful en un clúster de k8s o uso de servicio administrado Restate Cloud)3.

Hatchet
#

Pros:

  • Basado en Postgres, lo que reduce el riesgo de pérdida de datos en comparación con soluciones basadas en Redis11.
  • Ofrece programación de baja latencia (promedio de 25 ms de tiempo de inicio) y alto rendimiento6.
  • Funciones integradas de observabilidad para desarrolladores de aplicaciones11.

Contras:

  • Actualmente usa RabbitMQ como pub/sub, lo que añade dependencias adicionales11.
  • Considerando una conexión entre motores y trabajadores mediante NATS, aún en desarrollo11.

Inngest
#

Pros:

  • SDK amigable para desarrolladores y diseño API conciso7.
  • Proporciona un Servidor de Desarrollo local, facilitando prueba y depuración14.
  • Funcionalidades de control de flujo con reconocimiento multiinquilino14.

Contras:

  • La licencia SSPL puede dificultar su uso en algunas empresas15.
  • Los principales lenguajes son Go (48%) y TypeScript (47%), lo que puede limitar el soporte para otros lenguajes12.

Licencia y comunidad
#

Temporal se ofrece bajo la licencia MIT y es desarrollado de forma abierta con una comunidad activa1. La licencia de Restate no se especifica claramente en los resultados. Hatchet se ofrece bajo la licencia MIT5. Inngest se ofrece bajo la Server Side Public License (SSPL) y también incluye la licencia Apache 2.0 bajo una publicación de código abierto retrasada (DOSP)7.

Conclusión
#

Los cuatro proyectos de código abierto ofrecen soluciones para la ejecución durable y gestión de flujos de trabajo, pero cada uno tiene enfoques y fortalezas únicas.

Temporal es la solución más madura y adoptada, adecuada para cargas de trabajo críticas. Restate se centra en aplicaciones serverless con estado y es altamente eficiente. Hatchet, como cola de tareas basada en Postgres, reduce el riesgo de pérdida de datos y proporciona una gran visibilidad para desarrolladores. Inngest se enfoca en la experiencia del desarrollador y proporciona una plataforma de flujos de trabajo que funciona en toda la nube con control de flujo multitenant.

La elección del proyecto puede depender de requisitos específicos, pilas tecnológicas existentes y la experiencia del equipo. Sin embargo, estas cuatro soluciones comparten un objetivo común: abstraer la complejidad de los sistemas distribuidos y permitir que los desarrolladores se concentren en la lógica de negocio.

Referencias
#

El contenido anterior se basa en información pública sobre Temporal116217189, Restate31310192021, Hatchet452262311, e Inngest87151214242526.


Análisis comparativo en profundidad entre los proyectos de código abierto Restate y Hatchet
#

Restate y Hatchet son soluciones de código abierto para manejar cargas de trabajo duraderas en sistemas distribuidos, aunque cada uno tiene un enfoque y áreas de énfasis distintas. Este informe comparará los conceptos clave, la arquitectura, las características y los casos de uso de ambos proyectos para analizar las ventajas y desventajas de cada solución.

Conceptos clave y propósito
#

Enfoque de Restate
#

Restate se centra en la creación de aplicaciones resilientes mediante su motor de Ejecución Durable. Al escribir código que parece un servicio RPC típico, Restate guarda el progreso de ejecución y, en caso de un fallo, restaura el estado anterior para continuar desde el punto de interrupción27.

Restate tiene la filosofía de “ofrecer durabilidad sin cambiar la forma de escribir el código”, permitiendo que los desarrolladores programen como lo harían normalmente27. Esto reduce significativamente la carga de desarrollar sistemas distribuidos complejos.

Enfoque de Hatchet
#

Por otro lado, Hatchet se presenta como una cola de tareas distribuidas y tolerante a fallos, destinada a reemplazar colas heredadas difíciles de gestionar o sistemas pub/sub, permitiendo diseñar cargas de trabajo que se recuperan de fallas28. Ha sido concebido para abordar problemas de escalabilidad, como concurrencia, equidad y limitación de velocidades28.

Hatchet busca distribuir tareas entre varios trabajadores con la mínima configuración y recuperarse de fallos de manera confiable, además de otorgar una gran visibilidad y observabilidad a los desarrolladores de aplicaciones29.

Características técnicas y arquitectura
#

Características técnicas de Restate
#

Restate tiene las siguientes características técnicas clave:

Expone servicios a través de un servidor HTTP/2, se presenta como un único binario, lo que facilita su ejecución y operación27. Desarrollado en Rust, es eficiente en recursos y altamente resiliente, funcionando en diversas plataformas como FaaS, Kubernetes, servidores y contenedores27.

Además, Restate pausa automáticamente la ejecución en caso de latencias largas, optimizando el uso de recursos computacionales27.

Características técnicas de Hatchet
#

Hatchet cuenta con las siguientes características técnicas clave:

Soporta colas de transacciones y ejecución estilo DAG basado en Postgres28. Se afirma que puede escalar horizontalmente a varias regiones y verticalmente a más de 10k TPS, aprovechando SKIP LOCKED y las últimas características clave de PostgreSQL28.

Ofrece programación de baja latencia (promedio de 25 ms de tiempo de inicio) y alto rendimiento, incluyendo estrategias como FIFO, LIFO, Round Robin y Priority Queue, resolviendo problemas de escalabilidad con la mínima configuración29.

Comparación de características principales
#

Características principales de Restate
#

Restate ofrece las siguientes características principales:

Código de flujo de trabajo: Asegura que el código se ejecute de manera segura y estable, incluso en caso de fallos27.

Llamadas API y webhooks: Conecta de manera confiable el código sincrónico y eventos asincrónicos, como webhooks27.

Tareas asíncronas: Todas las funciones llamadas a través de Restate se ejecutan de forma asíncrona y durable27.

Procesamiento de eventos con estado: Permite procesar eventos desde fuentes como Kafka proporcionando reintentos específicos y semánticas de flujo de trabajo27.

Señales duraderas: Facilita la creación de flujos de trabajo y manejadores de eventos que procesan señales, eventos o entradas de usuario de manera confiable27.

Idempotencia: Añade idempotencia a todas las RPC o manejadores de eventos27.

Sagas: Implementa patrones de saga y compensación, que son transacciones de larga duración que cancelan trabajos previos cuando es necesario27.

Máquina de estados: Permite la creación de máquinas de estado consistentes y escalables, sin necesidad de bases de datos o transacciones27.

Características principales de Hatchet
#

Hatchet proporciona las siguientes características principales:

Observabilidad: Permite buscar todas las ejecuciones, transmisión de logs y seguimiento de métricas como latencia, tasa de errores o métricas personalizadas29.

Ejecutar durabilidad práctica: Soporta la reproducción de eventos y la reanudación manual de la ejecución en etapas específicas de los flujos de trabajo29.

Cron: Permite establecer horarios repetidos para la ejecución de funciones29.

Programación única: Permite agendar la ejecución de funciones en fechas y horas específicas29.

Protección contra picos: Suaviza el manejo de picos de tráfico, ejecutándose solo hasta donde el sistema pueda manejar29.

Transmisión progresiva: Se suscribe a actualizaciones a medida que las funciones progresan en un trabajador en segundo plano29.

Políticas de reintento personalizadas y manejo de errores integrado: Asegura una recuperación rápida de fallos transitorios28.

Casos de uso y aplicaciones
#

Casos de uso de Restate
#

Restate es especialmente adecuado para casos de uso como:

Flujos de trabajo y procesos de larga duración: Gracias a la ejecución durable, se puede gestionar de forma confiable flujos de trabajo complejos y procesos prolongados27.

Aplicaciones basadas en eventos: Procesa eventos de fuentes como Kafka, manteniendo el estado durante el proceso27.

Implementación de patrones de saga: Facilita la implementación de patrones de transacciones de larga duración y compensaciones, cancelando trabajos previos cuando es necesario27.

Máquinas de estado: Permite la creación de máquinas de estado consistentes y escalables sin bases de datos o transacciones27.

Casos de uso de Hatchet
#

Hatchet es especialmente adecuado para:

Equidad para inteligencia artificial generativa: Asegura que un usuario ocupado no sobrecargue el sistema distribuyendo las solicitudes de forma justa28.

Procesamiento por lotes para indexación de documentos e imágenes: Permite procesar grandes lotes y retomar trabajos interrumpidos adyacentemente28.

Orquestación de flujos de trabajo para sistemas multimodales: Orquesta entradas y salidas multimodales, soportando la ejecución estilo DAG28.

Precisión para procesamiento basado en eventos: Responde a eventos externos o internos para el sistema, permitiendo la reproducción automática de eventos28.

Escalabilidad y rendimiento
#

Escalabilidad y rendimiento de Restate
#

Restate es un único binario que simplifica su ejecución y operación, siendo también eficiente y resiliente[,con la adición de una función de alta disponibilidad y despliegue distribuido que refuerza su escalabilidad27.

Además, pausa automáticamente la ejecución en caso de latencias largas, optimizando su uso de recursos computacionales y funciona de manera flexible en diversas plataformas como FaaS, Kubernetes, servidores y contenedores27.

Escalabilidad y rendimiento de Hatchet
#

Hatchet ofrece un balance perfecto entre baja latencia (promedio de 25 ms de tiempo de inicio) y alta programación de rendimiento, necesaria para interacciones en tiempo real y trabajos críticos29.

Utiliza un sistema de colas de transacciones en base a Postgres, que a su vez permite escalar horizontalmente en múltiples regiones y se sostiene verticalmente más de 10k TPS, aprovechando las características principales de PostgreSQL y SKIP LOCKED28.

Experiencia del desarrollador y entorno de soporte
#

Experiencia del desarrollador en Restate
#

Restate permite a los desarrolladores escribir código de forma similar a funciones normales y servicios, eliminando la preocupación por la complejidad de los sistemas distribuidos27. Además, soporta varios lenguajes como Golang, Java, Kotlin, Typescript, Rust y Python27.

Desde la versión 1.2, Restate ofrece una UI gráfica que apoya la depuración de aplicaciones distribuidas y un servidor de desarrollo local que mejora el entorno de prueba y desarrollo27.

Experiencia del desarrollador en Hatchet
#

Hatchet ofrece SDK de código abierto para Python, Typescript y Go, permitiendo a los desarrolladores usar las herramientas adecuadas para su desarrollo28. Integra además observabilidad para desarrolladores, mejorando la experiencia de desarrollo y depuración28.

Hatchet permite buscar todas las ejecuciones para identificar problemas rápidamente, transmitiendo logs y rastreando latencias, tasas de errores o métricas personalizadas29.

Comparación exhaustiva y criterios de selección
#

Restate y Hatchet poseen fortalezas únicas y escenarios de uso óptimos.

Cuándo es adecuado Restate
#

Cuando se necesita ejecución durable sin modificar el código en gran medida, implementar patrones complejos como máquinas de estado y sagas, y donde la eficiencia y resiliencia son esenciales, Restate puede ser más apropiado.

Cuándo es adecuado Hatchet
#

Si necesita colas de tareas y una distribución justa de trabajos, donde la visibilidad y monitoreo son importantes, o una solución optimizada para escenarios modernos como inteligencia artificial generativa, además de un sistema confiable de colas de transacciones basado en Postgres, Hatchet puede ser más adecuado.

Conclusión
#

Restate y Hatchet son potentes soluciones de código abierto para manejar cargas de trabajo duraderas en sistemas distribuidos. Restate se centra en la ejecución durable y en la implementación de patrones complejos, mientras que Hatchet pone énfasis en colas de tareas, distribución justa de trabajos y observabilidad.

Cada proyecto tiene fortalezas únicas y escenarios de uso optimales, por lo que es importante considerar los requisitos del proyecto, la infraestructura existente y la experiencia del equipo de desarrollo al seleccionar la solución adecuada. Ambas soluciones trabajan para abstraer la complejidad del desarrollo de sistemas distribuidos, permitiendo a los desarrolladores centrarse en la lógica de negocio esencial.



  1. https://github.com/temporalio ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  2. https://temporal.io ↩︎ ↩︎ ↩︎

  3. https://knative.dev/blog/articles/Building-Stateful-applications-with-Knative-and-Restate/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  4. https://news.hada.io/topic?id=13722 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  5. https://github.com/hatchet-dev/hatchet ↩︎ ↩︎ ↩︎ ↩︎

  6. https://hatchet.run ↩︎ ↩︎ ↩︎ ↩︎

  7. https://news.ycombinator.com/item?id=41604042 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  8. https://appmaster.io/ko/news/inggestneun-300man-jageum-jiweon-baegendeu-weokeupeulrou-gaebaleul-mogeumhabnida ↩︎ ↩︎

  9. https://swcho.github.io/blogs/2023-12-25-temporal-2 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  10. https://restate.dev ↩︎ ↩︎ ↩︎ ↩︎

  11. https://news.ycombinator.com/item?id=39643136 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  12. https://openalternative.co/inngest ↩︎ ↩︎ ↩︎

  13. https://github.com/restatedev/restate ↩︎ ↩︎

  14. https://www.inngest.com ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  15. https://news.ycombinator.com/item?id=31910762 ↩︎ ↩︎

  16. https://www.opensourcealternative.to/project/temporal ↩︎

  17. https://web.temporal.io ↩︎

  18. https://aws.amazon.com/startups/offers/temporal?lang=ko ↩︎

  19. https://docs.restate.dev ↩︎

  20. https://www.contributor.fyi/restate ↩︎

  21. https://github.com/restatedev ↩︎

  22. https://docs.hatchet.run/home ↩︎

  23. https://openalternative.co/hatchet ↩︎

  24. https://www.inngest.com/blog/open-source-event-driven-queue ↩︎

  25. https://github.com/inngest ↩︎

  26. https://github.com/inngest/inngest ↩︎

  27. https://restate.dev ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  28. https://github.com/hatchet-dev/hatchet ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  29. https://hatchet.run ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎