大量の同時ユーザーを持つ Web アプリケーションを実装する必要があるとします。私は node.js を使用することに決めました。これは、拡張性が非常に高く、パフォーマンスが高く、オープン ソース コミュニティなどを備えているためです。その後、ボトルネックを回避するために、同じイベント ループに膨大な数のユーザーがいる可能性があるため、次のクラスターを使用することにしました。マルチコア CPU を活用するためのプロセス。さらに、Cassandra でビッグデータを操作する必要があるため、3 台 (メイン + 2) のマシンがあります。これは、3*n 個の node.js プロセスがあることを意味します。ここで、n は CPU のコア数です (マシンは同一です)。
では、調査を開始し、次のスキーマで終了します。
- Nginx はポート 80 でリッスンし、静的コンテンツ (img、css、js など) を提供するためにのみ使用されます。
動的トラフィックを haproxy に転送します。nginx の設定方法は知っていますが、まだ haproxy を確認する必要があるため、haproxy はポート 4000 でリッスンしていると言えます。Nginx と haproxy はメイン マシン (エントリ ポイント) にインストールされます。 - Haproxy は 3 台のマシン間で負荷を分散します。ポート 4001 にトラフィックを転送します。つまり、node.js プロセスは 4001 をリッスンします。
- すべての node.js には、4001 をリッスンする n プロセスのクラスターがあります。
私が正しければ、単一の http リクエストが単一の node.js プロセスに転送されます。
セッションを作成するのはごく普通のことですよね? セッションは単なるマップであり、このマップはオブジェクトであり、このオブジェクトは node.js プロセスに存在します。Haproxy はラウンド ロビン スケジューラで構成されるため、同じユーザーを異なる node.js プロセスに転送できます。すべての node.js プロセスで同じセッション オブジェクトを共有するにはどうすればよいですか? グローバル オブジェクトを共有するにはどうすればよいですか (これには、同じマシン (node.js クラスター) 内およびネットワーク全体が含まれます)。node.js を使用して分散 Web アプリを設計するにはどうすればよいですか? 同期タスクを容易にするモジュールはありますか?