ITmedia NEWS >
ニュース
» 2019年07月24日 06時00分 公開

「Fate/Grand Order」ユーザー爆増の裏側で、エンジニアが挑んだデータベースとの戦い (1/2)

スマホゲーム「Fate/Grand Order」を支えるインフラエンジニアが、ユーザーが爆発的に増える中で経験した、データベースの負荷対策を振り返る。

[片渕陽平,ITmedia]
photo 「Fate/Grand Order」開発元のディライトワークスの甲英明さん(技術部 マネジャー)

 このほど国内累計1700万ダウンロードを突破した、スマートフォンゲーム「Fate/Grand Order」(FGO)。2015年7月末にサービスを開始し、18年には年間約885億円を売り上げた(ファミ通調べ)ほどの人気ゲームに成長したが、ユーザーが爆発的に増える中、運営元のディライトワークス社内ではインフラエンジニアが戦っていた。

 彼らが経験した戦いの1つは、18年7月に実施したデータベースの負荷対策だ。同社の甲英明さん(技術部 マネジャー)は「ゲーム画面上に『ゲームサーバが混雑しています』と頻繁に表示されたり、画面が『Loading』からなかなか切り替わらなかったり、遊びづらい状況が続いていた」と、当時の深刻な状況を振り返る。

 「このままでは、ファンがゲームで遊べなくなる」――甲さんらは、そんな状況をどのように改善させたのか。

垂直分割から水平分割へ データベースの“大手術”

 FGOは、ゲームブランド「TYPE-MOON」の作品「Fate/stay night」(2004年発売)を基にしたスマホゲーム。主人公は、歴史上の偉人や神話の登場人物といった「英霊」をサーヴァントとして従え、人類滅亡を防ぐため時空を越えて旅をする――というストーリーだ。小説や映画のような、数百万字にも及ぶ重厚なシナリオが特徴で、多くのファンを獲得している。

photo 「Fate/Grand Order」公式サイトより

 FGOのゲームインフラは、ローンチ段階からクラウド上に構築。15年末にあるクラウドベンダーのものからAmazon Web Services(AWS)のクラウドに切り替えた。当初から1台のデータベースでユーザーの情報を管理していたが、16年末にメインストーリーの第1部が完結し、盛り上がったタイミングでユーザーが増加。データの肥大化に耐え切れず、複数のデータベースに分割することにした。

 その際、甲さんらは、データベースをテーブル単位で分割する「垂直分割」という手法を採用。例えば、ある1人分のユーザーデータでも、レベルや経験値は同じデータベース、所有するアイテムは別のデータベース……というように、データを意味や種類ごとに複数のテーブルに分け、保存するデータベースを分割する方法だ。

photo 最初は「垂直分割」(テーブル単位での分割)を採用

 「当時は開発に携わるメンバーも少なく、しかも急いで負荷分散を行わなければならなかった。作業の工数が少なくて済むこともあり、垂直分割を選んだ」

 まずは4分割した状態で始め、16年10月に5分割、17年8月に6分割、というようにデータベースを増やした。しかしユーザー数の増加に伴い、1つのテーブルに入っているデータが肥大化した結果、データの問い合わせに時間がかかってしまう状態に。17年末〜18年1月ごろは、ゲーム画面上に「ゲームサーバが混雑しています」と頻繁に表示されるほど、負荷が大きい状態が続いていた。

 また、1人分のユーザーデータが複数のデータベースに分割して保存されているため、1回のトランザクションで複数のデータベースに問い合わせをしなければならず、あるデータベースは更新されても、別のデータベースは更新されない――というデータの不整合が発生する恐れもあった。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.