流沙河鎮

情報技術系のこと書きます。

世界最大級のオンラインゲーム企業Riot Gamesを支える日次70TB規模のデータ基盤のユースケース

データプラットフォーム界隈の人々がコミケに技術本を出展しているのを見て、自分でも何か書きたくなってきた。そこで、世界最大級のオンラインゲーム企業であるRiot Gamesのデータ基盤がどのようにプレイヤー体験を支えているかについて、2022 AWS re:Inventでの発表を元に紹介しようと思う。

以降の内容、スクリーンショットは特別な断りがない限りAWS re:Invent 2022でのRiot Games社の登壇「How Riot Games processes 20 TB of analytics data daily on AWS」を元にしている。なお、タイトルでは20TBと言っているが、プラットフォームの成長によって現在では日次70TB、毎秒50万件以上のイベントが流入していることが本編で語られている。

www.youtube.com

時間の都合で、今回はデータ基盤の技術的な側面には立ち入らず、ユースケースのみを紹介する。ただ、上記の動画ではRiot Gamesのデータ基盤のアーキテクチャについても細かく紹介されており、Delta Lakeや大規模なKafkaの利用、3回にわたるデータ基盤のリアーキテクチャなど、非常に興味深い点が多いので興味がある人は是非見て欲しい。今後、需要があれば技術編についても纏めようと思う。

Riot Gamesとは?

Riot Gamesは世界最大級のオンラインゲームを運営する北米のゲーム会社で、特に有名なタイトルとしてLeague of Legends,VALORANTが挙げられる。 ja.wikipedia.org

activeplayer.ioheadphonesaddict.comによれば、代表作であるLeague of Legendsのプレイヤー規模は同時接続が10,000,000人程度、月当たりのアクティブプレイヤーは153,000,000人程度で、極めて膨大なユーザーベースを抱えていることが分かる。1回の試合はだいたい20-40分程度で、10人のプレイヤーが参加するのだが、2022年だけで5億ゲーム以上がプレイされた。
eスポーツを代表するタイトルの一つでもあり、世界大会のオープニング動画を見ればその熱量が伝わってくるだろう。

www.youtube.com

データ基盤が支えるゲーム体験

Riot Gamesが展開するゲーム上でのプレイヤーの行動は、テレメトリーとしてデータプラットフォームに収集される。その規模は2022時点で日次70TB、毎秒50万件以上の規模であり、これらのデータの活用によって様々なゲーム体験が支えられている。

試合中のイベントデータの収集

League of Legendsは5人のプレイヤーがチームを組んで他のチームと戦う5対5のオンラインゲームで、プレイヤーが操作するキャラクターたちがゲーム内を走り回る。ゲーム内で発生するイベントは随時収集され、データ基盤に蓄積される。例えば以下はFirst Blood(ゲームが始まって最初にキャラクターが倒された時)の例で、どんなプレイヤーが操作する、どのようなキャラクターが、ゲーム内の何処の座標で倒した/倒されたのか?がログデータとして記録されている。
これによって、Riot Gamesのデザイナーたちは自分たちのゲームの中で何が起きていて、どのような傾向が見られるのかを俯瞰的に確認することができる。加えて、登壇の中で明確には語られていないものの、これらのデータはLeague of Legendsのeスポーツとしての側面でも価値を持っていると思われる。Riot Gamesは対戦ゲームのファンが知りたがるようなデータ、例えばプレイヤーの勝率(レート)リスト、個々の戦績、各ゲームの概要などのデータをAPIで公開(Riot Developer Portal)しており、誰でも使えるようになっている。これらのAPIを活用することで、Riot Gamesの熱烈なファンはもちろん、なにか新しいサービスやビジネスを始めたい開発者、事業者などが派生的なコンテンツを作ることができ、これによってゲームのエコシステムが拡大していくのだ。こうしたAPIエコシステムを展開する上でも、データ基盤は欠かせない。
RiotのAPIを利用していると思われるサービスの例: www.mobafire.com
lolchess.gg

パーソナライズされた割引提案

