テレビ放送に向けての負荷対策(AWS x Rails の場合)[前編]

Housmart高松です。

先日、テレビ東京のWBS(ワールドビジネスサテライト)で弊社サービス「カウル」をご紹介いただきました。今回は、その前後でシステムの準備として実施したこと、当日の実際のアクセス数などをご紹介します。

WBSサイト(不動産流通に革新は起こるか): http://txbiz.tv-tokyo.co.jp/wbs/feature/post_107290/
仲介手数料無料の不動産サイト「カウル」: https://kawlu.com/

突然のテレビ取材!テレビに出るとどのくらいアクセスが来るの?サーバは何台増やしたらいいの?
そんな時の参考になれば幸いです。

内容

  1. 前提
    • 前回の失敗
    • フロントエンド システム構成
  2. 事前準備
    • 負荷予測
    • サーバ台数決定
    • サーバ増強
    • その他
  3. 実際のアクセス数と振り返り

1.前提

前回の失敗

つい半月ほど前に別の局で朝の番組にもちらっと社名を出していただいたのですが(5秒くらい)、AWSのSmallインスタンスで冗長化もせず、のんきに構えていたところ、一部のサーバが一瞬でやられてしまいました。

かすっただけで右腕を持って行かれたぐらいのダメージを受けました。衝撃でした。
この反省から 準備大事! ということを学んだので今回はしっかりと準備をして望みました。


フロントエンド システム構成

「カウル」フロントエンドのシステム構成を簡単にご紹介します。
基本的にはAPI(Rails x MySQL)を、別プロジェクトのフロントエンドRailsアプリケーションから呼び出す構成になっています。また、自社メディアであるマンションジャーナルも運営しているため、Wordpressが動くサーバが別にあります。
SEOの観点からサブディレクトリで Web app と自社メディアの切り分けを行っており、クラウドフロントでサブディレクトリごとにアクセスを振り分けています。

今回は各EC2サーバをオートスケールグループに入れ冗長化を行い、負荷見積もりにしたがってスペックと台数を決定しました。


2.事前準備

負荷予測

負荷予測に関しては以下の記事を参考にさせていただきました。
[Qiita]gatling による負荷試験とテレビ露出見積り

まず、総アクセス数を以下の式により求めます。

総アクセス数 = テレビ局のリーチ人数 × 視聴率 × Web検索する人の割合 (=総アクセス人数)
                      × 一人あたりの平均閲覧ページ数

今回はテレビ東京なので関東圏で約4,000万人のリーチ、深夜帯なので視聴率 5% 、テレビを見てWebで検索する人が視聴した人全体の 5% と仮定し、一人あたりの平均閲覧ページ数は過去実績から2ページとしました。
これらの仮定の上で、放送中の総アクセス数は以下のように求まります。

総アクセス数 = 4,000万 × 5% × 5% × 2 = 20万アクセス

テレビすごい!

これをテレビ出演時間で割ると一秒あたりの平均リクエスト数(QPS)が求まります。弊社の紹介が何分間流れるかは本番を見るまで分からなかったのですが、今回は5分間と仮置きしました。

出演時間のQPS = 20万アクセス ÷ 300秒 = 平均 667 QPS

上記はあくまで平均の値なので、この数字ピッタリに合わせて構築するとアクセスがスパイクした時にリソースが足りなくなってしまいます。
せっかくのチャンス、1アクセスたりとも落としたくなかったので、アクセスがスパイクすることも考慮に入れてバッファを積み 1000 QPS に耐えられる構成にしようということに決めました。


サーバ台数決定

こちらも先ほどのQiita記事を参考にAWSサーバのスペックと台数を決定しました。

EC2とRDSで動く Rails x MySQL の構成で、1vCPUあたり100[QPS]程度のリクエストを捌くことが可能なようです。 今回の構成も参考記事の構成とほぼ似ているため、大きく外すことはないだろうということでこちらの結果をそのまま流用させていただきました。

Front・APIサーバ共に10vCPU必要ということで、それぞれ t2.medium x 5 台 の構成に決定しました。


サーバ増強

深夜からの放送だったので、夕方頃おもむろにインスタンスを増やそうとしたところエラー。もう一度試してもエラー。 ググってみるとAWSには各リソースごとに上限が決められていて、その上限にぶつかってしまっていました。
各上限を上げるためにはAWSに申請が必要なようです。詳しくはこちら→Amazon EC2 サービスの制限

初期の設定でEC2インスタンスは20個までに制限されているようです。

今回はAWSのサポートセンターに「テレビの放送があるので!」とメッセージを添えて申請を送ったところ、数時間後にご対応いただけたので事なきを得ましたが、危ないところでした。AWSの中の人ありがとうございました。みなさん 是この制限の存在を頭に入れておいてください


その他

その他、会社名で検索されることも考慮に入れて、会社紹介ページや旧サービスからも「カウル」のランディングページに導線を貼り対策をしました。
万が一のことを考えてオフィスにスタンバイ、ピザとコーラを用意して放送を待ちます。

はたしてどの程度アクセスが来たのでしょうか!?[後編]に続く