過去最大トラフィックを完走。W杯配信キャパシティ確保の裏側【ABEMA DEVELOPER CONFERENCE 2023#1】

2023年5月22日

株式会社AbemaTV Site Reliability Engeneer

岩永 勇祐

2017年サイバーエージェントに中途入社、2018年に株式会社AbemaTVのSREチームに移動。現在は信頼性の維持・向上のためのツール開発を行っている。

Webサービスを展開するにあたって、十分なシステムリソースを確保しておくことは非常に重要だ。特に大型のイベントやキャンペーンなどトラフィック増大が予想される際には、バーストトラフィックなどによる不具合を起こさないためにも、キャパシティプランニングや負荷対策体制の増強が不可欠となる。

ABEMAが行なったFIFA ワールドカップ カタール 2022(以下W杯)の全64試合無料生中継において、SREチームの一員として対策を行った岩永勇祐氏から「W杯に向けたキャパシティ確保の軌跡」を紹介する。

準備期間は約6カ月。過去最大の同時接続目標からスタート

2022年4月のプロジェクト開始時に「過去最大規模の同接目標が発表され、非常に驚いた」と回想する岩永氏。

10月末のコードフリーズに向けて、大きく4つの対策プロジェクトが同時進行するなか、SREチームはWの安定配信を責務とする「負荷対策プロジェクト」に所属した。

同プロジェクトでは、以下の3点がミッションとして課された。

・全64試合のライブ配信を、インフラの不備なく提供する
・発生した問題への迅速な対応・最速で復旧
・問題が発生する可能性を可能な限り予見し、最大限の予防対策をとる

その中でSREチームのチームミッションは以下の3点であった。

・視聴開始に至るシステムリソースの確保
・視聴開始に至る負荷試験・障害試験の実施
・配信期間中における監視体制の確立

SREチームは課された3つのミッションを、どのように解決していったのか。

ミッション1:視聴開始に至るシステムリソースの確保 コツは「精度は低くても、大枠の規模感を正しく見積もる」こと

ABEMA SREチームは、プロダクトの開発チームとともにGoogle Cloudを中心としたマイクロサービスで構成されている、サイトアクセスから視聴開始に至る部分のシステムリソースの確保を担当した。

リソース確保の実施において考慮する必要があったこととして、以下の3点が挙げられている。

・クラウド関連サービスともに内部調整が必要になるケースがあるため、リソース調整の依頼は早めに行う
・W杯向けの機能開発・改善、基盤となっているクラウドのリージョン移設、DB分割および移設など、さまざまなプロジェクトが同時進行している
・ABEMAでは配信する番組の特性、配信形態によって、ワークロードが変わることがある。また、プッシュ通知など運用施策も考慮する

こうした背景から、プロジェクト開始時点ではキャパシティの予測精度に限界があると考えたSREチームは、「精度は低くても、大枠の規模感を正しく見積もる」ことを全体の方針として掲げることに。

実際の工程では、まず全てのマイクロサービスで対象コンポーネントの洗い出しを行った後に、Google Cloud側と協力しながら各コンポーネントの見積もりに必要な要素を決定。次に、各コンポーネントの利用を、直近の大型配信を基準に確認。その後、同時接続数を係数とした試算を行う手法を使ったという。

そして最終的には、同時並行で行なわれるプロジェクトの影響も確認しつつ試算したうえで、それらの情報をもとにGoogle Cloud側にリソース調整を依頼したと岩永氏は振り返る。

続いて取り組んだのが社内関連サービスとの連携だ。

ABEMAはサイバーエージェントが運用するさまざまな基盤サービスを利用しているため、各種サービスとの連携体制を構築することも必要になる。そこで、事前にABEMAとサイバーエージェントの中間に取りまとめ役を設置することで、各関連サービスとの連携を深めつつ、調整にかかる時間を短縮。並行して、想定されるRPSなど見積もりに必要な情報や依頼内容の整理をサービスごとに行い、実際に調達依頼をかけていった。

ミッション2:負荷・障害試験(環境整備、シナリオ作成、試験実施)

リソース確保の大枠が完了した時点で、残りの期間は約4ヶ月あまり。続いて行われた負荷試験・障害試験においては、以下の3つの条件を考慮する必要があった。

・10月31日までの残り約4ヶ月で全ての工程を終える
・極力実際の配信と同等の状態を再現した試験を行う
・可能な限り考えられるワーストケースの試験を含める

現状のシステム分離レベルや配信規模を鑑みて、考えられる本番でのリクエストを統合的に実施するE2Eテストを実施することを決定した。

ステップ1:既存ツールで対応できない、ネットワーク経路も本番と違う。ゼロベースでの試験環境整備

試験環境については、既存の負荷試験ツールが目標とする負荷を生成できず、大量のコアを用意する必要がある。また、試験環境が同時並行で進行しているリージョン移設前の環境なので、本番とネットワーク経路が違う。さらに、各アプリケーションも最新の状態ではない。

これら課題や、配信までの残り時間、試験のカバレッジ範囲を総合的に考え、以下のように試験の実施方針を決定した。

・負荷試験ツールは新しいソリューションを検証・導入
・負荷試験環境はゼロベースで構築する
・本番を想定したクローン環境を用意する

環境構築のために、リージョン移設後の東京リージョンに送信側・受信側の2クラスターを用意。負荷試験ツールは新たなソリューションとして「K6」を導入したという。

