このページの本文へ

前へ 1 2 次へ

OSS DBも商用DBも、技術イベント「AWS DB Day」開催――基調講演レポート(後編)

Cygamesの「秒間10万トランザクション」大規模DB構築ノウハウ

2017年07月10日 08時00分更新

文● 大塚昭彦/TECH.ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

オンラインゲームなど大規模DB環境の設計ノウハウ、Cygames・倉林修一氏

 AWS DB Day基調講演の最後に登壇したのは、Cygames 技術顧問 兼 サイゲームスリサーチ所長の倉林修一氏だ。Cygamesが手がけるモバイルゲームアプリやテレビ連動型アプリにおいて生じる、極めて大規模なトランザクションを安定的に処理するためのスケーラブルなアーキテクチャと技術を紹介した。

Cygames 技術顧問 兼 サイゲームスリサーチ所長の倉林修一氏。「急成長するビジネスのITアーキテクチャ設計にも参考にしてもらえたら」と語った

「モバイルゲームアプリ」と「テレビ連動型アプリ」という、大規模トランザクションを処理する2つの自社事例を挙げ、アーキテクチャ設計を説明した

 Cygamesでは「神撃のバハムート」「グランブルーファンタジー」「Shadowverse(シャドウバース)」といった人気オンラインゲームタイトルをリリースしている。たとえばグランブルーファンタジーでは、3年間で1500万人の登録ユーザー数を獲得しており、「1カ月間に100万人増えるようなこともある」という。そのため、すべてのサービスではスケーラビリティが欠かせない要素となる。

 もうひとつ、オンラインゲームは「極めてデータインテンシブなアプリ」(倉林氏)であるという特徴も持つ。ゲームのバックエンドシステムでは、個々のユーザーがゲーム内で何かアクションを起こすたびに、リアルタイムにサーバー側のDBが更新されていく。その規模は通常時で秒間10万トランザクション、ピーク時で秒間20万トランザクションと、東証arrowhead(株式売買システム)やTwitterといったシステムよりも大きい。しかも、トランザクションの一貫性を保たなければ、ゲーム世界の秩序が成り立たなくなってしまう。

 「つまりゲームシステムのアーキテクチャには、強い一貫性と高いスケーラビリティ、そしてリアルタイム性が要求される」(倉林氏)。

「ゲーム世界の秩序はDBの一貫性で成り立っている」(倉林氏)。たとえば「プレイヤーのHPが150ある」ときに「治癒によりHPが100回復」「攻撃を受けHPが200減少」というデータ操作の順番(=トランザクションの一貫性)が崩れれば、ゲームは成り立たなくなる

 そうしたアーキテクチャをどう実現するか。そのポイントは「メモリ(主記憶)」と「ディスク(二次記憶)=DB」の役割だという。具体的には、頻繁に更新され一貫性が要求される動的なデータ(ユーザーの行動など)はDBに、変更のない静的なデータ(キャラクターの台詞、特定の武器の攻撃力など)はアプリケーションサーバーのメモリ上(memcached)に配置する。

 「強い一貫性が必要な状況では、メモリよりもディスク、つまりDBのほうが貴重な資源となる。このアーキテクチャは、DBをいかにして高効率にハンドリングするか、という観点から設計されている」(倉林氏)

 こうした最小構成単位(Primitive Unit)を大量に並べることで、ユーザー数の増加にも柔軟にスケールアウトできるシステムとしている。そのほか、データのシャーディング/パーティショニングを組み合わせ、なるべくDBアクセスを極小化する(1つのリクエストで複数DBにアクセスしないようにする)、JOINのような高負荷処理はマスターDBではなくレプリケーションDBで行う、といったくふうを行ったという。

EC2を用いたスケーラブルなWebアーキテクチャ。個々のユニット(Primitive Unit)単位では、メモリ上に静的データ、DB上に動的データを格納する

 もうひとつの事例は、テレビアニメ(今年4~7月放映)と連動したアプリ「グランブルーファンタジー スカイコンパス」のバックエンドシステムだ。こちらのほうが汎用的な事例として参考になるのではと、倉林氏は語る。

 Cygamesが提供するこのアプリでは、ユーザーが番組放送中にテレビ画面の動画撮影をするとゲーム内で使えるポイントを獲得できる“ビジュアルチェックイン”サービスを実施した。2次元バーコードなどではなく、アニメコンテンツ(動画)そのものを認識して認証するという画期的な取り組みだ。

放送中のテレビ画面をアプリで撮影すると、ポイントが獲得できるテレビ連動型サービスを実施した

 ただし、この番組は地上波、BS放送、インターネット放送(AbemaTV)でまったく同じ時間帯(毎週土曜日24時)に放送された。「つまり、この時間になると全国のユーザーが一斉にアクセスして、絶対に輻輳(ふくそう)するというアプリケーション事例」(倉林氏)だったわけだ。実際には30分間、CMなどを除くと24分間の番組中におよそ10万ユーザー、約30万件のリクエストが発生したという。

実際の放映時における秒間リクエスト数の推移。特に番組開始冒頭の5分間に、全体の80%以上の負荷(ピーク時で3000リクエスト/秒)が集中した

 さらに、単に静的データを照合して認証するのではなく「5秒間の動画データ」を照合するという仕組みも、このシステムの難易度を高めた。「1秒間3000リクエストで考えると、1秒間に4時間ぶんの動画データを処理する必要がある。番組終了までのトータル時間で計算すると、およそ400時間ぶんの処理となる」(倉林氏)。そのほか、レスポンス(50ミリ秒以内)や一貫性(ポイントの多重付与防止)に関する要件もあった。

 Cygamesでは、このシステムを「C++で書かれたチェックイン処理用CGI」や「Amazon Kinesis FirehoseとAmazon SQSによる『リクエスト処理』と『DB書き込み処理』の分離(非同期DB書き込み)」といったコンポーネントで実現した。

 このうちCGIでは、チェックイン処理に必要なすべてのデータがあらかじめ埋め込まれており、いわば“オンメモリDB”として、外部データへのアクセスなしで動作する仕組みになっている。これにより、高速に動作するだけでなく、処理の並列度も大きく高めることができる。なお、同一マシン上で並列動作する複数のCGIが同じメモリアドレスを読み込む設計であるため、CPUキャッシュのヒット率も高く、極めて高効率に動作したという。

テレビ連動型サービスシステムのアーキテクチャと、そこで使用したチェックイン処理用CGIの特徴

 倉林氏は、こうしたスケーラブルなアーキテクチャを構築できた背景には、上述したCGI、キューイング機構のほか、インテルAVX2のSIMD命令が使えるEC2 C4インスタンスによってサーバー単位の並列化を最大化できたこともあったとまとめた。「急成長するビジネスの現場でも、スケーラビリティの達成方法はさまざま。今回のような事例も参考に、皆さんもアーキテクチャを設計していただきたい」(倉林氏)。

* * *

 なお、同イベントの講演資料は後日、下記イベント公式サイトで公開される予定だ。

前へ 1 2 次へ

カテゴリートップへ