数十万人の冒険者を支える“バックエンド”とは

 2012年8月20日~22日、パシフィコ横浜にて開催されている、日本最大のコンピュータエンターテインメント開発者向けカンファレンス“CEDEC2012”。3日目の2012年8月22日に行われた、“ドラゴンクエストXの舞台裏”と題したセッションをリポートしよう。

“ドラゴンクエストXの舞台裏”サーバ・データベース開発のプロが語る、数十万人がいっしょに遊べるゲームができるまで【CEDEC 2012】_02

 非常に胸躍るタイトルが付けられたこのセッション。CEDECに訪れたクリエイターたちの興味も高く、立ち見どころか、会場に入りきらないほどの多くの聴衆が詰めかけた。スピーカーは、スクウェア・エニックス開発部 プログラマの森山朋輝氏。森山氏は、「サーバサイドのマニアックなテーマなので、まさかこれほど多くの方が集まるとは……」と驚いた様子を見せつつも、極めて興味深い講演を行ってくれた。

 セッションのテーマは、“ドラゴンクエストXのサーバシステム概要”だ。ご存じの通り、『ドラゴンクエストX 目覚めし五つの種族 オンライン』(以下、『ドラゴンクエストX』)は、2012年8月2日よりサービスがスタート。『ドラゴンクエスト』シリーズのナンバリングタイトル最新作とあって、国内MMORPGの歴史を塗り替えるほどのゲームファンがソフトを購入し、日夜多くのプレイヤーが冒険を楽しんでいる。このセッションでは、本作の運営を支えるサーバシステムのうち、とくに“バックエンド”と呼ばれる、データベース関連の技術に関する講演が行われた。

 講演の最初に、まず森山氏が自己紹介を行った。森山氏は、大学を卒業後、日本オラクルを経て、2006年にスクウェア・エニックスに入社。日本オラクル時代に培った技術を活かし、モバイル事業部でサーバプログラマー、Web、課金システム、ゲームサーバの開発などを手掛けた後、『ドラゴンクエストX』開発チームの一員となり、サーバ関連の開発を担当することとなる。森山氏によると、「ときどき『ファイナルファンタジーXIV』のお手伝いをしたりもしています」とのことで、まさにサーバ、データベース関連技術のスペシャリストというわけだ。

「同じゲームなのにいっしょに遊べないのはダメ!」

 森山氏は、本題のバックエンドの話に入るまえに、まずサーバの構成について説明。
【1】ロビー
いわゆる認証、ログインサーバにあたるもので、『ドラゴンクエストX』の場合は“冒険の書”の作成、削除などを管理する。
【2】ゲームサーバ
モンスターを動かしたり、イベントを制御したりと、ゲーム本体を担当する。実際には、役割の違うゲームサーバが数種類存在する。
【3】バックエンド
データベース+キャッシュサーバで構成される。本セッションのテーマ。
【4】Web
ゲーム内データと連動するWebサイト“目覚めし冒険者の広場”(【コチラ】)。自分やほかのプレイヤーのデータを参照したり、コミュニケーションを取ったりすることが可能。これらのデータもバックエンドを経由している。

“ドラゴンクエストXの舞台裏”サーバ・データベース開発のプロが語る、数十万人がいっしょに遊べるゲームができるまで【CEDEC 2012】_03

 森山氏は、上記のように、サーバシステムを構成する基本的な要素は一般的なオンラインゲームと同様だとしつつ、バックエンドの構成には『ドラゴンクエストX』ならではの特徴があるのだと語る。それは、『ドラゴンクエストX』の場合、プレイするサーバ(ワールド)をプレイヤーが任意に選択できることと関係がある。

 MMOに限らず多くのオンラインゲームの場合、独立したサーバセットを複数用意する方式を取っている。これには、「作品がヒットして人が増えたら、その都度サーバセットを増やして対応することができます」(森山氏)と、低リスクで拡張を行えるメリットがあるという。
 しかし『ドラゴンクエストX』の場合。ゲームサーバは任意に増やすことができるシステムになっているが、データベースはひとつで、データを一ヵ所で一元管理する方式を取っている。この方式を取った理由とは、前者の方式のデメリットの部分、つまり「違うデータベースにデータがあるため、どうしてもほかのワールドのプレイヤーとのやりとりが制限されてしまいます」(森山氏)という状態を避けるためだ。

“ドラゴンクエストXの舞台裏”サーバ・データベース開発のプロが語る、数十万人がいっしょに遊べるゲームができるまで【CEDEC 2012】_04
“ドラゴンクエストXの舞台裏”サーバ・データベース開発のプロが語る、数十万人がいっしょに遊べるゲームができるまで【CEDEC 2012】_05

 これについては、森山氏いわく、「同じゲームなのにいっしょに遊べないのはダメだと、最初からこの構成で作ることが決められていました」のだそうだ。しかし、膨大な数のプレイヤーデータを一ヵ所で管理するというのは、「負荷分散とは真逆を行く方向で、ムチャぶりなオーダー」(森山氏)。しかし、これが『ドラゴンクエストX』では必須だということで、森山氏は腹を据えて、この難題に立ち向かっていくことになる。

 ちなみに余談として、森山氏が開発チームに加わった直後に、“データベースをひとつでやってほしい”と言われたときには、「たいへんですよ。本当にやるんですか?」と返事をしつつも、その時点では本作がナンバリングタイトルであることを知らされていなかったため、「どれくらい人が集まるゲームなのかはわからないけど、がんばればなんとかなるかな……」(森山氏)という程度に考えていたそうだ。後に、正式にナンバリングタイトルである、つまり大勢のプレイヤーが集まることは必至であることを知らされた森山氏は愕然としたそうだが、「もう引くに引けなくなっていました(笑)」(森山氏)。