さらにネットワークの経路と試験環境をGoogle Cloudに確認してもらい、CIやモニタリングなどの足回り、クォーターの緩和・試験環境のリソース調達など、クラウドプラットフォームチームと協力して試験環境を整備した。

ステップ2:複雑な条件を踏まえた負荷シナリオの作成

続いて負荷をかけるシナリオ作成は、主に以下の3点を考慮する必要があった。

・番組内容や配信形態によってワークロードが異なる
・配信期間中の通常配信も保護する
・配信期間中の、W杯試合以外のサービス利用者の増加

そのため、後に細かい調整ができるよう、「通常のサイト利用」「W杯の1試合」「ゴールシーンなどによって発生する、コメントバーストなどのワーストケース」の3種類の想定を組み合わせたシナリオを用意し、スクリプトに落とし込んだという。

各パターンを通して、直近の大型配信から各APIの高さを決定したり、想定される視聴動線を担当プロジェクトに確認したうえでタイムラインにマッピングを行うなど、シナリオには「思いつく限りの想定パターンを組み込んだ」と岩永氏は振り返る。

ステップ3:シナリオを網羅する3種類の負荷試験を実施

実際の試験では以下の3種類を実施した。

統合負荷試験

作成したシナリオに、同時接続数を係数とした負荷を段階的にかけていく。繰り返し実施する中で、キャッシュ戦略やサーキットブレーカーの調整など負荷対策を行い、本番でのモニタリングを想定した環境を整えた。

合同負荷試験

Google Cloud協力のもと、周辺サービスと、リージョン単位で共有するリソースやSPOF(単一障害点)などがないか確認した。

障害試験

周辺サービスクラウドのさまざまなコンポーネントに障害が発生した際の影響や、正しく復旧できるかなどを確認した。

ミッション3:配信期間中に即時対応できる監視体制の確立

ここまでさまざまな負荷や障害対策を入念に行ってきたものの、岩永氏は「それでも想定外の事象が発生することは十分に考えられるため、即時対応できる監視体制を設けることも非常に重要」としたうえで、「配信期間も時間もこれまでより非常に長いものであったため、慎重に決める必要があった」と振り返る。

実際に、2022年のW杯は初戦のカタール対エクアドル戦から決勝戦まで約1か月あり、さらにグループステージからベスト8決定までは、最長で土日含めて連続で17日間試合があるという日程が組まれていた。加えて、1日の初戦から最終戦までの最長時間は19時から翌朝6時までの11時間というスケジュールが設定されていた。

これらの試合に対し、張り付いて監視するのかアラート対応とするのか、土日・深夜の勤務体制や通常開発とのバランスなど、さまざまな懸念点があったという。

安定した配信とメンバーの健康面を両立させるため、初戦の数試合と同接予測の高い数試合は張り付きでの監視を行い、それ以外はアラート待機を基本とする運用とした。

さらにクライアント含めた全チームを対象に、勤務条件は必ず守った上で交代制による監視を行い、なおかつ主要メンバーで各試合1名以上の張り付きでの監視を行う方針を決定し、全体への周知も行なって監視体制を整えたという。

岩永氏は「各チームに調整の依頼を出すまでは、多少の混乱は覚悟していた」と振り返る。しかし実際には、イベントにかける全体の熱量が高かったこともあり、「大きな問題が生じることなく、スムーズに体制のスケジュールを組めた」とのこと。

監視体制の確立完了時点で、配信までは残り一週間となっていた。本番を迎えるにあたって、障害時のマニュアルやモニタリングの最終チェックを行った上で、クールダウンのため休息をとり、本番に備えた。

配信本番、全64試合大きな事故なく完走

こうして全64試合の放送を大きな事故なく配信を終えることができ、大規模なチャレンジを成功に終えることができた。

実際のトラフィックと負荷試験でのシナリオとの乖離について、流入ケースで比較してみると、前半戦開始と後半戦開始は概ね想定通りだったのに対し、ハーフタイム突入とゴールシーン、試合終了後の流入は想定から乖離。

この結果について岩永氏は、「より厳しい条件でテストを行っていたので、全試合を通して概ね試験範囲内のトラフィックで収まった」と語ったうえで、「シナリオは入念に作ったつもりだったが、ゲームの展開に大きく左右されることがわかり、やはり試験のシナリオ設計は非常に難しいと痛感」したと振り返った。

収穫と課題。W杯配信・負荷対策プロジェクトを振り返って

岩永氏は最後に、本プロジェクトから得られた収穫と課題・今後の展望について語った。

収穫としては「入念な試験による潜在的課題の発掘・改善や、それに伴う本番での安心感」「張り付きでの監視によるリスクの早期発見」を挙げながらも、課題として「試験完了までにかなり時間がかかってしまったこと」「横断的なリソース調整や負荷試験は非常に認知負荷が高い活動だったこと」があるとした。

これらを活かし、今後は、負荷試験や障害試験などをより簡易に実施できる環境づくりや、その上で開発チームが自律的に試験を実施できる状態を作りたいとしたうえで、「継続的に大型配信を想定した準備体制を作っていきたい」と意欲を見せてセッションを締めくくった。

セッション動画

文:夏野 かおる

関連記事

人気記事

  • コピーしました

RSS
RSS