5000ユーザ同時アクセス可能なシステム構成について

2015年10月13日 at 10:07

キャンペーンサイトのような一瞬だけアクセスが集中するサイトを作成する予定です。
性能を確保するためにWEBサーバを複数台にする構成を考えておりますが、以下のシステム構成を取ることは可能でしょうか?
また、5000ユーザ同時アクセスが可能なサイトを作成する場合の推奨システム構成や事例があるようでしたら、ご教示いただけると助かります。

<前提条件>
・concrete5は5.7を利用
・Niftyクラウドの共有サーバプランを利用
・WEBサーバにはNginxを利用予定
・アクセス集中する際に参照されるページはテキスト表示のみ(画像や動画はなし)
・ただし、ログインした後に自分用のページを参照するため、キャッシュは利用不可

<検討しているシステム構成>
・WEBサーバ数台(性能測定の結果によって2~10台くらいまでを検討)
・外部DBサーバ(マスタ-スレイブの複数台構成かつ、必要であればリードレプリカを使用することも検討中)
・WEBサーバの前段にはLBを設置し、ラウンドロビンで振り分けを実施

他に必要な情報があれば追加いたします。
参考になりそうな性能に関する情報や、複数台構成にする際に考慮すべき点等をご存知の方がいらっしゃるようであれば、ご教示ください。
よろしくお願いします。

タグ:

Re: 5000ユーザ同時アクセス可能なシステム構成について

2015年10月13日 at 17:13
初めまして、コンクリートファイブジャパン株式会社 岩本と申します。

推測を交えつつのご回答となりますので、認識にズレがありましたらご指摘ください。

まず、複数サーバー環境でサイトへのログインを維持するため、何らかの手法で各サーバー間でのPHPセッションの共有が必要になるかと思います。

5000ユーザー同時アクセスとありますので、5000アクセス/秒との想定として考えます。

1番のネックとなるのは、DBの負荷です。

システム構成、想定されるユーザー遷移、プログラムの挙動など複数要素があるとは思いますが、1ユーザー当たりのアクセスがあつた際に発生するWEBサーバーからDBサーバーへのアクセスが参照のみと想定した場合、
ご記載にある通り、DBスレイブを複数台用意し、DBへのリードとライトを分離し、リードをスレイブへと分散させる仕組みが必要となるかと思います。
ただし、concrete5自体ではDBへリードとライトを分離するような機能は持ち合わせていないので、別途concrete5の改修の必要があります。
併せて複数台のDBスレイブサーバーへリードをバランシングする仕組みが必要になるかと思います。
DBスレイブへのクエリの参照をconcrete5内にハードコートしても良いかと思いますが、DBへリードのバランシング、各DBスレイブの死活監視も実装する必要があり、この実装がないと複数台の内のDBスレイブの1台がダウンするとサイト全体が停止する可能性があります。
WEBサーバーとDBスレイブサーバーの間にDB用のロードバランサを設けるのがお勧めです。

上記に関しては、あくまでもDBへの参照のみの場合であり、5000アクセス/秒でDBへの更新、追記があるのであれば、手法がないわけではないですが、想定されている構成では非常に難しいかと存じます。

Nginxの利用を想定されているとのことですが、どういった意図での選定でしょうか?

動的なコンテンツのみを表示するのであれば、NginxをWEBサーバーに使った場合、別途PHP-FPMなどPHPをCGIモードで動かす必要があり、ケースバイケースですがApache2.4+mod_phpの組み合わせの方が早い場合があります。

>・アクセス集中する際に参照されるページはテキスト表示のみ(画像や動画はなし)
上記にあります、テキストのみとのことですが、全てテキストのみとの認識でよろしいでしょうか?
少しでも静的なファイルがあるのであれば、動的ファイルと静的ファイルを分離することでパフォーマンスの向上が図れると思います。

記載された情報のみでの推測となる部分も多々ありますので、より詳細なご質問などありましたら弊社宛にご連絡をいただけますと、よりご協力できるところもあるかと存じます。

http://concrete5.co.jp/ja/
 

Re: 5000ユーザ同時アクセス可能なシステム構成について

2015年10月13日 at 19:13
Niftyクラウドを使用されるという事なので、L7ロードバランサーを使って、HTTPヘッダー情報を元に、負荷分散をするのかと想像しました。
それであれば、複数のアプリケーションサーバー間でのセッション共有は不要ではないでしょうか?(済みません、concrete5で複数サーバー構成を構築した事がなく、この辺は一般論です)

ただ、このような構成をとった場合、同一アカウトによる他IPからの同時接続など、色々考慮すると、やはり、concrete5側で何らかの改修が必要ですかね?

DB負荷が一番のボトルネックに成りそうというのは、岩本さんのご意見に同意です。

また、キャンペーンサイトという事ですので、SSLも必須とすると、L7ロードバランサーでSSLの暗号化/複合化まで実装する事を想されているか、よりWAN側でSSLアクセラレーターを配置する事を想定されているのでしょうか?

5000ユーザーの同時アクセスとの事ですが、キャンペーンにつきものの、アンケートの入力フォーム等次第で、ある程度、同時アクセスは分散させる事も可能ではないでしょうか?

いずれにしても、こうゆう構成(サーバースペックや構成)で同時N千アクセスに対応しています!
といった、実例が出てくると参考になりそうですね。
 

Re: 5000ユーザ同時アクセス可能なシステム構成について

2015年10月13日 at 22:58
SSLに関しては、私もすっかり認識がもれてました。
遠藤さんの書かれている通り、SSLの暗号化・複合化はCPU負荷がかかるので、ネットワーク上位にSSLのオフロードがあるとパフォーマンスが出やすいと思います。

L7ロードバランシング機能を使えば、未検証ですがCookieを使ったセッション維持は可能かと思います。ただしL7のバランサでは名前の通りL7での処理となるため、L4のバランシングに比べ負荷が格段に上がります。
そのため、ロードバランサ自体がボトルネックになる可能性もあり、慎重に選択する必要があるかとは思います。

また上位からのネットワークのフローとして、SSLの復号がL7のバランサがの後となる場合、L7でのセッションの引き継ぎができない場合も考えられますので、ご注意ください。
 

Re: 5000ユーザ同時アクセス可能なシステム構成について

2015年10月15日 at 9:23
岩本さん、遠藤さん、ご回答ありがとうございました。
DB、ネットワーク、セキュリティも含め、色々なアドバイスを頂き、大変参考になりました。
また途中で疑問が出てきたら追加で質問させていただくと思いますが、まずは頂いた情報を元にして、最適な構成を検討したいと思います。
そして、無事にローンチできたら事例として(出せる範囲で)情報を公開したいと思います。
ありがとうございました!