複数のワーカープロセスを起動して処理を分散させたいといったニーズがあると思います。そのときに重要なclusterモジュールについて、いつも業務で使っていますが、さらなる理解のため、整理してみます。この記事は、Node.jsバージョンv6.x系を前提とした話となります。v0.6時のもので古いです)が非常に参考になります。blog.nodejs.jpclusterモジュールによるプロセス間通信には2つの方法があり、それぞれ紹介していきます。マスタープロセスによるロードバランシングこの方法では、マスタープロセスは指定したポートで待ち受けて、新たなコネクションを受け付けます。リクエストがあるたびに、マスタープロセスはラウンドロビン方式でワーカープロセスに処理を委譲します。この方法の場合、リクエストが来るたびにマスタープロセスがロードバランサーとして仕事をするために、同時アクセス数が増加したときに、サーバ全体のスループットが、マスタープロセスの上限に依存します。この方法は、上記の問題から、webサーバにおいてあまり利用されることがなく、複数マシン間で処理を分散する場合のリバースプロキシとして用いられることが多いです。(v0.11.2以降デフォルト)マスタープロセスからソケットを作成し、ワーカプロセスに接続済みソケットを渡してクライアントとワーカプロセス間で接続を行う方法です。v0.11.2からUnix系プラットフォーム(windows以外のこと)でデフォルトになりました。理論的には、この方法が最も良いパフォーマンスを提供します。clusterモジュールを実際に使ってみる実際にclusterモジュールを使って動かしてみるのが理解しやすいので、公式ドキュメントのサンプルを参考にwebサーバを作ってみました。この値でマスター・ワーカープロセスを判断しています。マスタープロセスの場合、CPUコア数分のワーカープロセスをforkする処理をおこなっており、それぞれのワーカープロセスに対して、プロセス間メッセージを受信したときのmessageイベントと、ワーカープロセスが死んだときのexitイベントに対するハンドラ関数をそれぞれセットしています。worldを返すhttpサーバの処理を行っています。process.sendで、マスタープロセスに対してリクエストを受け付けたことを通知しています。マスタープロセスでは、このnotifyRequestコマンドを受け取ると、リクエストカウントをインクリメントして、1000ミリ秒毎にリクエストカウントを表示させています。実際にサーバを起動してみて、挙動を確認します。先程書いたプログラムを/Users/testuser/Documents/nodejs-sandbox配下のcluster-test.jsに作成し、ターミナルで実行します。0これでlocalhostの8000番ポートでリクエストを待ち受けている状態になりました。ためしに、起動されているnodeプロセスを確認すると、しっかりとCPUコア数分(8コア)ワーカープロセスが立ち上がっていることが確認できます。cluster-test.jsこの状態のまま、クライアント用にターミナルをもう1つ立ち上げ、curlでhttpリクエストを送るとレスポンスが返ってくるのを確認できます。worldさらに、先程から起動していたサーバ側のターミナルには、リクエストカウントが1増えていることが確認できます。1以上のように、clusterモジュールを使って、複数プロセスでwebサーバを立ち上げることができました。clusterはNode.jsにおける負荷分散で欠かせないものなのでしっかりと理解することが重要かと思います。config.'月別アーカイブ参加グループプログラミングテクノロジーはてなブログをはじめよう!kaktsさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。