- Postgresベースの大規模バックグラウンドジョブ処理プラットフォームのオープンソース
- 分散タスクキュー(Distributed Task Queue)およびワークフローオーケストレーションプラットフォーム
- 複雑なジョブワークフロー、障害復旧、スケジューリング、イベント駆動トリガー、リアルタイムモニタリングまでサポート
- Python、Go、TypeScript SDKを提供
- MITライセンス、セルフホスティング版とクラウド版を提供
主な機能の要約
-
キュー管理
- Postgresベースの耐久性あるキューシステム
- キー別キューイング(公平なジョブ分配を実現)
- レート制限(Rate limiting)
- Sticky AssignmentおよびWorker Affinity
- ジョブ分配、リトライ、障害通知を自動処理
- Python / TypeScript / Go のサンプルを提供
-
ジョブオーケストレーション
- DAGベースのワークフロー構成
- 条件ベースの実行(例: sleep、イベント駆動トリガー、親ジョブの出力値に基づく条件実行など)
- 複雑な分岐ロジックを処理可能
- ジョブ間の依存関係定義、複数ジョブの並列実行
- Durable taskによる中間結果の保存と復旧をサポート
- 耐久性のある関数実行: 障害時に中間状態をキャッシュし、再実行で復元
- Durable SleepとDurable Eventsもサポート
-
フロー制御(Flow Control)
- ユーザー単位の同時実行数制限
- グローバルおよび動的なレート制限(Rate Limiting)
- 戦略的なジョブ分散によるシステム安定性の確保
-
ジョブスケジューリング
- Cronジョブ、予約実行、durable sleepをサポート
- 例: 毎日深夜の実行、特定時刻の予約、指定時間の待機など
-
ジョブルーティング
- Sticky Assignment: 同じワーカーにジョブを固定
- Worker Affinity: 最適なワーカー選択ロジックを適用
-
イベント駆動トリガー
- 外部イベント受信後にジョブを実行可能
- イベント/スリープ条件の組み合わせが可能
-
リアルタイムWeb UI
- リアルタイムダッシュボードとモニタリング
- ジョブログの表示、通知設定(Slack/メール)
Hatchetはどんなときに使うとよいか?
- ✅ DAGベースのワークフロー構成が必要なとき
- ✅ ジョブ失敗時のリトライと状態保持が重要なとき
- ✅ ユーザー数の多いアプリケーションでのジョブ分散処理
- ❌ すばやくセットアップできるシンプルなキューだけが必要なとき(Celery/BullMQ などを推奨)
- ❌ 多様なデータコネクタとの統合が重要なとき(Airflow/Prefect などを推奨)
比較: Hatchet vs 他のソリューション
-
Hatchet vs Temporal
- Hatchetはキュー + DAG + Durable Executionをすべてサポート
- TemporalはDurable Executionに最適化
- Hatchetはセルフホスティングが容易(Postgresだけで動作)
-
Hatchet vs BullMQ / Celery
- Hatchetはジョブ履歴の保存 + UI可視化 + オーケストレーション内蔵
- BullMQ/Celeryは軽量なキューライブラリだが、モニタリング機能が不足
-
Hatchet vs Airflow / Prefect
- Hatchetは高速実行、低レイテンシ、自前のワーカー管理
- Airflow/Prefectはデータパイプライン中心で、統合コネクタに強み
要約
- HatchetはPostgresだけで動作するモダンな分散ジョブ処理プラットフォーム
- Durable、Observable、Composableなジョブシステムを単一ツールで実装可能
- クラウド/セルフホスティングの両方に対応し、Python/Go/TypeScriptで容易に統合可能
2件のコメント
2時間ほどテストしてみて書いています。
docker-compose.yamlを podman(+Arch)で立ち上げた"SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER: Invalid certificate verification context"に遭遇して中断したHacker Newsのコメント
同じくpgベースのPythonジョブランナーであるProcrastinateやChancyと比べて、何が違うのか気になる
とても興味深い内容
FOR UPDATE SKIP LOCKEDが25kクエリ/秒までスケールしないとのことだが、どの時点で限界に達したのか気になるFOR UPDATE SKIP LOCKEDを用途に合わせてスケールさせる解決策の一部だったのか気になるキューの処理(ジョブをキューに入れて完了としてマークすること)が、自分のビジネスロジックと同じトランザクション内で発生するのか気になる
イベント/ワークフローベースのアプリケーションを設計中で、このソリューションは非常に有望に見える
Hatchetアーキテクチャにおける6つの改善により、あらゆる面でパフォーマンスが向上している
READMEは、ダークモードを使うユーザーのほうが多いと想定しているようだ
Postgresをメッセージキューとして使う際、巨大なペイロード(50MB超)を扱う問題に直面したことがある
15分ほどドキュメントを確認したうえでフィードバックする
v1リリースおめでとう
第一印象は良い。リリースおめでとう