かつてないほどの時間を費やした負荷試験

 そして森山氏は、“世界はひとつ”というコンセプトのもと、制作チームでヒヤリングを行い、運営に適したサーバシステムの構築を進めていく。

“ドラゴンクエストXの舞台裏”サーバ・データベース開発のプロが語る、数十万人がいっしょに遊べるゲームができるまで【CEDEC 2012】_06
“ドラゴンクエストXの舞台裏”サーバ・データベース開発のプロが語る、数十万人がいっしょに遊べるゲームができるまで【CEDEC 2012】_07
“ドラゴンクエストXの舞台裏”サーバ・データベース開発のプロが語る、数十万人がいっしょに遊べるゲームができるまで【CEDEC 2012】_08
“ドラゴンクエストXの舞台裏”サーバ・データベース開発のプロが語る、数十万人がいっしょに遊べるゲームができるまで【CEDEC 2012】_09

 ここで興味深いのが、プレイヤーのセーブデータにまつわるお話。森山氏は、あまり詳しくは話せないとしながらも、セーブデータはC++で書かれたデータの集合体であること、そして各構造体は、『ドラゴンクエストX』の場合、一般的なオンラインゲームと比較してサイズが非常に大きく、ひとりあたり数百キロバイトにも及ぶことを明かしてくれた。このデータを、数十のテーブルに分割して保存するわけだが、そのまま素直に実装してしまうと、ゲームが非常に重くなってしまう。とくにMMORPGにおけるセーブ&ロードは、ゲーム中のいたるところで実施されるのだからなおさらだ。

 そこで快適に動作させるため、もっと言えば、「データベースに楽をしてもらうため」(森山氏)に、セーブデータを直接データベースに保存するのではなく、キャッシュサーバに保存する方法を取っているのだそうだ。
 しかし大半をキャッシュに任せたとしても、当然最終的にはデータベースに保存してやる必要がある。そこでデータベースに保存するタイミングを、“ログアウトするとき”、“プレイヤー間でアイテムが移動するとき”、“定期的に(一定時間ごとに)”の3つに限定することにしたそうだ。森山氏いわく、とくに重要なのは2番目、“アイテムが移動するとき”にあるそうで、これは万一、片方だけが正しく保存され、片方に時間の巻き戻りが起きた場合に、アイテム消滅、複製などの事態が起こってしまうからだという。

“ドラゴンクエストXの舞台裏”サーバ・データベース開発のプロが語る、数十万人がいっしょに遊べるゲームができるまで【CEDEC 2012】_10
“ドラゴンクエストXの舞台裏”サーバ・データベース開発のプロが語る、数十万人がいっしょに遊べるゲームができるまで【CEDEC 2012】_11
“ドラゴンクエストXの舞台裏”サーバ・データベース開発のプロが語る、数十万人がいっしょに遊べるゲームができるまで【CEDEC 2012】_12

  こうして開発は進んでいったが、もともと非常に困難なミッションなだけに、すんなりと完成に至ったわけではない。森山氏は、バックエンドに関しては、チューニングフェイズがうまくいったことが大きかったと語る。チューニングの段階では、目標とする性能を達成するべく、非常に高性能な負荷検証用クライアント(通称ぼっと君)を使用して、大規模な負荷試験を長期にわたって実施したそうだ。この“ぼっと君”はLINUXで動作するプログラムで、スクリプトによってさまざまなテストシナリオを実行できるもの。これを駆使し、さまざまな状況を想定して検証・対応をしていった結果、最終的にバックエンドは、数十万の接続がきても問題なくさばけるものに仕上げることができたという。

 さて、サービス開始後の現在の状況は、概ね負荷試験のシミュレーション通りになっているそうで、「負荷試験に手間をかけてよかったな、と思います」(森山氏)とのこと。ただし想定外のこともあったそうで、それは「旅人バザーの検索処理、コール回数が、予想の数十倍の規模になっています」(森山氏)のだそうだ。森山氏は、この部分については、工夫してさらなる性能拡張をする必要があると語る。

数十万人がプレイすることを確信して

“ドラゴンクエストXの舞台裏”サーバ・データベース開発のプロが語る、数十万人がいっしょに遊べるゲームができるまで【CEDEC 2012】_01

 最後に森山氏は、改めて負荷試験の大切さを力説。サービス開始後に発生しているトラブルもあるが、それは「原因を探ると、負荷試験が難しい箇所、テストのシナリオから漏れてしまっている箇所にあるんです」(森山氏)。森山氏がいままでに経験したプロジェクトの中で、「ダントツで時間をかけています」(森山氏)というほどの負荷試験を実施した部分については、それに見合った成果が出ていることを実感していると語る。

 また、プロジェクトを成功に導いた大きな要因として、「開発に携わったメンバー間で、目標・ビジョンの共有がはっきりできていたことが大きい」(森山氏)とも語る。森山氏は、当初、『ドラゴンクエスト』がオンラインゲームになるということで、ある程度ネガティブな反応が出ることも予想はしていたという。しかしそれでも、関係したメンバー全員が、「大勢に遊んでもらえることを信じて、仕様もサーバ構成も、すべてを“数十万人がアクセスしても大丈夫”を基準に進めました」(森山氏)という明確な目標があったからこそ、安定したバックエンドを構築できたのだと語る。

 現在も日々ユーザーを増やし、大盛況な中でサービスを続けている『ドラゴンクエストX』。その裏で、こうした地道な努力によって構築された“バックエンド”が活躍していることを思うと、ゲームの楽しさに、さらに深みが加わるかも……?