💪

冗長化せずにテレビ放映に耐えるEC-CUBEを構築する

2024/12/15に公開

仕事柄、いくつか EC-CUBE のホスティングサービスを提供しています。
弊社では Microsoft Azure の仮想マシン(IaaS)を利用しているのですが、多くのサイトは潤沢な予算がなく、Webサーバーの冗長構成をしておりません。
データベースもWebサーバーと同居しています。
もちろん、このような構成ですと、クラウドといえどもスケールアウトはできません。
しかし、中にはテレビ放映されるネットショップもありまして、シングル構成でできるかぎりの性能向上を求められます。
今回、特別なチューニングや仮想マシンのスケールアウト(冗長構成)をせずにできるかぎりの対策をした結果をレポートしてみます。

TV放映予定

金曜19時〜22時の特番にてOA予定。
どのように紹介されるか不明だが、某有名タレントさんのお気に入りとして紹介される模様。

という情報をいただきました。
以前は1000人程度の同時アクセスでサーバーダウンしたそうなので、それ以上の性能向上を狙ってみます。

対策内容

当該サイトは、トップページ配下は WordPress、 /shop 以下は EC-CUBE4.1系という構成です。
OSは AlmaLinux8、PHP7.4、データベースは MySQL で、Webサーバーと同居しています。
平常時は1CPUメモリ2GB(b1ms)のインスタンスを使用しています。
EC-CUBEをスケールアウト可能な構成にするためには、画像を外部ストレージやCDNから配信したり、サーバー上のファイルを直接編集するCMS機能など、ある程度の改修が必要です。
今回、そこまでの予算は無いため、標準構成でできるかぎりの対策を検討しました。
対応内容としては以下の3点です。

WordPress Cloudflare プラグイン導入

このサイトはWAFに Cloudflare を導入しているため、WordPress Cloudflare プラグイン を導入しました。
このプラグインを利用すると、 WordPress のコンテンツを Cloudflare の CDN から配信できるため、大幅な性能向上が期待できます。

b12ms(12CPU 48GB)にスケールアップ

テレビ放映の場合、瞬間的にトラフィックが急増するため、オートスケールは意味をなさない場合が多いです。
今回はテレビ放映前に12CPUメモリ48GBのインスタンスにスケールアップすることにしました。
クライアントへは了承を得て、スケールアップ時にサーバーを再起動しています。
AlmaLinux8 の標準構成のPHPは、Apache eventMPM + php-fpm ですので、スケールアップに応じた性能向上が期待できます。
(mod_php の場合は、Apache の最大クライアント数(デフォルト256)に依存するためスケールアップの効果は乏しいです)

Premium SSD

標準は Standard SSD ですので、Premium SSD に変更しました。変更にはサーバーの一時停止が必要です。
最近のフレームワークを利用したPHPアプリケーションは、リクエストごとに多くの細かいPHPファイルを読みこむため、ストレージの性能は重要です。
ログ出力にも影響があります。
ちなみに、EC-CUBE4系は共有ストレージ(AWS EFSなど)を使用すると全く性能が出ません(Symfony のキャッシュで大量の小さなサイズのPHPファイルを読み込むためです)

結果

当日20時6分ごろ、30秒程度紹介されました。
ゴールデンタイムということもあり、放映直後にリクエスト数が跳ね上がりました。

ユニークユーザー数

全体ピーク時 約800UU でした。
Cloudflare プラグインも性能を発揮したようで、サーバーの応答速度は全く落ちませんでした。

image

サーバーの性能にダイレクトに影響する /shop以下は、ピーク時 約690UU でした。
多くのユーザーが直接商品を閲覧したことになります。

image

リクエスト数

全体ピーク時 約34000リクエスト(約567 req/sec)

image

/shop以下 ピーク時 約24700リクエスト(約411 req/sec)
シングル構成では申し分のない性能を発揮してくれたと思います。

image

購入完了ページである /shopping/complete は最大10リクエスト/分でした。

image

レスポンスタイム

外形監視のレスポンスタイムは100ms台で変化なしでした。

image

CPU利用率

ピーク時 約12% でした。12CPUですので、1200%まで耐えられることになります。全然余裕でした。
image

ネットワーク

トラフィックのピーク時 Network Out total 410MiBでした。
Cloudflare の CDN も威力を発揮してくれたため、全く問題は発生しませんでした。
image

まとめ

30秒間の放映でしたが、まだまだ性能に余裕がありそうです。
スケールアップのコストも100円/時間程度で済みました。
今回の構成で1000UU程度の同時アクセスは余裕ということがわかりましたので、次なるTV放映や、Yahoo砲などに望みたいと思います。

GitHubで編集を提案

Discussion