11 puntos por GN⁺ 2025-04-07 | 2 comentarios | Compartir por WhatsApp
  • Plataforma open source de procesamiento de tareas en segundo plano a gran escala basada en Postgres
  • Cola de tareas distribuida (Distributed Task Queue) y plataforma de orquestación de flujos de trabajo
  • Soporta flujos de trabajo complejos, recuperación ante fallos, programación, disparadores basados en eventos y monitoreo en tiempo real
  • Incluye SDK para Python, Go y TypeScript
  • Licencia MIT, con versiones self-hosted y en la nube

Resumen de funciones principales

  • Gestión de colas

    • Sistema de colas duradero basado en Postgres
      • Encolado basado en claves (implementa una distribución justa de tareas)
      • Rate limiting
      • Sticky Assignment y Worker Affinity
    • Manejo automático de distribución de tareas, reintentos y alertas por fallos
    • Incluye ejemplos en Python / TypeScript / Go
  • Orquestación de tareas

    • Construcción de flujos de trabajo basada en DAG
      • Ejecución basada en condiciones (por ejemplo: sleep, disparadores basados en eventos, ejecución condicional según la salida de la tarea padre, etc.)
      • Permite manejar lógica de ramificación compleja
    • Definición de dependencias entre tareas y ejecución paralela de múltiples tareas
    • Soporte para guardar y recuperar resultados intermedios con durable tasks
      • Ejecución durable de funciones: ante fallos, guarda en caché el estado intermedio y lo restaura al reejecutar
      • También soporta Durable Sleep y Durable Events
  • Control de flujo (Flow Control)

    • Límite de concurrencia por usuario
    • Rate limiting global y dinámico
    • Estabilidad del sistema mediante distribución estratégica de tareas
  • Programación de tareas

    • Soporta tareas Cron, ejecución programada y durable sleep
    • Ejemplo: ejecutar todos los días a medianoche, programar a una hora específica o esperar hasta una hora determinada
  • Enrutamiento de tareas

    • Sticky Assignment: fija una tarea al mismo worker
    • Worker Affinity: aplica lógica de selección del worker óptimo
  • Disparadores basados en eventos

    • Permite ejecutar tareas después de recibir eventos externos
    • Se pueden combinar condiciones de evento/sleep
  • Web UI en tiempo real

    • Dashboard y monitoreo en tiempo real
    • Visualización de logs de tareas y configuración de alertas (Slack/correo electrónico)

¿Cuándo conviene usar Hatchet?

  • ✅ Cuando necesitas construir flujos de trabajo basados en DAG
  • ✅ Cuando son importantes los reintentos y la preservación del estado ante fallos de tareas
  • ✅ Para distribuir y procesar tareas en aplicaciones con muchos usuarios
  • ❌ Cuando solo necesitas una cola simple y fácil de configurar rápidamente (se recomiendan Celery/BullMQ, etc.)
  • ❌ Cuando la integración con diversos conectores de datos es importante (se recomiendan Airflow/Prefect, etc.)

Comparación: Hatchet vs otras soluciones

  • Hatchet vs Temporal

    • Hatchet soporta cola + DAG + Durable Execution
    • Temporal está optimizado para Durable Execution
    • Hatchet es fácil de self-hostear (solo requiere Postgres)
  • Hatchet vs BullMQ / Celery

    • Hatchet incluye almacenamiento del historial de tareas + visualización en UI + orquestación integrada
    • BullMQ/Celery son bibliotecas de colas ligeras, pero con funciones de monitoreo limitadas
  • Hatchet vs Airflow / Prefect

    • Hatchet ofrece ejecución rápida, baja latencia y gestión propia de workers
    • Airflow/Prefect están más centrados en pipelines de datos y destacan por sus conectores de integración

Resumen

  • Hatchet es una plataforma moderna de procesamiento distribuido de tareas que funciona solo con Postgres
  • Permite implementar con una sola herramienta un sistema de tareas Durable, Observable y Composable
  • Soporta tanto nube como self-hosting y se integra fácilmente con Python/Go/TypeScript

2 comentarios

 
halfenif 2025-04-08

