16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DeNA IPプラットフォーム事業部Advent Calendar 2017

Day 6

Express.jsで作ったアプリをクラスタ化する

Last updated at Posted at 2016-02-13

Node.js製Webアプリの問題点

Node.jsは、その性質上シングルスレッドで処理を実行するので、CPUを1つしか使えません。
しかし、最近のマシンはマルチコアであることが多く、Node.jsを使ったアプリが、その性能を活かしきるができないのは、大変もったいないです。
そこで、ベストなアプローチとして、アプリのクラスタ化を行うことでマルチコアの性能を引き出すことができるようになります。

クラスタ化 is 何

アプリの親となるプロセスをforkして、子となるプロセスを作る。
結果、負荷を分散することができる。

おそらく、「1つCPUでやるより、4つのCPUで処理したほうが早いよね!そうしよう!」がクラスタ化だと思えば良いっぽい。(クアッドコアのマシンの場合ね)

express-clusterを使う

cluster化を行うモジュールはいくつか選択肢があったが、express-clusterを使うことにした。
Flipboard社が作っているモジュールであるということで、そこそこに安定して使えるだろうと判断した。

使い方も至ってシンプルで、以下のように書くだけでアプリのクラスタ化ができる。

'use strict';

const http = require('http');
const express = require('express');
const cluster = require('express-cluster');

let app = express();
let server = http.createServer(app);

let host = process.env.HOST || '127.0.0.1';
let port = process.env.PORT || 3000;

cluster(function(worker) {
  server.listen(port, host, () => {
    console.log('Server running on http://' + host + ':' + port + ' with pid ' + process.pid + ' with wid ' + worker.id);
  });
});

他の選択肢

Cluster

この他にも、Node.js v0.6で追加されたClusterモジュールを使うことによって、アプリをクラスタ化することができる。しかし、結構自分で色々書く必要がありそうで、ダルそう。

throng

throng」は書くつもり無かったんだけど、ふと久々にリポジトリを見に行くと、つい数日前にv2がリリースされていたので面白半分で書いてみる。
READMEをサクッと見た感じだと、とてもシンプルに書けることが特徴のようだ。

まとめ

まぁ、アプローチの仕方はなんであれ、Node.jsで作ったアプリはクラスタ化しましょうという話でした。

16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?