このトピックについて触れている古い投稿を見てきましたが、現在の近代的なアプローチとは何かを知りたいと思いました。
ユースケースは次のとおりです。(1)長時間実行するタスクを実行することを想定しています。 ビデオファイルで、60秒と言う、 いう jspm install
最大60秒かかることがあります。 (2)タスクを分割することはできません。
その他の要件は次のとおりです。
私はこれらの解決策が言及されているのを見ました:
現代の標準ベースのアプローチはどれですか?また、nodejsがこのタイプのタスクに適していない場合は、それも有効な答えです。
短い答えは次のとおりです。
Nodejs serverを意味する場合、答えはノーこの使用例の場合です。 NodejsのシングルスレッドイベントはCPUにバインドされたタスクを処理できないため、別のプロセスまたはスレッドに作業を外部委託することは理にかなっています。ただし、CPUにバインドされたタスクが長時間実行されるこのユースケースでは、タスクをキューイングする方法を見つけることは理にかなっています。つまり、ワーカーキューを使用することは理にかなっています。
ただし、JSコード(jspm API
)、nodejsを使用するワーカーキューを使用することは理にかなっています。したがって、解決策は次のとおりです。(1)ワーカーキューにタスクをキューに入れるだけのnodejsサーバーを使用します。 (2)nodejsワーカーキュー(kue
など)を使用して実際の作業を行います。 cluster
を使用して、異なるCPUに作業を分散します。結果は、数百のリクエストを処理できる単純なsingleサーバーです(窒息なし)。 (まあ、ほとんど、以下の注を参照してください...)
注意:
kue
のようなdb-backedワーカーキューを使用すると、これは簡単です---各ポイントサーバーが同じdbを指すようにするだけです)。あなたはCPUにバインドされたタスクと長期実行のタスクについて言及していますが、それは明らかにnode.jsのことではありません。また、数百の同時タスクについても触れています。
Gearman job server のようなものを見るかもしれません-それは専用のソリューションです。
または、Node.jsでリクエストを管理して、実際のジョブ実行を行わないようにすることもできます。
最適なパフォーマンスを下回ることが比較的許容範囲であり、コードをJavaScriptに保持したい場合でも、それを実行できますが、何らかのジョブキューが必要です-RedisやRabbitMQなどが思い浮かびます。
実行時間に関係なく、ジョブキューは長時間実行される数百/秒のタスクにとって必須の要件になると思います。他のサーバー/サービス/マシンでこのジョブを生成できる場合を除いて、気にしないでください。Node.jsAPIは、ジョブクラスターのフロントレイヤーおよび管理レイヤーにすぎず、Node.jsはジョブに完全に対応しています。そして、あなたはそのジョブクラスターに集中する必要があり、それからあなたはより良い質問をすることができます。
さて、node.js
は、ここでも役立ちます。何百ものタスクを、それらがどこから来たかに応じて管理および保持するのに役立ちます(つまり、特定のユーザーに対してのみジョブサーバーへのリクエストの通過を許可するか、「一時停止」を制限します。 "他の人への機能など。