Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
infinite_loop
PDF, PPTX
68,686 views
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
2012年のオープンソースカンファレンス北海道(OSC-do)でセミナー発表した際に使用したスライド資料です。
Technology
◦
Read more
104
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 35
2
/ 35
Most read
3
/ 35
4
/ 35
5
/ 35
6
/ 35
7
/ 35
8
/ 35
9
/ 35
10
/ 35
11
/ 35
12
/ 35
13
/ 35
14
/ 35
15
/ 35
16
/ 35
17
/ 35
18
/ 35
19
/ 35
20
/ 35
21
/ 35
22
/ 35
23
/ 35
24
/ 35
25
/ 35
26
/ 35
27
/ 35
28
/ 35
29
/ 35
30
/ 35
31
/ 35
32
/ 35
33
/ 35
34
/ 35
35
/ 35
More Related Content
PDF
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
PDF
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
by
infinite_loop
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
PDF
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
PDF
マルチテナント化で知っておきたいデータベースのこと
by
Amazon Web Services Japan
PPTX
初心者向けMongoDBのキホン!
by
Tetsutaro Watanabe
PPTX
WayOfNoTrouble.pptx
by
Daisuke Yamazaki
PDF
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
by
infinite_loop
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
ソーシャルゲーム案件におけるDB分割のPHP実装
by
infinite_loop
マルチテナント化で知っておきたいデータベースのこと
by
Amazon Web Services Japan
初心者向けMongoDBのキホン!
by
Tetsutaro Watanabe
WayOfNoTrouble.pptx
by
Daisuke Yamazaki
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
What's hot
PPTX
ゲームエンジニアのためのデータベース設計
by
sairoutine
PDF
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
by
Manabu Koga
PDF
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
by
infinite_loop
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
by
Yoshifumi Kawai
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
PDF
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
PDF
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
PDF
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
by
Amazon Web Services Japan
PDF
マイクロサービス 4つの分割アプローチ
by
増田 亨
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
by
JustSystems Corporation
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
by
Mikiya Okuno
PDF
例外設計における大罪
by
Takuto Wada
PDF
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
by
NTT DATA Technology & Innovation
PDF
イミュータブルデータモデル(世代編)
by
Yoshitaka Kawashima
PDF
マイクロサービスバックエンドAPIのためのRESTとgRPC
by
disc99_
PDF
ドメイン駆動設計に15年取り組んでわかったこと
by
増田 亨
PDF
GoによるWebアプリ開発のキホン
by
Akihiko Horiuchi
PPTX
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
by
慎一 古賀
ゲームエンジニアのためのデータベース設計
by
sairoutine
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
by
Manabu Koga
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
by
infinite_loop
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
by
Yoshifumi Kawai
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
by
Amazon Web Services Japan
マイクロサービス 4つの分割アプローチ
by
増田 亨
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
by
JustSystems Corporation
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
by
Mikiya Okuno
例外設計における大罪
by
Takuto Wada
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
by
NTT DATA Technology & Innovation
イミュータブルデータモデル(世代編)
by
Yoshitaka Kawashima
マイクロサービスバックエンドAPIのためのRESTとgRPC
by
disc99_
ドメイン駆動設計に15年取り組んでわかったこと
by
増田 亨
GoによるWebアプリ開発のキホン
by
Akihiko Horiuchi
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
by
慎一 古賀
Similar to 大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
PDF
地方企業がソーシャルゲーム開発を成功させるための10のポイント
by
Kentaro Matsui
PDF
PHPで大規模ブラウザゲームを開発してわかったこと
by
Kentaro Matsui
PPTX
MySQLの運用でありがちなこと
by
Hiroaki Sano
PPTX
大規模トラフィックにどのように備えて負荷対策を実施しているのか?
by
Yusuke Shirakawa
KEY
ゆるかわPhp
by
Ryota Mochizuki
PDF
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
by
Akihiro Kuwano
PPT
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
by
Kazuho Oku
PDF
DMMのゲームプラットフォームで利用している技術やシステム構成、レガシーシステムが抱える課題、解決のためのシステムリプレイスの進め方
by
DMM_GAMES_PF
PDF
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
by
KLab株式会社
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編 2015
by
infinite_loop
PDF
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
by
hideyuki ikeda
PDF
【Hpcstudy】みんな、ベンチマークどうやってるの?
by
Seiichiro Ishida
PDF
Aws privte20110406 arai
by
awsadovantageseminar
PDF
Zynga
by
awsadvantageseminar
PPTX
初心者向け負荷軽減のはなし
by
Oonishi Takaaki
PDF
Phpconf2010
by
KLab株式会社
PPT
大ヒットソーシャルアプリの裏側
by
KLab株式会社
PDF
0730 bp study#35発表資料
by
Yasuhiro Horiuchi
KEY
NHN techcon-20120519-fujimoto
by
Masaki Fujimoto
PDF
qpstudy#5 懇親会LT riywo
by
Ryosuke IWANAGA
地方企業がソーシャルゲーム開発を成功させるための10のポイント
by
Kentaro Matsui
PHPで大規模ブラウザゲームを開発してわかったこと
by
Kentaro Matsui
MySQLの運用でありがちなこと
by
Hiroaki Sano
大規模トラフィックにどのように備えて負荷対策を実施しているのか?
by
Yusuke Shirakawa
ゆるかわPhp
by
Ryota Mochizuki
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
by
Akihiro Kuwano
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
by
Kazuho Oku
DMMのゲームプラットフォームで利用している技術やシステム構成、レガシーシステムが抱える課題、解決のためのシステムリプレイスの進め方
by
DMM_GAMES_PF
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
by
KLab株式会社
新入社員のための大規模ゲーム開発入門 サーバサイド編 2015
by
infinite_loop
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
by
hideyuki ikeda
【Hpcstudy】みんな、ベンチマークどうやってるの?
by
Seiichiro Ishida
Aws privte20110406 arai
by
awsadovantageseminar
Zynga
by
awsadvantageseminar
初心者向け負荷軽減のはなし
by
Oonishi Takaaki
Phpconf2010
by
KLab株式会社
大ヒットソーシャルアプリの裏側
by
KLab株式会社
0730 bp study#35発表資料
by
Yasuhiro Horiuchi
NHN techcon-20120519-fujimoto
by
Masaki Fujimoto
qpstudy#5 懇親会LT riywo
by
Ryosuke IWANAGA
More from infinite_loop
PDF
ゲームのインフラをAwsで実戦tips全て見せます
by
infinite_loop
PDF
ADRという考えを取り入れてみて
by
infinite_loop
PDF
名は体を表していますか
by
infinite_loop
PDF
UniRx の1歩目
by
infinite_loop
PDF
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
by
infinite_loop
PDF
アニメーションとスキニングをBurstで独自実装する.pdf
by
infinite_loop
PDF
がんばれ PHP Fiber
by
infinite_loop
PDF
リファクタリングで実装が○○分短縮した話
by
infinite_loop
PDF
VRChatでお酒が注げる飲み物アセットの紹介
by
infinite_loop
PDF
Start rl with_unity_machine_learning_agents
by
infinite_loop
PDF
楽しいVR空間を作る技術と支える技術 #osc19do
by
infinite_loop
PDF
プログラムと名前にまつわる座談会
by
infinite_loop
PDF
名前の力
by
infinite_loop
PDF
大切な名前[Intro]公開版
by
infinite_loop
PDF
社内ソフトスキルを考える
by
infinite_loop
PDF
ChatGPT触ってみた
by
infinite_loop
PDF
心に残った名前ランキング
by
infinite_loop
PDF
3Dプリンタって いいね
by
infinite_loop
PDF
500万行のPHPプロジェクトにおけるログ出力の歩み
by
infinite_loop
PDF
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
by
infinite_loop
ゲームのインフラをAwsで実戦tips全て見せます
by
infinite_loop
ADRという考えを取り入れてみて
by
infinite_loop
名は体を表していますか
by
infinite_loop
UniRx の1歩目
by
infinite_loop
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
by
infinite_loop
アニメーションとスキニングをBurstで独自実装する.pdf
by
infinite_loop
がんばれ PHP Fiber
by
infinite_loop
リファクタリングで実装が○○分短縮した話
by
infinite_loop
VRChatでお酒が注げる飲み物アセットの紹介
by
infinite_loop
Start rl with_unity_machine_learning_agents
by
infinite_loop
楽しいVR空間を作る技術と支える技術 #osc19do
by
infinite_loop
プログラムと名前にまつわる座談会
by
infinite_loop
名前の力
by
infinite_loop
大切な名前[Intro]公開版
by
infinite_loop
社内ソフトスキルを考える
by
infinite_loop
ChatGPT触ってみた
by
infinite_loop
心に残った名前ランキング
by
infinite_loop
3Dプリンタって いいね
by
infinite_loop
500万行のPHPプロジェクトにおけるログ出力の歩み
by
infinite_loop
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
by
infinite_loop
Recently uploaded
PPTX
楽々ナレッジベース「楽ナレ」3種比較 - Dify / AWS S3 Vector / Google File Search Tool
by
Kiyohide Yamaguchi
PDF
流行りに乗っかるClaris FileMaker 〜AI関連機能の紹介〜 by 合同会社イボルブ
by
Evolve LLC.
PDF
エンジニアが選ぶべきAIエディタ & Antigravity 活用例@ウェビナー「触ってみてどうだった?Google Antigravity 既存IDEと...
by
NorihiroSunada
PDF
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup
by
Masaki Yamakawa
PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #2
by
Tasuku Takahashi
PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #1
by
Tasuku Takahashi
楽々ナレッジベース「楽ナレ」3種比較 - Dify / AWS S3 Vector / Google File Search Tool
by
Kiyohide Yamaguchi
流行りに乗っかるClaris FileMaker 〜AI関連機能の紹介〜 by 合同会社イボルブ
by
Evolve LLC.
エンジニアが選ぶべきAIエディタ & Antigravity 活用例@ウェビナー「触ってみてどうだった?Google Antigravity 既存IDEと...
by
NorihiroSunada
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup
by
Masaki Yamakawa
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #2
by
Tasuku Takahashi
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #1
by
Tasuku Takahashi
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
1.
表紙 大規模ソーシャルゲームを支える技術
2.
※ご注意※ 表紙のイメージはパロディです 本発表は、技術評論社さんの
「○○を支える技術」シリーズとは ⼀切関係ありません m(_ _)m 新刊のMobageを支える技術 〜ソーシャルゲームの舞台裏〜 とても楽しみにしています
3.
自己紹介(1) 松井 健太郎
札幌出身、札幌在住 ke-tai.org 管理⼈ コーラとバイクツーリングが好き 株式会社インフィニットループ代表
4.
自己紹介(2) 株式会社インフィニットループ 北海道札幌市のソフトウェア開発会社
開発実績(主にサーバサイドを担当) ブラウザ三国志(2009) 英雄クエスト(2010) Lord of Knights(2012) クイーンズブレイド THE CONQUEST (2012) ※プログラム開発のみを担当しており、企画・運営は⾏っておりません
5.
Vim検定 先日「Vim検定」をリリースしました Vim⼒がぐんぐんと上昇してvimrcも⻑くなる :helpに変わる革新的なVimの学習手段 ※収益の一部(今のところ全部)は、ウガンダの恵まれない子供たちの援助に使用させていただいております
6.
PHP検定 全国1000万人のPHPerのために開発 PHP⼒がぐんぐんと上昇してphp.iniも⻑くなる(?) www.php.net/manual/ja/ に代わる革新的なPHPの学習手段 iPhone/Android両対応
近日公開予定!
7.
あいえるたん作りました インフィニットループのマスコットキャラクター 「あいえるたん」を作りました。
8.
本日の内容 最近のソーシャルゲーム開発事情について インフラについて
言語やフレームワークについて 負荷対策について(Web編) 負荷対策について(DB編) 負荷テストについて 参考にしている情報について まとめ
9.
今回は、 ソーシャルゲーム開発で よく聞かれる質問を、 QA形式でまとめてみました
10.
一番よく聞かれる質問
11.
Q. で、最近どうなの??
12.
Q. で、最近どうなの??(1) A. 以前と比べるといろいろ起きているかも? ソーシャルゲームがニュースで話題になることが増えた →
ドリランド増殖およびそれに付随するRMT問題 → コンプガチャ騒動 → なんだか世間の風当たりが強くなった → 後ろめたいものを作っているつもりはない → エンジニアとしては技術に集中したい 実際の影響は、今のところ無い → 特に自分の周りに関してはあまり影響が無いようだ → ただし周りの全然ソーシャルゲームに興味がなかった人までが、 「大丈夫?」と聞いてくるという影響が
13.
Q. で、最近どうなの??(2) 開発者から⾒た最近のソーシャルゲーム開発 スマホが主戦場になってきている → ネイティブアプリはもちろん、Mobage・GREEも →
ガラケー界隈は少し落ち着いて来た印象 → PC向けのゲーム(主にFlashを使用)は安定した需要 やっぱり全然人は足りていない → クライアント・サーバ・インフラなど全てが足りない → DBA(DataBase Administrator)が重宝される → HTML5+JSエンジニアのニーズが増えそう → とはいえ二極化が始まり、なんちゃっての業者/エンジニアは そろそろ淘汰されはじめるかも
14.
Q. で、最近どうなの??(3) 少しずつ変わっていくソーシャルゲーム開発 役割の変化 → 開発規模の拡大に伴いエンジニア求められるものも変わってきた →
役割分担の明確化(エンジニア≠企画、餅は餅屋に、歴史は繰り返す) 求められる能⼒ → 継戦能⼒(続く運営・アップデート、終わりがない) → 情報の横への共有化、他者/他社への展開能⼒ → 安定したリソース提供、⻑期を⾒越した教育スキームの確⽴ → 海外展開能⼒ ソーシャルゲーム以外への応用も → 高負荷Webサービスへの回帰、ゲーミフィケーションへの応用 → 従来のコンシューマーゲームのネット化とそのバックエンド開発
15.
Q. インフラは どうしていますか?
16.
Q. インフラはどうしていますか?(1) A. 最近では国内のクラウドサービスを利⽤しています GMOクラウドを使うことが多いです、あとはAWS (ステマじゃないです) 【インフラ選びは非常に大事!!】 こんなポイントを⾒て選んでいます →
コストや安定度(障害履歴)は当然⾒る → 共有LBがあり、それが強⼒であること → インスタンスの追加が容易で速いこと(電話やメールとかは論外) → ディスクへのI/Oが速く安定していること → ⾼価でも強⼒なスペックのインスタンスが⽤意されている、 または物理マシンとの併⽤が可能(最後の⼿段的な使い⽅)
17.
Q. インフラはどうしていますか?(2) サーバ構成について 下記のような構成です(どの案件でも大体同じ)
www: Apache2.2系 PHP5.3系+APC DB: MySQL5.5系 + MHA KVS: memcached, KyotoTycoon その他: rsyslog, cacti, MyDNS
18.
Q. 言語やフレームワークは 何を使っていますか?
19.
Q. 言語やフレームワークは何をつかっていますか A. 言語は主にPHPを使っていますが、
何でもいいと思います。フレームワークは自作です 開発言語 → PHP, Perl, Rubyあたりをよく聞く → 得意な言語でよいと思うが、開発リソースの補充や、 新⼈教育が容易な⾔語が向いている フレームワーク → 自作フレームワークを使っている → 以前はあえてのベタ書きだったが、開発効率や再利⽤性など の⾯からフレームワークを作成し利⽤するように → symfonyなどの既存フレームワークを改造して使っている などの話しも聞くが、最終的には魔改造されているようだ
20.
Q. 負荷テストは どうしていますか?
21.
Q. 負荷テストはどうしていますか?(1) A. JMeterを使ってやっています まずはテストプレイなどから数値目標を⽴てる ・予想される同時接続数 ・1ユーザが1プレイで操作する時間 ・1ユーザが1分間に⾏うリクエストの数 【例】 同時接続数:
10000人(同時接続数とは1時間で接続があったユニークユーザ数とする) 1ユーザが操作する時間: 10分操作し続けて離脱と想定 1ユーザが1分間に⾏う平均リクエスト数: 5回 → 10分間の同時接続ユーザ数: 10000 / 6 = 1667ユーザ → 1分間にリクエストされる回数: 1667 * 5 = 8335回 → 1秒間にリクエストされる回数: 8335 / 60 = 139回 = 平均「139リクエスト/秒」を満たせればよい
22.
Q. 負荷テストはどうしていますか?(2) JMeterでシナリオを作る ・なるべく実際の操作に近いシナリオにする ・作成の手間がかかりすぎないようにする ・全部をシナリオに⼊れるのは無理なので重い処理ランキングを元に、 利⽤頻度と処理の重さを考慮して配分する クラウド上にJMeterクライアントを複数台⽤意して⼀⻫実⾏ 想定した数値目標をクリアできるかを確かめる ダメならチューニング⇒測定を繰り返す
23.
Q. 負荷対策は どうしていますか?
24.
Q. 負荷対策はどうしていますか?(1) A. 負荷対策にも色々あるので順に説明します 大きく二つに分けて対策 →
共通部分(フレームワーク)の高速化 → 個別ページやAPIの高速化 共通部分はあらゆる処理で呼ばれることになる つまり1ms早くなれば、1000リクエストなら1000倍違う 費用対効果が高い共通部分を優先して対処し、 その後に個別のプログラムを対処していく
25.
Q. 負荷対策はどうしていますか?(2) 実際に使われている負荷対策チェックリスト 【共通処理編】 (1) 共通処理内で何をしているかを全て把握しているか →
どういう処理が⾏われるか、SQLは何回流れているか、などを完全に把握すること → 共通部分に処理を⾜すときは、かならずチーム内で許諾を取ること (2) そもそも、その処理は本当に必要なのか → 最も効果的な負荷対策は、処理の速度を速めるより処理⾃体を無くすことである → 特にクライアント - サーバ型のアプリの場合は、相当処理が削れる → クライアント側でキャッシュや処理できるような処理がないか⾒直す (3) キャッシュはできないか → APCキャッシュ > memcache >>>>> MySQL の順で速い (APCはWebサーバ単位でのキャッシュであることに注意) → 共通処理内では、SQL実⾏回数がゼロが望ましい
26.
Q. 負荷対策はどうしていますか?(3) (4) 無駄なものの発⾒ →
無駄なrequireを潰すにはオートロードの導入が楽 → XHProfのcallgraphでチェック → Jenkinsや自作スクリプトで、 無駄な定数や使われていないメソッドなどを掃除 (5) その他注意点 → ロガーやエラーハンドラなど、思わぬところがネックになることもあるので、 呼ばれる回数が多いものは、必ずチェック&チューニングすること → $_SESSIONの利⽤は最低限に留めること
27.
Q. 負荷対策はどうしていますか?(4) 実際に使われている負荷対策チェックリスト 【個別処理編】 (1) 遅いPHPランキングを作る(モグラ叩き法) →
実⾏速度を記録する仕掛けを作り、最も遅くて呼ばれる回数の多い順に対処 → Apacheログからanalogなどで集計する方法も (2) SQLの⾒直し → 遅い場合のほとんどはSQLが原因で遅い(アプリロジックでの負荷軽減は難しい) → 実際の本番とデータ数が違うと参考にならない、データは常に多めに入れておくこと → インデックス未使用のクエリやスロークエリログに載ってくるクエリを潰す → mk-query-digestで早くても実⾏回数の多いクエリを発⾒しチューニング → cactiなどのグラフから問題を発⾒する (3) 仕様で⾒直す → 仕様をほぼ満たしつつも、影響なくルーズに作れるところがないかを常に検討 → どうしてもダメなら仕様の⾒直しを相談
28.
Q. 負荷対策はどうしていますか?(5) DBマスターの負荷対策 負荷対策の基本は「サーバ台数を増やして対処すること」である。 ただしWebサーバやDBスレイブは、台数を増やすことで対応できるが、 DBマスターは単純には増やすことができないため、ここがネックとなる。 よって、負荷をなるべく他のサーバに分散する必要が出てくる KVS(memcachedなど) に向ける →
情報が古い可能性があることに注意、トランザクション処理にはあまり使えない DBスレイブに向ける → 通常はスレイブに接続し、トランザクション開始(BEGIN)でマスターに接続する (フレームワークレベルで実装) → マスターオンリーで開発を進め、安全なクエリから順にKVSやスレーブに 振っていくやり方も → インフラの構築方針にも絡んでくる
29.
Q. 負荷対策はどうしていますか?(6) DBマスター分割 複数ワールドに分けられないタイプのゲームや、同時収容人数の 多いゲームの場合、マスター分割は避けて通ることができない。 垂直分割 → 切り離しやすいテーブルを他のDBに持って⾏く(例:掲示板だけ別DB) 水平分割 →
ユーザID単位で分割する → グローバルDBを持ち、そこにユーザIDと格納DBを記録したテーブルを持つ → 新規登録時には最もアクティブユーザ数の少ないDBに登録 現状はアプリ側で複数のDBを順にトランザクション開始⇒コミットしている → 分割DBが多くなるほど性能が劣化する → バックアップ時の整合性や、エラー時の処理が⼤変 → ユーザ間の関わりが強いようなアプリは作りづらい → MySQL Clusterに期待したい
30.
Q. 負荷対策はどうしていますか?(7)
ロック競合対策 負荷はかかっていないがパフォーマンスが出ない、 Lock wait timeoutが多発する、などの場合はロック競合を疑う マスター分割されている場合は、 デッドロック検出がされないので更に厄介 【対策】 トランザクション時間は可能な限り短く → アプリ側に検出の仕掛けをいれている → MySlowTranCaptureなどのツールを活用 ロックが多くかかるテーブルは細かく分ける → ⾏ロックをかけるので、2つのポイントを同時に更新できない → ポイント系のテーブルなどで陥りがちな罠 user_point_tbl user_energy_point_tbl user_battle_point_tbl × ・user_id ○ ・user_id ・user_id ・energy_point ・energy_point ・battle_point ・battle_point
31.
Q. 参考にしている 情報は何ですか?
32.
Q. 参考にしている情報は何ですか?(1) A. 愛読書をご紹介します ・Webエンジニアのためのデータベース技術[実践]入門 松信嘉範氏著 →
後半、特に12章はソーシャルゲーム開発者は必読 ・エキスパートのためのMySQL[運用+管理] トラブルシューティングガイド 奥野幹也氏著 → 通称「鍵本」、ロックを理解するのにオススメ ・Mobageを支える技術 〜ソーシャルゲームの舞台裏〜 DeNA著 → 出たばかり、まだ読めてないけど超期待 技術書以外だと ・雑誌としてWEB+DB PRESS、SoftwareDesign ・とりあえず、はてぶの「コンピュータ・IT」カテゴリは全部⾒てます
33.
まとめ ソーシャルゲーム開発も色々変わりつつある 求められるものの変化に柔軟に対応していきたい
インフラには国内クラウドが良いのではないか フレームワークは自作がオススメ 負荷対策はテストとチェックリストを作って淡々と対策 DBマスターの負荷軽減が肝となる 基本に忠実に鉄板構成で、ただし⾏けるところはガンガンと 大変なことも多いけど楽しいです、楽しむことが重要 いつも感謝の心を忘れずに
34.
求人募集 株式会社インフィニットループではエンジニアを募集しています 社⻑も含めほぼ全てがプログラマで技術者に優しい環境 勤務地:北海道札幌市
おいしい食べ物いっぱい、自然いっぱい、花粉少ない、涼しい 短い通勤時間、徒歩や⾃転⾞で通勤10分とかもザラ Uターン、Iターン大歓迎 PHP開発エンジニア スマホ開発エンジニア MySQLエンジニア インフラエンジニア
35.
ご静聴ありがとうございました
Download