- โอเพนซอร์ส แพลตฟอร์มประมวลงานเบื้องหลังขนาดใหญ่ ที่ทำงานบน Postgres
- Distributed Task Queue และ แพลตฟอร์ม Workflow Orchestration
- รองรับตั้งแต่เวิร์กโฟลว์งานที่ซับซ้อน การกู้คืนจากความล้มเหลว การตั้งเวลา ทริกเกอร์แบบอิงเหตุการณ์ ไปจนถึงการมอนิเตอร์แบบเรียลไทม์
- มี SDK สำหรับ Python, Go, TypeScript
- ใบอนุญาต MIT มีทั้งเวอร์ชัน self-hosting และคลาวด์
สรุปความสามารถหลัก
-
การจัดการคิว
- ระบบคิวที่ทนทานบน Postgres
- การเข้าคิวแบบอิงคีย์ (ทำให้การกระจายงานเป็นธรรม)
- Rate limiting
- Sticky Assignment และ Worker Affinity
- จัดการการกระจายงาน การลองใหม่ และการแจ้งเตือนเมื่อเกิดความล้มเหลวโดยอัตโนมัติ
- มีตัวอย่างสำหรับ Python / TypeScript / Go
-
การออร์เคสตรางาน
- สร้างเวิร์กโฟลว์แบบอิง DAG
- การทำงานตามเงื่อนไข (เช่น sleep, ทริกเกอร์แบบอิงเหตุการณ์, การทำงานตามเงื่อนไขจากค่าผลลัพธ์ของงานแม่ เป็นต้น)
- รองรับลอจิกการแตกแขนงที่ซับซ้อน
- กำหนด dependency ระหว่างงาน และรันหลายงานแบบขนานได้
- รองรับการบันทึกและกู้คืนผลลัพธ์ระหว่างทางด้วย durable task
- การรันฟังก์ชันแบบคงทน: เมื่อเกิดความล้มเหลวจะ cache สถานะระหว่างทางและกู้คืนด้วยการรันใหม่
- รองรับ Durable Sleep และ Durable Events ด้วย
-
การควบคุมโฟลว์ (Flow Control)
- จำกัด concurrency ระดับผู้ใช้
- Rate Limiting แบบ global และแบบไดนามิก
- เพิ่มเสถียรภาพของระบบผ่านการกระจายงานเชิงกลยุทธ์
-
การตั้งเวลางาน
- รองรับ Cron jobs, การรันตามเวลาที่กำหนด, durable sleep
- ตัวอย่าง: รันทุกวันตอนเที่ยงคืน, จองรันตามเวลาที่กำหนด, รอตามเวลาที่ระบุ เป็นต้น
-
การกำหนดเส้นทางงาน
- Sticky Assignment: ตรึงงานไว้กับ worker เดิม
- Worker Affinity: ใช้ลอจิกเลือก worker ที่เหมาะสมที่สุด
-
ทริกเกอร์แบบอิงเหตุการณ์
- สามารถรันงานหลังรับเหตุการณ์จากภายนอกได้
- รวมเงื่อนไขแบบ event/sleep ได้
-
เว็บ UI แบบเรียลไทม์
- แดชบอร์ดและการมอนิเตอร์แบบเรียลไทม์
- ดูล็อกงานและตั้งค่าการแจ้งเตือน (Slack/อีเมล)
Hatchet เหมาะใช้เมื่อไร?
- ✅ เมื่อต้องการสร้างเวิร์กโฟลว์แบบอิง DAG
- ✅ เมื่อต้องให้ความสำคัญกับการลองใหม่และการคงสถานะเมื่อเกิดความล้มเหลว
- ✅ การกระจายประมวลงานสำหรับแอปพลิเคชันที่มีผู้ใช้จำนวนมาก
- ❌ เมื่อต้องการเพียงคิวแบบง่ายที่ตั้งค่าได้รวดเร็ว (แนะนำ Celery/BullMQ เป็นต้น)
- ❌ เมื่อต้องให้ความสำคัญกับการเชื่อมต่อกับ data connector ที่หลากหลาย (แนะนำ Airflow/Prefect เป็นต้น)
เปรียบเทียบ: Hatchet vs โซลูชันอื่น
-
Hatchet vs Temporal
- Hatchet รองรับทั้ง คิว + DAG + Durable Execution
- Temporal เหมาะที่สุดสำหรับ Durable Execution
- Hatchet ทำ self-hosting ได้ง่ายกว่า (ต้องใช้แค่ Postgres)
-
Hatchet vs BullMQ / Celery
- Hatchet มี การเก็บประวัติงาน + การแสดงผลผ่าน UI + orchestration ในตัว
- BullMQ/Celery เป็นไลบรารีคิวแบบน้ำหนักเบา แต่มีความสามารถด้านมอนิเตอร์ค่อนข้างจำกัด
-
Hatchet vs Airflow / Prefect
- Hatchet มีจุดเด่นที่ การทำงานความเร็วสูง, latency ต่ำ, และการจัดการ worker ในตัวเอง
- Airflow/Prefect เน้น data pipeline และเด่นด้าน connector สำหรับการเชื่อมต่อ
สรุป
- Hatchet คือ แพลตฟอร์มประมวลงานแบบกระจายสมัยใหม่ ที่ทำงานได้ด้วย Postgres เพียงอย่างเดียว
- สามารถสร้างระบบงานที่ Durable, Observable และ Composable ได้ด้วยเครื่องมือเดียว
- รองรับทั้งคลาวด์และ self-hosting และเชื่อมต่อได้ง่ายด้วย Python/Go/TypeScript
2 ความคิดเห็น
ลองทดสอบอยู่ 2 ชั่วโมงแล้วจึงมาเขียน
docker-compose.yamlไปรันบน podman (+Arch)SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER: Invalid certificate verification contextdropฐานข้อมูล postgres แล้วเริ่มใหม่ความคิดเห็นบน Hacker News
อยากรู้ว่ามันแตกต่างจากตัวรันงาน Python ที่อิงกับ pg ตัวอื่นอย่าง Procrastinate หรือ Chancy อย่างไร
น่าสนใจมาก
FOR UPDATE SKIP LOCKEDขยายไปไม่ถึง 25k queries/sec ก็อยากรู้ว่าไปชนเพดานที่จุดไหนFOR UPDATE SKIP LOCKEDขยายได้ตามความต้องการหรือไม่อยากรู้ว่างานในคิว (การใส่งานเข้าคิวและทำเครื่องหมายว่าเสร็จสิ้น) เกิดขึ้นในทรานแซกชันเดียวกับ business logic ของผมหรือไม่
กำลังออกแบบแอปพลิเคชันที่ขับเคลื่อนด้วย event/workflow และโซลูชันนี้ดูมีอนาคตมาก
การปรับปรุงสถาปัตยกรรมของ Hatchet ทั้งหกข้อทำให้ประสิทธิภาพดีขึ้นในทุกมิติ
README เหมือนตั้งสมมติฐานว่าผู้ใช้ส่วนใหญ่ใช้ dark mode
ตอนใช้ Postgres เป็น message queue เคยเจอปัญหาในการจัดการ payload ขนาดใหญ่ (มากกว่า 50MB)
หลังจากดูเอกสารอยู่ 15 นาที ก็ขอให้ฟีดแบ็กไว้
ขอแสดงความยินดีกับการเปิดตัว v1
ความประทับใจแรกดีมาก ยินดีกับการเปิดตัว