n 個 (通常は n < 10 ですが、スケーリングする必要があります) のプロセスが異なるマシンで実行され、RabbitMQ を使用して amqp を介して通信しています。プロセスは通常長時間実行され、任意の言語で実装できます (ただし、ほとんどは Java/Python です)。
各プロセスには、多数の入力 (数値/文字列) が必要であり、多数の出力 (数値または文字列のみ) が生成されます。プロセスの実行は非同期で行われます。つまり、入力キューにメッセージを送信し、出力キューによってトリガーされるコールバックを待機します。
理想的には、ユーザーがいくつかの入力と必要な出力を指定すると、システムは次のことを行う必要があります。
- 必要なプロセスを検出し、依存関係グラフを生成する
- トポロジ的にグラフをソートして実行します。ノード遷移はイベント駆動型である必要があります
入力の準備ができている場合、ノードは起動する必要があり、ブランチごとの並列処理が可能になります。今のところサイクルはないと仮定できますが、最終的にはサイクルが発生します (たとえば、出力が変化しなくなるまで、2 つのプロセスを反復する必要がある場合があります)。
これは、(データ) フロー プログラミング (ここで前に説明した) からの既知の問題である必要があり、車輪の再発明を避けたいと考えています。私はpythonソリューションを好み、検索はTrellisとPypesにつながります。Trellis は開発されていませんが、サイクルをサポートしているようですが、pypes はサポートしていません。また、パイプがどの程度活発に開発されているかもわかりません。
さらに検索すると、イベント ベースのプログラミング フレームワークの全リストが表示されますが、そのどれについても私は特に詳しく知りません。もちろんTavernaやKNIMEのようなワークフロー環境もありますが、それはやり過ぎのようです。
この種の問題や言及されたライブラリに取り組んだ経験のある人はいますか?
編集:私が見つけた他のライブラリは次のとおりです。