Show HN: Waymark – 再実行ではなくジョブをコンパイルするワークフローエンジン
Show HN: Waymark – A workflow engine that compiles jobs instead of replaying (github.com)
要約
Waymarkは、TemporalやDBOSに似た機能を持つオープンソースの耐久性実行ライブラリです。通常のコードでビジネスロジックを記述でき、ASTをウォークしてスタックレスVMバイトコードにコンパイルすることで、実行前にローカルでエラーを検出できます。Postgresのみを必要とし、高いスループットを実現します。
全文翻訳
皆さん、こんにちは!@mozgiiiと私は、この1年近くWaymarkに取り組んできました。Waymarkは、TemporalやDBOSと同様の機能を持つオープンソースの耐久性実行ライブラリです。
数年前に、ヘビーなpubsubアーキテクチャを持つ会社で働いた後、耐久性実行に夢中になりました。特定のタスク設計や特殊な構文を強制するジョブオーケストレーターと比較して、これらの耐久性ライブラリの多くは、通常のコードでビジネスロジックを記述できます。
asyncio.gatherでタスクを並列化したり、forループ、条件分岐を使ったりでき、ランタイムがクラスター全体に効率的に分散する方法を考えます。しかし、現在のソリューションの多くは、ヘビーなブローカーや、ワークフローロジックの決定論的な実装を保証しようとするランタイムハックを必要とし、開始するために全く新しいエコシステムを学ぶ必要があるように感じます。
Waymarkにおけるいくつかのユニークな設計上の決定:
— ジョブは通常のコード(現在はPythonですが、JSも近日対応予定)で記述します。制御フローを実行時にそのまま実行するのではなく、過去の状態を再実行するためにインタープリターを起動する必要がある代わりに、コードを直接コンパイルします。ASTをウォークし、ロジックをスタックレスVMバイトコードにマッピングします。変数、条件分岐、await、sleep、ヘルパー関数、ループなど、ワークフローロジックで期待される基本的な機能をサポートしています。
— 言語のサブセットをコンパイルするため、本番環境で実行される前に、ワークフローのエラーをローカルでプロアクティブにフラグ付けできます。
— タスクブローカーとしてPostgresのみが必要です。その強みと限界とうまく連携するように設計を調整するのに多くの時間を費やしました。現在のベンチマークでは、毎秒約1500ワークフローを示していますが、まだ最適化作業が必要です。
— アクションはFastAPIの依存性注入構文とプラグアンドプレイで連携できます。したがって、すでに型ヒント/DIに基づいたエコシステムがある場合、シームレスに統合できるはずです。
これにより、1台のマシンまたはクラスター全体でワークフローを並列化できます。ノードあたりの作業の大部分は、中央のRustコアによって行われます。これは、ワークフローを分散してすべてのコアを適切に飽和させます。ブローカー、Webアプリ、ランタイムとして、できるだけ多くの機能を含めることを目指しています。
何に使用するか? エージェントを制御するランナーループとして非常にうまく機能しますが、バックグラウンドで開始する必要があるほぼすべてのタスクにも適しています。APIコードの記述方法を大幅に変更しました。現時点では、ほとんどのフロントエンドアクションは、バックグラウンドジョブを開始するシンプルなRESTエンドポイントにプッシュするだけです。
https://waymark.shサイトをインタラクティブにするために、恥ずかしいほどの時間を費やしました。おそらく、さらに学ぶのに最適な場所です。Pythonサポートから開始し、次にどの言語をリリースするかについてコミュニティからの入力を求めています。皆様のご意見をお聞かせいただければ幸いです!