nginx / node.js / postgres、スケーラビリティの問題ですか?

nginx / node.js / postgres、スケーラビリティの問題ですか?

次のアプリを実行しています:

  • フロントエンドとして nginx のインスタンス 1 つ (静的ファイルの提供)
  • バックエンド用の node.js アプリケーションのクラスター (cluster および expressjs モジュールを使用)
  • DBとしてPostgresのインスタンス1つ

アプリケーションに次のスケーラビリティが必要な場合 (HTTP/REST リクエストのみ)、このアーキテクチャで十分でしょうか。

  • 1 秒あたり 500 リクエスト (各リクエストは DB からデータを取得するだけであり、それらのデータは数 ko になる可能性があり、取得後に大きな計算は必要ありません)。

  • 20000人のユーザーが同時に接続

ボトルネックはどこにあるのでしょうか?

答え1

nginx の 1 つのインスタンスは、1 秒あたり数千の小さな静的ファイルを難なく処理できます。

アプリ レイヤーのスケーラビリティは、node.js よりもアプリに依存します。ファイルやセッション データなどをローカルに保存している場合は、状況が複雑になる可能性がありますが、データベースなどの中央の場所 (またはセッション データを保存するための Redis など) にすべてのストレージを配置している場合は、ノードを追加してアプリ レイヤーを拡張するのは簡単です。

データベースは、ほとんどの場合、スケーリングが最も難しいものです。読み取りを主に行う場合、postgres 9.1 には非常に優れたホット スタンバイ機能があり、読み取り/書き込みマスター データベース 1 つと、読み取り作業の大部分を処理できる読み取り専用スレーブをいくつか持つことができます。

書き込みが多いデータベース システムを拡張することは、おそらく最も難しいスケーラビリティの問題です。1 つの超強力なデータベース サーバーが対応できない場合、ほとんどの人はアプリを完全に再考して書き直すことになります (最初から計画されていた場合を除きますが、複数のマスター データベースを計画すると、多くのことが難しくなり、開始が遅くなります。また、ほとんど必要ありません。stackoverflow ネットワークはすべて 1 つのデータベース上にあると記憶しています)。

関連情報