Lo probé durante 2 horas y escribí esto.

  • Como estoy armando un MQ, lo probé pensando si sería algo nuevo basado en Postgres, pero me decepcionó un poco ver que necesitaba RabbitMQ.
  • Como no está pensado desde la perspectiva de k8s, levanté docker-compose.yaml en Podman (+Arch).
  • Como quería usar Postgres por separado, tuve que hacer un poco más de configuración, pero al final me topé con SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER: Invalid certificate verification context y lo dejé ahí.
  • Si algo salía mal a mitad del proceso, tenía que hacer drop de la base de datos de Postgres y empezar de nuevo.
  • Había que crear una API Key cada vez, pero como la clave no se mostraba completa en la interfaz web, tuve que extraerla usando las herramientas de desarrollador.
 
GN⁺ 2025-04-07
Opiniones en Hacker News
  • Me pregunto en qué se diferencia de otros ejecutores de tareas en Python basados en pg, como Procrastinate o Chancy

  • Esto es muy interesante

    • Cuando dicen que FOR UPDATE SKIP LOCKED no escala hasta 25k consultas/segundo, me pregunto en qué punto llegaron al límite
    • Me intriga lo de lecturas y escrituras con buffering, y cambiar todas las tablas grandes a una columna ID
    • Me pregunto si esos puntos fueron parte de la solución para escalar FOR UPDATE SKIP LOCKED según sus necesidades
  • Me pregunto si el trabajo de la cola (poner trabajos en cola y marcarlos como completados) ocurre dentro de la misma transacción que mi lógica de negocio

    • Creo que esa es una función clave de una cola basada en base de datos
    • Simplifica la lógica de los reintentos
    • El mismo problema también puede surgir al ejecutar trabajos
    • En ese punto, quizá sea mejor usar SQS
  • Estoy diseñando una aplicación basada en eventos/workflows, y esta solución parece muy prometedora

    • También consideré Temporal, pero no sentí que encajara del todo
    • La licencia open source me da confianza para diseñar la aplicación
    • Estaba buscando condiciones tipo CEL
  • Las seis mejoras en la arquitectura de Hatchet elevan el rendimiento en todos los frentes

    • Particionamiento por rango de tablas de series temporales
    • Particionamiento por hash de eventos de trabajo
    • Separación entre tablas de monitoreo y colas
    • Lecturas y escrituras con buffering
    • Cambio de todas las tablas grandes a una columna ID
    • Uso intensivo de triggers de Postgres
    • Si lees el manual, puedes hacer cosas increíbles
  • El README asume que hay más usuarios usando modo oscuro

    • El logo es blanco, así que sin modo oscuro no se ve
    • Sería interesante ver las estadísticas de GitHub
  • Al usar Postgres como cola de mensajes, me he topado con problemas para manejar payloads grandes (más de 50MB)

    • La solución fue usar tablas unlogged y hacer vacuum full periódicamente
    • No soy experto en Postgres, pero me pregunto si ya resolvieron ese problema
  • Después de revisar la documentación durante 15 minutos, dejo este feedback

    • Están bien el modo claro, el open source, el logging y la interfaz DX
    • Sería mejor reemplazar el ejemplo de Hello World por un escenario real
    • El código de workflows que incluyen tareas de varias etapas no es intuitivo
    • Hay que familiarizarse con la forma de pensar, los patrones y la terminología de Hatchet
    • Parece que falta esfuerzo por hacerlo fácil para el cliente
    • Los posts de ingeniería tienen sentido, pero al cliente no le interesa la infraestructura cloud
    • Como hay muchas opciones en el mercado de workflows, es muy probable que al final reescriban o pivoten
    • Deberían enfocar mejor el recorrido de automatización y hacer que la gente pueda adoptarlo y configurarlo fácilmente
    • Es difícil serializar workflows a JSON
    • Deberían hacer que los workflows de Hatchet se puedan mover fácilmente a otra empresa
  • Felicidades por el lanzamiento de v1

    • He usado Hatchet durante casi 1 año y lo puse en producción hace 6 meses
    • El soporte open source y el arranque rápido son excelentes
    • Se nota el trabajo de ingeniería invertido en el sistema
  • La primera impresión es buena, felicidades por el lanzamiento

    • Tengo algunas preguntas
    • Me pregunto si soporta tareas persistentes
    • Me pregunto dónde se almacenan las entradas y salidas de las tareas
    • Me pregunto si se puede estimar cuántas tareas por segundo puede procesar el sistema basándose en el tamaño de la instancia de PostgreSQL y las métricas de I/O
    • Estoy evaluando distintas herramientas y quiero saber qué sensación da Hatchet
    • Estoy buscando una herramienta con la que se pueda trabajar con el mínimo boilerplate posible