Windmill - すばやくセルフホスティングできるオープンソースのワークフローエンジン
(windmill.dev)- ベンチマークを通じて、Windmill が Airflow、Prefect、Temporal などの他のワークフローエンジンと比べて、最も高速にセルフホスティング可能なオープンソースのワークフローエンジンであることを実証
- Windmill は多様なプログラミング言語をサポートし、複雑な SDK やデプロイ手順なしで、数分でワークフローを構築・テストできる統合開発環境を提供
- Airflow/Prefect は 1 つのランタイム(Python)のみをサポートするが、Windmill は Python、Typescript、Go、Bash をサポートし、BigQuery、Snowflake、Mysql、Postgresql に対する直接 SQL クエリをサポート
- Temporal と比較すると、Temporal はジョブキュー管理に特化している一方、Windmill はイベント待機(reactivity)機能を含み、耐久性のある実行エンジンとしても機能
ワークフローエンジンとジョブキューの違い
- ジョブキューはワークフローエンジンの中核であり、多くの開発者は独自ロジックを構築して、ワークフローエンジンを使わずにジョブキューを活用している
- SQS、Kafka、Redis with RMSQ、Orban など、さまざまなキュー実装がすでに存在
- 多くの開発者はジョブキュー中心に自分のロジックを構築し、ワークフローエンジンに近い満足感を得ている(自分専用のワークフローエンジンを作るようなもの)
「All-Inclusive」ワークフローエンジンとは何か
- ワークフローエンジンは、タスクの依存関係の制約を守りながら、分散システム上でワークフローを調整してタスクを完了させる
- ワークフローエンジンの 5 つの主な利点:
- リソース割り当て: クラスターを最大限に活用でき、すべてのタスクを異なるリソース(CPU、メモリ、GPU)を持つ別々のワーカーに割り当て、ワーカーの全リソースをタスクに使えるよう保証できる
- 並列処理: ワークフローの制約条件により一部のステップを並列実行できる場合(ブランチ、for ループ)、ワークフローエンジンはそれらのステップをスレッドだけでなく、物理的に分離された複数のワーカーにもディスパッチできる
- 可観測性: すべてのタスクには固有 ID があり、入力、ログ、出力、状態を検査できるなど、個別に観測可能
- 耐久性: 想定外の理由でマシンが停止したり副作用が発生した場合、ワークフローを再開する必要がある
- ワークフローは予期しないイベントが発生したとき、できるだけ早く再開できなければならず、これを達成する 1 つの方法が、同じタスクを複数回実行しても 1 回と同じ効果になる冪等性
- 確実でない場合は、フロー全体を結果を伴わずに再実行する。これは通常、タスクに付与された固有 ID をログの一部として用い、副作用をスキップするログファイルと SDK を使って実装される
- もう 1 つの方法は、フロー状態のトランザクションスナップショットを生成し、各タスクの後に状態を保存すること。再開時には最後の状態を再読み込みし、そこから実行すればよい
- Windmill は後者を採用しており、必要であればユーザー空間で冪等性を実装できると想定している
- 反応性: Webhook や承認のようなイベントに応じて、再び再開されるまでフローを一時停止する
Windmill の高速性の秘訣
- Windmill は Postgresql と Rust を活用し、シンプルな設計と最適化によって効率を最大化
システム設計とキュー
- Windmill は Rust でコンパイルされた単一バイナリを提供し、ワーカーとサーバーは Postgresql に接続されているが、互いには接続されていない
- Postgresql 自体の上にキューを実装し、タスクは API を通じて外部からトリガーできる
状態
- ワークフローエンジンはタスクを有限状態機械(FSM)として表現し、Windmill はフロー全体そのものを FSM として扱う
データ受け渡し
- Windmill はデータ受け渡しのために、JavaScript 式、テンポラリフォルダー共有、S3 統合など多様な方法を提供
ワーカー効率
- Windmill のワーカーは一度に 1 つのタスクを処理し、コンテナなしでタスクを実行することで性能を向上させる
結論
- Windmill は Postgresql と Rust を基盤に、シンプルな設計と最適化によって非常に高速な性能を提供する、オープンソースかつセルフホスティング可能なサーバーレスランタイムおよびプラットフォームである
GN⁺の意見
この文章で最も重要な点は、Windmill が多様なプログラミング言語をサポートし、複雑な SDK やデプロイ手順なしで素早くワークフローを構築・テストできる統合開発環境を提供していることだ。こうした特徴はソフトウェア開発者にとって非常に有用であり、Windmill の高い性能と効率性は、開発者がより良い製品をより早くリリースする助けになるだろう。この文章は開発者にとって興味深い内容を含んでおり、特に独自のワークフローエンジンを構築したい人や、既存エンジンを最適化したい人にとって魅力的だろう。
2件のコメント
Windmill - Pythonベースの社内向けアプリ作成および自動化プラットフォームのオープンソース
昨年5月に少し公開されたのですが、開発者がまだ公開する準備ができていないと言いながら「10分後にYCのインタビューを受けます!」として、その後YCに通過したとコメントしていたんですよね。
YC通過後、1年半走ってから正式に製品をローンチしたわけですね。
Hacker Newsの意見