11 ポイント 投稿者 GN⁺ 2025-04-07 | 2件のコメント | WhatsAppで共有
  • Postgresベースの大規模バックグラウンドジョブ処理プラットフォームのオープンソース
  • 分散タスクキュー(Distributed Task Queue)およびワークフローオーケストレーションプラットフォーム
  • 複雑なジョブワークフロー、障害復旧、スケジューリング、イベント駆動トリガー、リアルタイムモニタリングまでサポート
  • Python、Go、TypeScript SDKを提供
  • MITライセンス、セルフホスティング版とクラウド版を提供

主な機能の要約

  • キュー管理

    • Postgresベースの耐久性あるキューシステム
      • キー別キューイング(公平なジョブ分配を実現)
      • レート制限(Rate limiting)
      • Sticky AssignmentおよびWorker Affinity
    • ジョブ分配、リトライ、障害通知を自動処理
    • Python / TypeScript / Go のサンプルを提供
  • ジョブオーケストレーション

    • DAGベースのワークフロー構成
      • 条件ベースの実行(例: sleep、イベント駆動トリガー、親ジョブの出力値に基づく条件実行など)
      • 複雑な分岐ロジックを処理可能
    • ジョブ間の依存関係定義、複数ジョブの並列実行
    • Durable taskによる中間結果の保存と復旧をサポート
      • 耐久性のある関数実行: 障害時に中間状態をキャッシュし、再実行で復元
      • Durable SleepDurable 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件のコメント

 
halfenif 2025-04-08

2時間ほどテストしてみて書いています。

  • MQを構築しているので、Postgresベースで何か新しいものなのかと思って試してみたが、RabbitMQが必要なのを見て少しがっかりした
  • k8sの観点ではないため、docker-compose.yaml を podman(+Arch)で立ち上げた
  • Postgresを別途使いたかったので、もう少し設定が必要だったが、最終的に "SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER: Invalid certificate verification context" に遭遇して中断した
  • 途中で何か問題が起きると、Postgres databaseをdropして最初からやり直す必要があった
  • API Keyを毎回作成しなければならないのに、Web画面上ではKey全体が表示されないため、開発者ツールを使って抽出しなければならなかった.
 
GN⁺ 2025-04-07
Hacker Newsのコメント
  • 同じくpgベースのPythonジョブランナーであるProcrastinateやChancyと比べて、何が違うのか気になる

  • とても興味深い内容

    • FOR UPDATE SKIP LOCKED が25kクエリ/秒までスケールしないとのことだが、どの時点で限界に達したのか気になる
    • バッファリングされた読み書きと、すべての大規模テーブルをIDカラムに切り替えたことについて気になる
    • これらが FOR UPDATE SKIP LOCKED を用途に合わせてスケールさせる解決策の一部だったのか気になる
  • キューの処理(ジョブをキューに入れて完了としてマークすること)が、自分のビジネスロジックと同じトランザクション内で発生するのか気になる

    • データベースベースのキューの中核的な機能だと思う
    • リトライに関するロジックを単純化できる
    • ジョブ実行時にも同じ問題が起こりうる
    • この時点ではSQSを使ったほうがよいかもしれない
  • イベント/ワークフローベースのアプリケーションを設計中で、このソリューションは非常に有望に見える

    • Temporalも検討したが、完全にしっくりはこなかった
    • オープンソースライセンスがアプリケーション設計への安心感を与えてくれる
    • CELのような条件式を探していた
  • Hatchetアーキテクチャにおける6つの改善により、あらゆる面でパフォーマンスが向上している

    • 時系列テーブルのレンジベースパーティショニング
    • ジョブイベントのハッシュベースパーティショニング
    • 監視テーブルとキューの分離
    • バッファリングされた読み書き
    • すべての大規模テーブルをIDカラムに切り替え
    • Postgresトリガーの積極的な活用
    • マニュアルを読めば驚くようなことができる
  • READMEは、ダークモードを使うユーザーのほうが多いと想定しているようだ

    • ロゴが白いので、ダークモードがないと見えない
    • GitHubの統計を見ると面白そう
  • Postgresをメッセージキューとして使う際、巨大なペイロード(50MB超)を扱う問題に直面したことがある

    • 解決策は、非ログテーブルと定期的なフルVACUUMだった
    • Postgresの専門家ではないが、この問題を解決したのか気になる
  • 15分ほどドキュメントを確認したうえでフィードバックする

    • ライトモード、オープンソース、ロギング、DXインターフェースは良い
    • Hello Worldの例は実際のシナリオに置き換えたほうがよさそう
    • マルチステップジョブを含むワークフローのコードは直感的ではない
    • Hatchetの考え方、パターン、用語に慣れる必要がある
    • 顧客にとって簡単にする努力が不足しているように見える
    • エンジニアリング記事には意味があるが、顧客はクラウドインフラには関心がない
    • ワークフロー市場には多くの選択肢があるため、最後には書き直しやピボットが必要になる可能性が高い
    • 自動化の導入体験に注力し、人々が簡単に持ち込んで設定できるようにすべき
    • ワークフローをJSONとしてシリアライズするのは難しい
    • Hatchetのワークフローを他社へ簡単に移行できるようにすべき
  • v1リリースおめでとう

    • Hatchetをほぼ1年間使っており、6か月前に本番環境へデプロイした
    • オープンソースのサポートとクイックスタートが素晴らしい
    • システムに注がれたエンジニアリングの努力がよく分かる
  • 第一印象は良い。リリースおめでとう

    • いくつか質問がある
    • 永続的なジョブをサポートしているのか気になる
    • ジョブの入力と出力がどこに保存されるのか気になる
    • PostgreSQLインスタンスのサイズとI/Oメトリクスに基づいて、システムが1秒あたりに処理できるジョブ数を見積もれるのか気になる
    • さまざまなツールを評価中で、Hatchetがどんな感じなのか知りたい
    • できるだけ少ないボイラープレートで扱えるツールを探している