Enviar búsqueda
Cargar
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
•
104 recomendaciones
•
67,698 vistas
infinite_loop
Seguir
2012年のオープンソースカンファレンス北海道(OSC-do)でセミナー発表した際に使用したスライド資料です。
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 35
Descargar ahora
Descargar para leer sin conexión
Recomendados
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
MagicOnion入門
MagicOnion入門
torisoup
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
Más contenido relacionado
La actualidad más candente
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
Manabu Koga
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
sairoutine
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
Daisaku Mochizuki
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
例外設計における大罪
例外設計における大罪
Takuto Wada
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
La actualidad más candente
(20)
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
Twitterのsnowflakeについて
Twitterのsnowflakeについて
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
例外設計における大罪
例外設計における大罪
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
TLS, HTTP/2演習
TLS, HTTP/2演習
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Destacado
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
infinite_loop
Amebaソシャゲ分析事例のご紹介
Amebaソシャゲ分析事例のご紹介
Masanori Takano
データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~
データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~
Daisuke Nogami
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
Takahiro YAMAGUCHI
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
MySQL Index勉強会外部公開用
MySQL Index勉強会外部公開用
CROOZ, inc.
Destacado
(6)
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
Amebaソシャゲ分析事例のご紹介
Amebaソシャゲ分析事例のご紹介
データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~
データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
MySQL Index勉強会外部公開用
MySQL Index勉強会外部公開用
Similar a 大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
Kentaro Matsui
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
Kouji Matsui
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -
Tomoya Kabe
OSC福岡 20111203
OSC福岡 20111203
Hiroshi Bunya
Firebug×smart release20120904
Firebug×smart release20120904
Masayuki Abe
2006-04-22 CLR/H #14 .NET and open source
2006-04-22 CLR/H #14 .NET and open source
Yoshiyuki Nakamura
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
Fumihito Yokoyama
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Developers Summit
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
Kazuaki Tanaka
GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方
Hiroyuki Tanaka
Osc2008 Opensuse Moonlinx
Osc2008 Opensuse Moonlinx
Kazuhisa Hara
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
テスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめ
kinunori
20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
DIVE INTO CODE Corp.
PHPアプリの品質を(ある程度)保つために出来る事 〜組織編〜
PHPアプリの品質を(ある程度)保つために出来る事 〜組織編〜
Katsuhiro Miura
ななめ45°から見たJavaOne
ななめ45°から見たJavaOne
AdvancedTechNight
Similar a 大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
(20)
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -
OSC福岡 20111203
OSC福岡 20111203
Firebug×smart release20120904
Firebug×smart release20120904
2006-04-22 CLR/H #14 .NET and open source
2006-04-22 CLR/H #14 .NET and open source
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方
Osc2008 Opensuse Moonlinx
Osc2008 Opensuse Moonlinx
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
テスト駆動で行うネットワーク自動化のすすめ
テスト駆動で行うネットワーク自動化のすすめ
20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
PHPアプリの品質を(ある程度)保つために出来る事 〜組織編〜
PHPアプリの品質を(ある程度)保つために出来る事 〜組織編〜
ななめ45°から見たJavaOne
ななめ45°から見たJavaOne
Más de infinite_loop
ChatGPT触ってみた
ChatGPT触ってみた
infinite_loop
社内ソフトスキルを考える
社内ソフトスキルを考える
infinite_loop
3Dプリンタって いいね
3Dプリンタって いいね
infinite_loop
VRChatでお酒が注げる飲み物アセットの紹介
VRChatでお酒が注げる飲み物アセットの紹介
infinite_loop
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdf
infinite_loop
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
infinite_loop
500万行のPHPプロジェクトにおけるログ出力の歩み
500万行のPHPプロジェクトにおけるログ出力の歩み
infinite_loop
ADRという考えを取り入れてみて
ADRという考えを取り入れてみて
infinite_loop
リファクタリングで実装が○○分短縮した話
リファクタリングで実装が○○分短縮した話
infinite_loop
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
infinite_loop
楽しいVR空間を作る技術と支える技術 #osc19do
楽しいVR空間を作る技術と支える技術 #osc19do
infinite_loop
Start rl with_unity_machine_learning_agents
Start rl with_unity_machine_learning_agents
infinite_loop
UniRx の1歩目
UniRx の1歩目
infinite_loop
がんばれ PHP Fiber
がんばれ PHP Fiber
infinite_loop
心に残った名前ランキング
心に残った名前ランキング
infinite_loop
プログラムと名前にまつわる座談会
プログラムと名前にまつわる座談会
infinite_loop
名は体を表していますか
名は体を表していますか
infinite_loop
名前の力
名前の力
infinite_loop
大切な名前[Intro]公開版
大切な名前[Intro]公開版
infinite_loop
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
infinite_loop
Más de infinite_loop
(20)
ChatGPT触ってみた
ChatGPT触ってみた
社内ソフトスキルを考える
社内ソフトスキルを考える
3Dプリンタって いいね
3Dプリンタって いいね
VRChatでお酒が注げる飲み物アセットの紹介
VRChatでお酒が注げる飲み物アセットの紹介
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdf
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
500万行のPHPプロジェクトにおけるログ出力の歩み
500万行のPHPプロジェクトにおけるログ出力の歩み
ADRという考えを取り入れてみて
ADRという考えを取り入れてみて
リファクタリングで実装が○○分短縮した話
リファクタリングで実装が○○分短縮した話
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
楽しいVR空間を作る技術と支える技術 #osc19do
楽しいVR空間を作る技術と支える技術 #osc19do
Start rl with_unity_machine_learning_agents
Start rl with_unity_machine_learning_agents
UniRx の1歩目
UniRx の1歩目
がんばれ PHP Fiber
がんばれ PHP Fiber
心に残った名前ランキング
心に残った名前ランキング
プログラムと名前にまつわる座談会
プログラムと名前にまつわる座談会
名は体を表していますか
名は体を表していますか
名前の力
名前の力
大切な名前[Intro]公開版
大切な名前[Intro]公開版
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
Último
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
Matsushita Laboratory
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
arts yokohama
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
Ayachika Kitazaki
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
Tetsuya Nihonmatsu
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
Sadao Tokuyama
2024 03 CTEA
2024 03 CTEA
arts yokohama
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
ssuser539845
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
Shumpei Kishi
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
arts yokohama
2024 04 minnanoito
2024 04 minnanoito
arts yokohama
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
ssuser370dd7
Último
(12)
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
2024 03 CTEA
2024 03 CTEA
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 04 minnanoito
2024 04 minnanoito
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
大規模ソーシャルゲームを支える技術~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.
ご静聴ありがとうございました
Descargar ahora