問題タブ [node-cluster]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - ノード クラスタで Sails.js を実行することは可能ですか?
私は現在、ここに示されているように、ノード js バニラ クラスター セットアップを使用して高速サーバーを実行しています。
http://rowanmanning.com/posts/node-cluster-and-express/
サーバーをsails.jsに移動したいのですが、ノードクラスターをサポートするように帆を構成する方法を誰かが知っているかどうか疑問に思っています(プロキシなし、単純なクラスターのみ)。
テキサス州、
ショーン。
javascript - Node JS - ワーカー クラスターの最後の例外をログに記録する
Node JS サーバー (0.10.30) とそのクラスター機能に取り組んでいます。ワーカーが終了するたびに、「終了」イベントをキャッチし、新しいワーカーを再起動します。例外や致命的なエラーなど、ワーカーが終了した理由も (マスター クラスターで) ログに記録したいと思います。
どうやってするか?
私の app.js ファイルは次のようになります。
ありがとう、エレズ
node.js - 同じアプリ内の Express ノード モジュールとクラスター ノード モジュール
ユーザーがブラウザのファイルをサーバーにアップロードできるアプリを作成しています。
express
プロジェクトのフォルダーに入力することから始めました。その速達ですべてのフォルダなどを作成しました。ポートのような多くのものを開始する www ファイルを含む bin フォルダーを作成しました。
最初はコアが1つしかなかったので、次のようにしていました:
最終的に、より多くのクライアント要求に応答できるようにするために、複数のコアを備えたマシンを使用する必要がありました。だから私はクラスターモジュールを使用しようとしています。
それに応じてコードを変更しました:
問題は、これを行うと、コンソールに次のエラーが表示されることです。
実行: node ./bin/www 結果:
これは、マスターのフォークされた子の中にコード全体を配置したために発生します。なぜこれが起こるのか、どうすれば修正できるのか誰でも知っていますか?
編集: ここでは、ポートとその他の構成が設定されている bin/www ファイルを確認できます。
json - ノード内のクラスターに循環 JSON を渡す
Sequelize を使用してマルチプロセス ノードを取得したいと考えています。Sequelize の sync メソッドを呼び出して orm を一度に複数回準備することはできないため (データベースのロック)、マスター クラスターで sync メソッドを呼び出すことにしました。それが完了したら、プロセスを fork して CPU 数を一致させます。
しかし、フォーク間でグローバル変数を明らかに共有することはできません。環境 ( http://nodejs.org/api/cluster.html#cluster_cluster_fork_env ) または( http://nodejs.org/api/cluster.html#cluster_cluster_fork_env )を介して Sequelize 変数を渡そうとするとworker.message(data)
、nodejs.org/api/cluster.html#cluster_worker_send_message_sendhandle )、循環 JSON を送信しません。process.on
複雑な/循環オブジェクトを子プロセスに渡す方法を知りたいです。
誰にもアイデアはありますか?
node.js - SailsJs でノード クラスター モジュールを使用する: EADDRINUSE
CPU を集中的に使用するタスクを処理する必要がある SailsJs ( http://sailsjs.org/ ) ベースのアプリケーションがあります。つまり、cluster
( https://nodejs.org/api/cluster.html ) モジュールを使用して、これらのタスクの処理をワーカー プロセスに委譲し、Sails アプリケーションのメイン イベント ループがブロックされないようにしたいと考えています (そして、通常どおりリクエストに対応できます)。
ワーカーを作成すると、EADDRINUSE
Sails が再度実行して同じポートにバインドしようとするため、エラーが発生します。
サンプルコード:
上記を実行すると、Sails アプリが起動し、起動時に 2 つのワーカーがアプリをさらに 2 回起動しようとします。これにより、次の 2 つのエラーが発生します。
これを回避する方法はありますか?または、この問題に取り組む別の方法はありますか?
node.js - ノード クラスタを使用した単一の TCP ソケットのラウンド ロビン負荷分散
コード
TCP トラフィックをリッスンし、バイナリ データを JSON 形式に解析するクラスター ノード アプリケーションがあります。
しかし、ここに問題があります。すべての着信トラフィックは、単一の永続的な接続を通過します。
私が理解しているように、クラスターはワーカー間で新しいソケットを分散することによって単一ポートの負荷を分散しますが、単一ソケットの負荷をワーカー間で分散するネイティブな方法はありません。
そのために、着信接続を受け入れてメッセージをセグメント化するようにクラスター マスターをセットアップしました。次に、ラウンド ロビン方式でクラスター ワーカーにメッセージを明示的に渡します。メッセージのセグメント化を担当するストリームが新しいメッセージを発行するときsend
、次のワーカー/パーサーへのメッセージにクラスター メッセージング API を使用するだけです。
ワーカーはメッセージを解析し、それを使用して HTTP 要求を作成し、クラスターsend
API を使用してgateway
(上記のコードの最後のブロック) に応答します。
問題
システムに負荷がかかると、奇妙で予測不可能な遅延パターンが発生します。すべての CPU/メモリ/ネットワークの測定値は正常であり、インフラストラクチャのボトルネックを示していません。
質問
ご覧のとおり、特定のワーカーの実際のスループットに関係なく、作業はワーカー間で均等に分散されます。私の推測では、これがレイテンシ スパイクの原因であるということです。おそらく、どこかで個々のワーカーがバックアップされているのでしょう。
これを原理的に、または経験的に確認する方法はありますか? おそらくそれは希望的観測にすぎませんが、このアプローチは単純に平均化されるべきであり、worker-pull 型のアルゴリズムは必要ないように思われます。(解析が完了した後、HTTP 応答を受信した後、ゲートウェイに応答を送信した後など、ワーカーが解放されたと見なすのに最適な時期を判断できないため、これは特に難しいようです。)
私は CPU スケジューリングについて十分に理解していないので、私が赤ニシンを追いかけているのか、それともこれが間違いなく問題を引き起こしている貧弱なアルゴリズムなのかを知ることができません。(もしそうなら、それを改善する方法についてのアイデアは大歓迎です。)
node.js - zmq ノード js クラスタ
次の問題で輪になっていきます.zmq関連のコードを別のモジュールに分離したい.www.jsファイルで以下のようなクラスターでエクスプレスアプリを開始しました.
私のzmq.jsファイルで、プッシュソケットを作成したいのですが、それを1つのポートにバインドすることはできません..それはbind not connectであるため、最初のクラスターフォークの後にエラーが発生します。
ソケットコードを www.js ファイルに移動できますが、ソケットを使用する必要があるときはいつでも www ファイルを要求する必要があります。すべての zmq 関連のものを別のファイルに保存したい。それを機能させる方法はありますか?
より詳しい情報。ソケットで bind を 1 回だけ呼び出し、ソケットをモジュール/グローバル スコープに保持しようとしました。それを使用してメッセージを送信すると、エラーは発生しませんが、プル ソケットでメッセージを受信しません。送信時に受け取るメッセージは、bind を呼び出したプロセスに対するものだけです。プロセスの残りの部分では、ソケットは null ではありませんが、何もしていないようです。
www.js
zm.js
バインディング マスターまたはフォーク プロセスで試しましたが、どれも機能していないようです。
更新: 各 fork 呼び出しで順番にソケットを異なるポートにバインドすることで、当面は機能していますが、それが最善の方法ではないことは確かです。より良い解決策が見つかった場合、または他の誰かが教えてください。