私は現在、同様のシステム(プロレベル)をセットアップしていますが、これが私が選んだデザインです。
- 2つのNginxロードバランサー(両方ともアクティブ、両方とも他方のフェールオーバー、DNSラウンドロビンでバランス)
- マスターマスターレプリケーションモードの2つのMySQLデータベース
- Tomcatクラスターとしての2つのTomcatインスタンス
- Tomcatクラスターのキャッシュとセッション状態共有の両方のための2つのMemcachedインスタンス
これにより、冗長性、高可用性、スケーラブルなソリューションが実現します。
(まともなハードウェア上の)ロードバランサーは、飽和した1ギガビットの回線をそれぞれ簡単に負荷分散します。これは、SSLオフロードにも最適な場所です。
セッション情報をmemcachedに保存できます。Tomcatインスタンスが失敗した場合、別のTomcatインスタンスは関連するセッション情報を取得でき、クライアントは何かに気付かないでしょう。これをスティッキーセッションと組み合わせることも忘れないでください。(ネットワークトラフィックを抑えるため)
Tomcatクラスタリングには、memcachedを使用せずに、クラスター間でセッション情報をリアルタイムで共有するオプションもあります。パフォーマンスは賢明だと思いますが、Memcachedを使用した方が良いでしょう。
これらのアプリケーションのいずれかでより多くの電力が必要な場合:
- Nginx:ロードバランサーを追加しますが、すぐにこれがボトルネックになるとは思いません。
- Tomcat:Tomcatクラスターのサイズを簡単に増やしたり、クラスターを追加したりできます
- Mysql:いくつかの読み取り専用スレーブを追加するか、クラスターサイズを増やします(アプリケーションによって異なりますが、RESTベースのアプリケーションを作成したため、これは問題になりません)
- Memcached:ノードを追加します。Memcachedは非常にうまくスケールします。
あなたのアプリケーションがどのように構築され、どのリソースが大量に消費されるかはわかりませんが、データベースの負荷が高い場合(負荷テスト中!)、アプリケーションとデータベースの間にキャッシュを追加するとパフォーマンスが大幅に向上します。ただし、すべてがキャッシュ可能であるわけではないことを忘れないでください。クエリが常に異なる場合、キャッシュは役に立たないでしょう(多く)
私のアドバイスは、VMware Workbench(またはsimilair仮想化ソフトウェア)をダウンロードして、簡単なセットアップを作成することです。ロードバランシングやクラスタリングは不要で、基本的なこととそこから動作します。機能(バランス、キャッシュ、クラスタリングなど)を1つずつ追加し、各トピックについて調査を行うようにしてください。正しい選択をしたことがわかります。
このプロセス中に同じパフォーマンステストを実行し続けると、セットアップでXを使用する方がYを使用するよりも優れているかどうか、キャッシュにどのような影響があるかなどを確認できます。
最終的に、このような設定はアプリケーションとそのクライアントの要件に本当に依存し、すべてがさまざまな方法で実行でき、それぞれに長所と短所があります。
他に質問は?
幸運を!
ウェズリー