戦闘力5300万との戦い方

どうも。こんにちは。 わんこ。です。 USA photo by [Harold Navarro]

2019.07の頭くらいにちょっと大きめの案件を担当しまして。
そのときに予想以上の負荷が来たので振り返りつつ、なんとか当月中にブログに起こすぞっ。という気持ちです。

5300万

現在の日本国内におけるTVの設置世帯数はおよそ5300万世帯です。 TVxWebのバックエンドサービスをやっていると戦闘力5300万のクライアント群との熱いバトルができます。

今回の案件

  • 某テレビ局の音楽特番におけるWeb連動企画
  • 地上波で告知があった瞬間にWebサイトにユーザーが殺到
  • 楽曲に合わせたWebコンテンツでの連打企画

実際にきた負荷

ETLサービス
ETL

投票/ユーザー管理サービス

  • 企画開始から4min程度でピーク
  • 他のサービス等合わせると90kprs程度
  • 21:50頃から告知、流入が開始
  • 21:53頃に連打企画連動楽曲が放送

どうなんの

上のグラフを見ていただければわかりますが、かなりの負荷が、いきなりすごい増加量で来ます。

1minごとに10krpsずつ増えてく。みたいな感じです。楽しいね!

実際、地上波で告知があった場合

  • TVにQRが表示される or 検索キーワードが表示(告知)される
  • それを観た視聴者さんが一斉にWebサイトになだれ込んでくる
  • ユーザーさんが地上波放送に合わせてアクションを行う

このような流れになります。

地上波ですから、Webでの動画配信等のような大きな遅延はあまり起こりません。 よって、遅延によるユーザーアクションのブレはほぼ皆無です。

スケールどうすんの

じゃあこの負荷がくるとして、サーバーを準備しなければなりません。 HAROiDではPlatformとマイクロサービスを組み合わせて企画を実現しています。

各マイクロサービスでは何度も負荷試験をしており、インスタンスサイズにおける限界性能、安全率を考慮した運用限界を把握しています。

投票システムなら c5.xlargeでxxxxrpsくらい捌けるねー。 みたいな感じです。

HAROiDのシステムは基本的にボトルネックを持たないように設計されています。
金で殴ればどんどんスケールする構成ですが、1つ1つのアプリケーションに関してはできる限りチューニングを行い、高いパフォーマンスを提供できるようにしています。

しかし、先程も書いた通り数分、下手すると数秒で数万rpsの増加が発生しうるサービスなので、いくら優秀なAWSのAutoScalingを使っても間に合いません…。 また、サーバー落ちてしまったり、極端なレスポンス速度の低下が起こってしまうとそのまま放送事故に直結します。 HAROiDでは、そういったことを防ぐために事前にサーバー負荷の見積もりを行い、それに沿ってサーバーのスケールアップ/アウトを行います。

ちなみにETLサービスだと、当日はc5.xlarge*10の構成でした。

どうやって

絶対にミスれないので、試算、見積もりはそこそこな時間をとって行います。

  • 番組の想定視聴率
  • 視聴者クラスタのリテラシー
  • 番組内の告知頻度/強さ
  • ユーザーアクションにおけるAPIシナリオ

上記のような係数をもとに、全て最大値で見積もりを出していきます。

例えば

  • 視聴率:10%(5300万*10%=530万
  • 参加率:25%(リテラシー及び、告知強度より推測
  • 1アクションにおけるAPIコール数:5

上記のような条件だと
5,300,000 * 0.25 * 5 = 6,625,000API
約663万回APIが呼び出される計算になります。

企画として3min程度を予定している場合、更にこれが
6,625,000 / 3 / 60 = 36,805rps

となります。

実際にはユーザーアクションに偏りがあったり、ブラウザの読み込み速度によってスタートがぶれたりもしますが、おおよそこのような形で計算しています。

大変じゃね

はい。大変です。

しかし、今回紹介したようなパターンはクール毎の特番や、年末年始の大型番組がほとんどです。
その他のレギュラー番組での対応はほとんどありません。
某人気アイドル事務所の方々が出演されるタイミングや、時事的話題性のある方々の出演などによって普段より負荷が高くなるタイミングもありますが、そういう場合はテレビ局側と事前にすり合わせ等をして、普段の2倍耐えられるスケールを行うなどをしています。

1年ほど前から対応番組が増え、スケール作業が頻繁に発生してきました。
しかし、現状サーバー担当者が私を合わせて2名なのであまりにもリソースが足りず…Googleカレンダーに番組表を登録すると自動でスケールアップ/アウト&&スケールダウン/インをしてくれる仕組みを作って運用しています。

でも楽しい

こんな超短期的で超過負荷なAPIサーバーを運用するのってめちゃくちゃ楽しいんですよね。(もともとそれがしたくて入社したのです

HAROiDではこんなサーバーをインフラ設計からアプリ開発まで一気に経験できます。
なかなか癖のある業界であるのは確かですが、他ではなかなか得難い経験と技術が身につきます。

高負荷で一緒にテンションあげてくれるサーバーエンジニアはいつでも募集中ですのよ。
もっと話聞いてみたいとかHAROiDのエンジニアと話してみたいかもー。って方はぜひ下記からコンタクトくださいー。

Wantedly

よろしくおねがいします。