45

node.js アプリケーションの作成は非常に簡単です。

var app = require('express')();
app.get('/',function(req,res){
    res.send("Hello world!");
});

しかし、人々がアプリケーションに夢中になりHello World!、リソースを使い果たしてしまったとします。この例を実際にどのようにスケールアップできますか? はい、異なるコンピューターで複数の node.js インスタンスを開くことができるため、わかりませんが、誰かがhttp://your_site.com/にアクセスすると、その特定のマシン、特定のポート、特定のノードプロセスを直接目指します。では、どうやって?

4

4 に答える 4

38

対処法はいろいろありますが、まとめると以下の2点です。

  1. サーバーごとにより多くのコアを使用できる
  2. 複数のサーバーを超えてスケ​​ーリングできること。

ノードクラスタ

最初のオプションでは、2 番目のオプションnode-clusterと同じソリューションを使用できます。 node-cluster( http://nodejs.org/api/cluster.html ) は基本的に、ノード プロセスを 1 つのマスターと複数のワーカーにフォークする組み込みの方法です。通常、1 つのマスターと n-1 から n のワーカー (n は使用可能なコアの数) が必要です。

ロードバランサ

2 番目のオプションは、複数のワーカー (同じサーバー上またはサーバー間) にリクエストを分散するロード バランサーを使用することです。

ここにも複数のオプションがあります。ここにいくつかあります:

もう 1 つ、複数のプロセスがリクエストを処理し始めると、メモリを使用して状態を保存できなくなります。共有状態を保存するには追加のサービスが必要になります。Redis ( http://redis.io ) が一般的な選択肢ですが、 no は唯一のものを意味します。

cloudfoundry、heroku などのサービスを使用している場合は、それらがセットアップしてくれるので、アプリのロジック (およびサービスを使用して共有状態を処理すること) だけを気にする必要があります。

于 2013-03-15T06:36:19.407 に答える
2

複数のマシンを使用する基本的な方法は、それらをロード バランサーの背後に置き、すべてのトラフィックをロード バランサーに向けることです。そうすれば、誰かがhttp://my_domain.comにアクセスすると、ロード バランサー マシンがポイントされます。ロード バランサーの唯一の目的 (この例ではとにかく、理論的にはもっと多くのことができます) は、アプリケーションを実行している特定のマシンにトラフィックを委任することです。これは、x 台のマシンでアプリケーションを実行できることを意味しますが、外部マシン (この場合はブラウザー) はロード バランサーのアドレスにアクセスして、そのうちの 1 つにアクセスできます。クライアントは、どのマシンが実際にその要求を処理しているかを知りません (そして知る必要もありません)。AWSを使用している場合、これを設定して管理するのは非常に簡単です。パスカルの回答には、ここでのオプションの詳細が記載されていることに注意してください。

特に Node では、Node Clusterモジュールを参照することをお勧めします。このモジュールの経験はあまりありませんが、同じポートを共有する 1 台のマシンでアプリケーションの複数のプロセスを生成できるはずです。また、それはまだ実験段階であり、信頼性が高いかどうかはわかりません。

于 2013-03-15T06:36:41.300 に答える