Express フレームワークを使用して Node.js アプリケーションに取り組んでおり、クラスターを使用して負荷を処理しています。テストでは、何らかの理由でプロセスの 1 つがロードに時間がかかっている場合、他の後続のリクエストにも影響することがわかりました。このための簡単なテスト ケースを作成しました。
https://gist.github.com/anonymous/7325816
「node app.js」を使用して例を実行しhttp://localhost:8080/slow
、1 つのブラウザー ウィンドウで (ブロッキング計算に数秒かかる)ロードを試み、http://localhost:8080/fast
すぐに別のウィンドウでロードしようとすると、後者もロードに数秒かかります。
私の理解が正しければ、これは計算を実行している同じプロセスが新しいリクエストを処理しようとしているためです: しかし、これを回避するにはどうすればよいでしょうか?
編集:
/slow を実行した後に Siege を実行した HTTP 要求の出力を次に示します。
HTTP/1.1 200 0.01 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 6.32 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 0.01 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 6.84 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 0.00 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 7.41 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 0.00 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 9.04 secs: 89 bytes ==> GET /fast
編集2:
問題は、OSX で実行されている Node.js の最新の Git バージョン (v0.11.9-pre) にありました。現在のリリース v0.10.21 を実行すると、ブロックされたプロセスにリクエストを転送することなく正常に動作します。@gotenさん、提案ありがとうございます!