14 ポイント 投稿者 GN⁺ 2023-11-24 | 2件のコメント | WhatsAppで共有
  • ベンチマークを通じて、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件のコメント

 
xguru 2023-11-24

Windmill - Pythonベースの社内向けアプリ作成および自動化プラットフォームのオープンソース

昨年5月に少し公開されたのですが、開発者がまだ公開する準備ができていないと言いながら「10分後にYCのインタビューを受けます!」として、その後YCに通過したとコメントしていたんですよね。
YC通過後、1年半走ってから正式に製品をローンチしたわけですね。

 
GN⁺ 2023-11-24
Hacker Newsの意見
  • Windmill の開発者たちは、「一つのことをうまくやれ」という助言を真逆に実行したように見える。Windmill.dev を見ても、このソフトウェアが何に使われるのか明確ではない。Retool、Airflow、Temporal の競合なのか、ノーコードのワークフロービルダーなのか、ドラッグ&ドロップの UI ビルダーなのか、オンライン IDE なのか、数多くの統合機能を備えたものなのか、混乱する。
  • ワークフローエンジンの速度が、ある水準を超えて重要なのか疑問。多くのワークフローは長時間実行されるタスクを含むため、重要なのはマルチテナンシー、つまりユーザーが望むだけのジョブを支えつつ、それぞれのジョブがワークフローエンジン内で唯一のもののようにスケジュール・実行される能力だ。
  • ビジネスプロセスを、スプレッドシート、個人メール、管理者の記憶から、Web フォーム、アップロード、自動化メール、ダッシュボードへ移したい。Airtable、Smartsheet、Budibase などを見てきたが、どちらかといえばプロジェクト管理により重点を置いているようで、カレンダー連携やメール、定期実行スクリプトについては満足できない。データ用の API がある、あるいは必要ならコーディングでき、管理者がスプレッドシートビューで一部の UI 作業を行い、プログラマーが統合を処理できるようなローコードのアプローチを好む。
  • これほど多くの時間と労力をかけて文章を書いていながら、スペルチェッカーを一度も使わない人がいることに驚く。2023 年にも、デフォルトでスペルチェックをしないテキストエディタを使っている人がいるのだろうか。
  • オープンソースだと言いながら、SSO ユーザーに 10 人の制限があるのは混乱する。オープンソースは通常コードの修正を認めるが、どうやって 10 人制限を強制しているのか疑問だ。ソースコードを見ると、ライセンスチェックのコードがある。オープンソースなら誰でもそのコードを削除できるのではないか? 修正できないのなら、それは「ソース公開」であって「オープンソース」ではない。プロジェクトは素晴らしく見えるので上司に提案したかったが、この点をどう説明すればよいのかわからない。
  • Windmill は HN でのローンチ時から追っていて、1 年弱前からより多く使い始めた。Discord サーバーは非常に活発で、Ruben は週末でも数分以内に返信し、バグを修正してくれる。
  • Windmill システムを使いたいが、ライセンスの問題でためらっている。ソフトウェアの大部分は AGPLv3 の下にあるが、README の商用ライセンスの節は AGPL に対する広範な解釈を示唆している。Windmill を通じて機能を構築するには、製品も AGPLv3 でなければならないというのは、API 経由の呼び出しだけでも著作権法が適用されうることを意味する。これは Windmill を「完全なオープンソース」と位置づけるのは技術的には正しいとしても、実際には「ソース公開」により近いことを意味する。Windmill がライセンスをこのように解釈してほしくないのであれば、明確にすべきだ。
  • Windmill は素晴らしい。セルフホストでき、開発者体験(Developer Experience、DX)を大切にしているべきだ。職場では使う必要がなかったが、自宅で小さな Web クローラーや yt-dlp のジョブを実行するのに使っている。とても楽しいツールだ。
  • ライセンスについて混乱している。
  • コードをデータベースに保存して Web IDE で編集することと、Git にコードをチェックインし、通常の開発およびピアレビューのプロセスを通してのみ変更することとのバランスをどう取るか、まだ答えを見つけられていない。Windmill は主にコードをデータベースに保存するが、Git リポジトリと同期できる API を提供している。特定のスクリプト/機能/シークレットを、提供されたリポジトリから取り込んだワークフローのみに制限するルールを強制できる仕組みがあるのか気になる。