オンラインゲームサービスにおける MySQL活用事例

オンラインゲームサービスにおける
MySQL活用事例
2002・2 コミュニティエンジン株式会社
中嶋謙互
オンラインゲーム の特徴
オフラインゲームにくらべると…
* 身体能力を発揮して楽しむより、思考を楽しむ
内容に向く (光速の限界)
* 自分との戦いよりもコミュニケーションの
楽しさを求める内容に向く
* 静的な世界よりも動的な世界観に向く
2
ゲーム開発 vs. 一般の開発
ゲーム開発
生活に必要ではない
一般の開発
←→
「それを作りたい」から始まる←→
すぐに飽きられる
←→
生活の役に立つ
「それが必要」から始まる
役立つ限り、使い続ける
★ゲームは何の問題も解決しない。
3
典型的に違う例:予算配分
ゲーム開発の場合
一般の開発の場合
A
B
C
D
4
:
:
:
:
面白くするための部分
見た目をよくするための部分
性能(機能)をよくするための部分
信頼性を高めるための部分
繰り返されてきた議論
「ゲーム用にこういう性能のシステムがほしい」
→
→
→
→
→
→
→
5
一般のシステム開発会社に見積もりを依頼
N億円かかると言われる
信頼性はいらないのでN百万円でやってくれと交渉する
それは無理だと言われる
仕方なく自分でやることにする
オープンソースのツールを使いつつ自分で作る
できてしまいました
オンラインゲームの3類型
* Massive Multiplayer Online game
* Peer to Peer Network game
* Hybrid Network game
6
MMO型ゲーム
別名:OnlineGame
ユーザー数:数千~数万
オフラインで遊べない
7
P2P型ゲーム
Bグループ
別名:NetworkGame
ユーザー数:不明
オフラインで遊べる
Aグループ
Cグループ
8
ハイブリッド型ゲーム
Bグループ
別名:HybridNetworkGame
ユーザー数:MMOとP2Pの中間
相手探し後も多少通信する
Cグループ
Aグループ
9
今後の動向
ゲームプレイの品質向上を求めるため、
ハイブリッドもしくはMMO型が主流になっていく。
→ ますますバックエンドの重要性が高まる
10
オープンソースソフトウェアと
ゲームシステム開発の相性
相性のよい点
・
・
・
・
11
ゲームは信頼性より中身重視(極論:動けばいいとも言う)
根本的に安くしたい
ゲーム開発者はプログラミングスキルが高い
何が悪いのか、追及しやすい(かえって責任を果たせる)
オープンソースソフトウェアと
ゲームシステム開発の相性
相性のわるい点
・ OSSやUNIXを使ったことのないエンジニアが多い
・ 英語の壁
・ GPLの問題
12
ディプスファンタジアの
物理接続図
*Webは除く
*フロントエンド1台あたり
700常時接続をこなす
13
フロントエンドの特徴
* forkしないスタンドアロンサーバ
* 小さなクエリー(数十バイト)を専用プロトコルで送信
* CPU時間の90%以上をロジックが消費
* システムコールはネットワークのみ
* GCC + glibc + gdb で開発
* プログラムはクラッシュするものとして扱う
14
Dumb vs. Intelligent
Dumb なバックエンド
Intelligent なバックエンド
*
*
*
*
*
*
*
*
単機能
高速
チューンしやすい
堅牢
多機能
高速にできるかも
チューンしにくい
堅牢にできるかも
MySQLは、どっち?
15
テーブルの構造:極めて単純
*全てのテーブルを同じ構造にした
*不要なものもいくつかあった
16
クエリーの内容:極めて単純
select data from charinfo where uid=X;
insert into charinfo values ( X, Y , Z);
update from charinfo where uid=X and slotid=Z;
delete from charinfo where uid=X and slotid=Z;
17
アクセスパターン
書き込みのほうが、読み込みよりも多い
(insert,update)
(select)
読み : 書き
最低
ディプスファンタジア
普通の検索エンジン等
18
1 : 1
1 : 100
100 : 1
ベンチマーク時の性能(MyISAM)
4バイトのデータの場合(select)
40Kバイトのデータの場合(select)
*Update はselectの7割だった
19
実運用でピーク時の性能
40KBのデータを毎秒50~80回保存、5回読み込み
ベンチマークでは150回以上保存している。
* 1GHz P3×2 512M メモリのマシン
* bdflushやギガビットのチューンでもっと速くなりそう
→ ディスクの使い方に関するチューンパラメータがほしい
*現在までMySQLが原因でクラッシュしたことはない
20
現場のエンジニアの意見
*SQLは名前を知っているだけだったが、今回必要な
分に関しては、すぐに覚えられた。
*MySQLがなかなかインストールできなかった。
*Linuxのコマンドを覚えるのが大変だった。
*Emacsは嫌だがSambaで何とかなった。
*MySQLは日本語のドキュメントがある方だったので
よかった
*ゲーム作りついでにWeb掲示板も作ってみた。
21
コミュニティエンジンでの経験
*TCP_NODELAYの問題などは、ソースがないと
なかなか分析・解決できなかった。
*mediumblob の失敗 → チューン
*MySQLチューンよりカーネルチューンのほうが面倒。
多くの時間を、ディスクやメモリのチューン、ギガビット
のチューンに取られる。
*MySQLはマシン性能から予想される最高性能が出る
22
結論。
MySQLを使うと、オンラインゲームサービス用の
システム製作で要求される価格対性能比を実現できる。
ただしそのためには、C言語や英語など、OSSを使い
こなすためのスキルが若干は必要。
23
拡張性:単純な分割
A
B
C
台湾では6群あるが、不足している
24
拡張性:静的balancing(論理図)
クライアントからの要求
静的に振り分け
A
B
C
D
E
フロントエンドに付けた balancer が、ユニークキーに基づいて静的に振りわける
25
ゲームシステム開発 今後の課題
*静的 balancing の実装と試験
*スクリプト言語を使った開発効率の向上
*脱GPL化
*MySQL への要望 (API、I/Oの使い方)(脱MySQL??)
*クラスターシステムのメンテナンスツール
*Gigabitなどの安くて速いデバイスでの実績
26
チュートリアルの内容公開URL
Http://www.vce-lab.net/osdb/
の予定(未完成)
27