League of Legendsに登場するキャラクターは全て無料で手に入れることができ、課金によって強さが変わることはない。その代わりに、キャラクターの見た目を好みに合わせて変えることができる「スキン」という要素があり、これは基本的にお金を払って購入することになる。(僕は2014年からLeague of Legendsを遊んでいて、201種類のスキンを持っている。スキンの有無はキャラクターの性能に全く関係しないのだが、魅力に抗えずつい買ってしまうのだ。。。)
四半期に一度、プレイヤーごとにチョイスされたいくつかのスキンがお値打ちに購入できるキャンペーン「Your Shop」が開催される。ここでもデータ基盤が活躍しており、各プレイヤーのプレイ動向を元に164種類のキャラクター、1500種類のスキンの中から、どのスキンをどの程度の割引でオファーするかを機械学習によって決定している。

キャラクターへの"テコ入れ"の検討

League of Legendsには164種類ものキャラクターがいるので、中にはあまり使われない不人気なキャラクターも出てくる。デザイナーたちはデータ基盤を活用してキャラクターの利用トレンドを探り、不人気なキャラクターについては性能のリニューアルや、キャラクターのリブランディングなどを行う。興味深いのは、単にプレイされる頻度だけで人気を測っているわけではない点で、プレイヤー人口全体としてのプレイ回数は少ないものの、一部のプレイヤーは熱烈に使い込んでいるような、”ニッチだけど愛されている”キャラクターについてはそのまま活かすなど、多角的な検討が行われている。幅広い分析の軸を提供するためには優れたデータ基盤が必要とされるため、ここでもデータエンジニアリングが価値を発揮していると言えるだろう。

ゲームバランスの調整

Riot Gamesが提供するゲームの多くは対人ゲームで、かつ競技性が高いため、ゲームバランスの調整が非常に重要になる。競技性が高いシビアなゲーム性にも関わらず、特定のキャラクターが異様に強すぎるなどといった、ゲームバランスが破綻する状況を招いてしまっては誰も遊びたがらないからだ。そんなゲームバランスを確保する上でもデータ基盤は重要な役割を果たしている。
カードゲームのLegends of Runeterraでは、デッキのアーキタイプ(≒戦略)ごとにプレイ率と勝率を観察することで、既存のカードプール、これからリリースするカードプールのバランスを保っているという。

マッチメイキング

対人ゲームで最も重要な要素の一つに、マッチメイキングがある。ゲームに参加するプレイヤーをマッチングする上では、能力が拮抗したプレイヤー同士を引き合わせる必要がある。実力差がかけ離れたプレイヤー同士が戦ってもお互いに何も面白くないからだ。そんなマッチメイキングにおいても、やはりデータ基盤が重要である。
2020年にサービスを開始したFPSゲームであるValorantでは、リリース前に社内のプレイテストに加えてクローズドβテストを通じて、各プレイヤーのスキルを推定するモデルをトレーニングすることで、正式リリースの時点で適正なマッチングを実現することができたそうだ。
また、クローズドβテストに参加するプレイヤーを選出する上ではTwitchでValorantの配信を見ているユーザーのデータを活用しており、視聴時間などの一定の基準を満たしたTwitchユーザーに対してβテストへの参加権を頒布する取り組みを行ったとのことだ。

ゲーム内の行動、コミニュケーションの適正化

オンラインゲームには様々な人がいて、必ずしも全員がマナーのよいプレイヤーであるとは限らない。中には虫の居所が悪く、他のプレイヤーを不快にさせるようなプレイや、チャットでの暴言などに奔ってしまう人もいるだろう。Riot Gamesはデータ基盤を通じてプレイヤーたちの言動をモニタリングしており、マナーのよいプレイヤーには報酬(ゲーム内アイテムなど)を与え、悪いプレイヤーにはペナルティを課している。

... and more!

感想:ゲーム産業のデータエンジニアリング、おもしろそう!

Riot Gamesは複雑で莫大なデータを利用することで、データドリブンな意思決定をするだけでなく、データドリブンなビジネス/ゲーム体験の実現に成功している。その裏には(今回紹介できていないが)非常に高度な技術的工夫があり、極めて刺激的であると感じた。
Riot Gamesのようなオンラインゲーム企業に限らず、多くのハード/ソフトがオンラインに繋がる今日、沢山のゲーム業界の企業がより良くデータを扱う必要性/チャンスに迫られているのではないかと思う。業界の性質上、マルチメディアなビジネスを展開していることも多いと思うので、そういったドメインとの連携に目を向ければ、データソース、活用の余地は更に広がるだろう。そんなゲーム産業は、データエンジニアリングの本場の一つ、と言っても過言ではないのではないか、と感じた。

ゲーム産業が扱うデータの規模についての関連記事 bering.hatenadiary.com

スライドの最後から抜粋