運用管理者に光を当てるオンラインイベント「Cloud Operator Days Tokyo 2021」。「超PayPay祭」における失敗と成功についてのセッション「超PayPay祭による高負荷にショッピングはどのように立ち向かったか」から、自社製プライベートクラウドで運用するWebサービスにおける高負荷対策のポイントを探る。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
通常のセール時の数倍もの利用者が殺到した2020年の「超PayPay祭+Yahoo!ショッピング大規模セール」。準備万端で挑んだヤフーの負荷対策チームだったが、無念にもシステムダウンに追い込まれた。「来年こそは」とリベンジを誓うチームメンバー。だが、そのリベンジの機会は彼らが想定しているよりも早く訪れた。
猶予は3カ月。失敗をどう分析し、どのような対策を講じたのか。チームメンバーが「Cloud Operator Days Tokyo 2021」のセッション「超PayPay祭による高負荷にショッピングはどのように立ち向かったか」で明かした。
「超PayPay祭」は、対象期間中に「PayPay」で決済すると「PayPayボーナス」が通常よりも多く付与される、ヤフーの人気キャンペーンだ。2020年10月から約1カ月間開催された同キャンペーンは、年1回の「Yahoo!ショッピング大規模セール」と併催されることになり、さらにはセール最終日に最大44%のポイント還元があるということで、開催発表時から大きな注目を集めていた。
「それだけに、経営層からの期待値も高く、セール期間中、特に最終日のグランドフィナーレでサービスダウンさせることは絶対に許容されない状況でした」。ヤフー Webエンジニアの信原有志氏は当時を振り返る。
集客は通常セール時の数倍、システムへの負荷も相当なモノが予想される。そこで同社はセール高負荷対策の専門チームを設置。サービス開発を担当するサービス組織が、想定されるサービスへの負荷とそれを処理する上で必要なリソースの見積もり、過負荷時にシステムダウンさせない機能の実装などを担当。サービス基盤を運用、開発するプラットフォーム組織が、サービス組織が要求した各種リソースの確保や各プラットフォームのSLO(Service Level Objective)の順守を担当する体制を作った。
対策内容は、深夜帯の負荷試験、特定の時間帯にユーザーが集中しないための、イベントやスケジュールなどの調整、サービスダウンした際のオペレーションの整理、注文の非同期化や障害時専用の静的ページの表示といった過負荷時の対策機能の実装、キャパシティープランニング、スケールアウトなど。万全の対策で、超PayPay祭+Yahoo!ショッピング大規模セールの開始日を迎えた。
だが、チームの努力むなしく、障害は発生した。最終日、ポイント最大還元を狙ったユーザーが、日が変わるタイミングで殺到。その数は想定の数倍に及び、結果的にシステムがクラッシュし、一部ユーザーのカートが表示されなくなった。
負荷対策は十分だったはずなのに、なぜシステムは落ちてしまったのだろうか?
「セールなどのイベントでアクセスがどのくらいスパイクするかは、予測が非常に難しい」。そう前置きした信原氏は、問題は予測負荷の計算にあったと続ける。
「予測負荷は、前年度のセールの予算と負荷をベースに、今年度の予算との比率に基づいて計算しました。つまり、予算が倍になれば負荷も倍になるだろうというもので、予算ベースで負荷を決定していました。この計算式はこれまでの大規模セールでも採用され、大きく懸け離れることがなかったので、この予測から外れることはないだろうと予測していたのです」(信原氏)
本来チームがすべきだったのは、「予測された負荷に耐える」のではなく、「予測された負荷を超えてもサービスが継続できるようにする」ことだった。課題と目標が明確になったチームは、1年後の大規模セールに向けて改修に取り掛かった。
だが、事態は急変した。LINEとの経営統合記念で、2021年3月に超PayPay祭を開催することが決定したのだ。
その時点で、キャンペーンは3カ月後に迫っていた。当然、当初考えていた対策は間に合わない。3カ月で何ができるのか? 信原氏たちは実現可能な有効打を急きょ検討することにした。
Copyright © ITmedia, Inc. All Rights Reserved.