- Nền tảng xử lý tác vụ nền quy mô lớn mã nguồn mở dựa trên Postgres
- Hàng đợi tác vụ phân tán (Distributed Task Queue) và nền tảng điều phối workflow
- Hỗ trợ workflow tác vụ phức tạp, khôi phục sau lỗi, lập lịch, trigger theo sự kiện, đến giám sát thời gian thực
- Cung cấp SDK cho Python, Go, TypeScript
- Giấy phép MIT, cung cấp cả bản self-hosting và cloud
Tóm tắt các tính năng chính
-
Quản lý hàng đợi
- Hệ thống hàng đợi bền vững dựa trên Postgres
- Xếp hàng theo khóa (triển khai phân phối tác vụ công bằng)
- Giới hạn tốc độ (Rate limiting)
- Sticky Assignment và Worker Affinity
- Tự động xử lý phân phối tác vụ, retry và thông báo lỗi
- Cung cấp ví dụ cho Python / TypeScript / Go
-
Điều phối tác vụ
- Xây dựng workflow dựa trên DAG
- Thực thi theo điều kiện (ví dụ: sleep, trigger theo sự kiện, thực thi có điều kiện dựa trên giá trị đầu ra của tác vụ cha, v.v.)
- Có thể xử lý logic phân nhánh phức tạp
- Định nghĩa phụ thuộc giữa các tác vụ, chạy song song nhiều tác vụ
- Hỗ trợ lưu và khôi phục kết quả trung gian bằng durable task
- Thực thi hàm bền vững: khi lỗi xảy ra, lưu cache trạng thái trung gian và khôi phục bằng cách chạy lại
- Cũng hỗ trợ Durable Sleep và Durable Events
-
Kiểm soát luồng (Flow Control)
- Giới hạn đồng thời theo từng người dùng
- Giới hạn tốc độ (Rate Limiting) toàn cục và động
- Đảm bảo tính ổn định hệ thống thông qua phân tán tác vụ có chiến lược
-
Lập lịch tác vụ
- Hỗ trợ cron job, thực thi theo lịch hẹn, durable sleep
- Ví dụ: chạy vào nửa đêm mỗi ngày, đặt lịch tại thời điểm cụ thể, chờ đến thời gian chỉ định, v.v.
-
Định tuyến tác vụ
- Sticky Assignment: gắn tác vụ vào cùng một worker
- Worker Affinity: áp dụng logic chọn worker tối ưu
-
Trigger theo sự kiện
- Có thể thực thi tác vụ sau khi nhận sự kiện bên ngoài
- Có thể kết hợp điều kiện sự kiện/sleep
-
Web UI thời gian thực
- Dashboard và giám sát thời gian thực
- Xem log tác vụ, thiết lập cảnh báo (Slack/email)
Khi nào nên dùng Hatchet?
- ✅ Khi cần xây dựng workflow dựa trên DAG
- ✅ Khi việc retry và bảo toàn trạng thái sau lỗi là quan trọng
- ✅ Khi cần phân tán xử lý tác vụ cho ứng dụng có nhiều người dùng
- ❌ Khi chỉ cần một hàng đợi đơn giản, thiết lập nhanh (khuyên dùng Celery/BullMQ, v.v.)
- ❌ Khi khả năng tích hợp với nhiều data connector là quan trọng (khuyên dùng Airflow/Prefect, v.v.)
So sánh: Hatchet vs các giải pháp khác
-
Hatchet vs Temporal
- Hatchet hỗ trợ đầy đủ queue + DAG + Durable Execution
- Temporal được tối ưu cho Durable Execution
- Hatchet dễ self-hosting hơn (chỉ cần Postgres)
-
Hatchet vs BullMQ / Celery
- Hatchet có sẵn lưu lịch sử tác vụ + trực quan hóa UI + điều phối tích hợp
- BullMQ/Celery là thư viện queue nhẹ nhưng thiếu tính năng giám sát
-
Hatchet vs Airflow / Prefect
- Hatchet có thực thi tốc độ cao, độ trễ thấp, tự quản lý worker
- Airflow/Prefect tập trung vào data pipeline và mạnh về connector tích hợp
Tóm tắt
- Hatchet là nền tảng xử lý tác vụ phân tán hiện đại chạy chỉ với Postgres
- Có thể triển khai một hệ thống tác vụ Durable, Observable, Composable bằng một công cụ duy nhất
- Hỗ trợ cả cloud/self-hosting và dễ tích hợp bằng Python/Go/TypeScript
2 bình luận
Đã thử nghiệm trong 2 giờ rồi viết nhận xét này.
docker-compose.yamltrên podman(+Arch)SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER: Invalid certificate verification contextdropdatabase Postgres và bắt đầu lại từ đầuÝ kiến trên Hacker News
Tò mò không biết điểm khác biệt là gì khi so với các trình thực thi tác vụ Python khác dựa trên pg như Procrastinate hay Chancy
Nội dung rất thú vị
FOR UPDATE SKIP LOCKEDkhông thể mở rộng đến 25k truy vấn/giây, tôi tò mò không biết đã chạm trần ở thời điểm nàoFOR UPDATE SKIP LOCKEDcho phù hợp với nhu cầu hay khôngTôi tò mò không biết các tác vụ trong hàng đợi (đưa tác vụ vào hàng đợi và đánh dấu hoàn tất) có xảy ra trong cùng một transaction với logic nghiệp vụ của tôi hay không
Tôi đang thiết kế một ứng dụng dựa trên event/workflow, và giải pháp này trông rất hứa hẹn
Sáu cải tiến trong kiến trúc Hatchet đã giúp hiệu năng tăng lên trên mọi phương diện
README dường như giả định rằng có nhiều người dùng dark mode hơn
Khi dùng Postgres làm message queue, tôi từng gặp vấn đề xử lý payload lớn (trên 50MB)
Tôi đã xem qua tài liệu trong 15 phút rồi đưa ra phản hồi
Chúc mừng ra mắt v1
Ấn tượng ban đầu là tốt, chúc mừng ra mắt