Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策
Search
Infiniteloop
July 12, 2023
Programming
0
19
ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策
2012年8月30日に北海道大学で行われた「Cloud Week 2012@北海道大学 ~クラウド技術の最先端を探る~」の講演発表で使用した資料。
Infiniteloop
July 12, 2023
Tweet
Share
More Decks by Infiniteloop
See All by Infiniteloop
俺の PHP プロファイラの話 PHP スクリプトで PHP 処理系のメモリをのぞき込む
infiniteloop_inc
0
270
心理的安全性を学び直し、 「いい組織とは何か?」を考えてみる
infiniteloop_inc
0
340
ゼロからつくる 2D物理シミュレーション ~物理現象をコードに落とし込む方法~
infiniteloop_inc
0
410
詫び石の裏側
infiniteloop_inc
0
370
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
6
25k
リファクタリングで実装が○○分短縮した話
infiniteloop_inc
0
140
ADRという考えを取り入れてみて
infiniteloop_inc
0
130
500万行のPHPプロジェクトにおけるログ出力の歩み
infiniteloop_inc
0
110
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
infiniteloop_inc
0
83
Other Decks in Programming
See All in Programming
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
520
受け取る人から提供する人になるということ
little_rubyist
0
230
型付き API リクエストを実現するいくつかの手法とその選択 / Typed API Request
euxn23
8
2.2k
初めてDefinitelyTypedにPRを出した話
syumai
0
410
CSC509 Lecture 12
javiergs
PRO
0
160
Better Code Design in PHP
afilina
PRO
0
130
「今のプロジェクトいろいろ大変なんですよ、app/services とかもあって……」/After Kaigi on Rails 2024 LT Night
junk0612
5
2.1k
Generative AI Use Cases JP (略称:GenU)奮闘記
hideg
1
290
Realtime API 入門
riofujimon
0
150
最新TCAキャッチアップ
0si43
0
140
Jakarta EE meets AI
ivargrimstad
0
160
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
170
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Building Applications with DynamoDB
mza
90
6.1k
Facilitating Awesome Meetings
lara
50
6.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
How STYLIGHT went responsive
nonsquared
95
5.2k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
For a Future-Friendly Web
brad_frost
175
9.4k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Bash Introduction
62gerente
608
210k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
A better future with KSS
kneath
238
17k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Transcript
ؙপૠெ९ش३কঝ।ش॑ ੍ؙइॊૼ ؙ ॡছक़ॻ॑ણ৷खञৈৌੁ ઙૄভॖথইॕॽॵॺঝشউ ؙૈ੩ 健太郎
ঽഞງஂ ૈ੩ 健太郎 ైචলମؚైචક উটॢছঐ ke-tai.org 管理⼈ ॥شছधংॖॡॶشজথॢऋऌ ઙૄভॖথইॕॽॵॺঝشউ৻
ঽഞງஂ ઙૄভॖথইॕॽॵॺঝشউ 北海道札幌市のソフトウェア開発会社 ৫ৰౚقप१شং१ॖॻ॑૿ਊك ؙঈছक़२ਕবಂ(2009) ؙஶॡग़५ॺ(2010) ؙLord of Knights(2012)
ؙॡॖشথ६ঈঞॖॻ THE CONQUEST (2012) ※プログラム開発のみを担当しており、企画・運営は⾏っておりません
9LPਫ਼ 9LP⼒がぐんぐんと上昇してYLPUFも⻑くなる KHOSपॎॊৗऩ9LPभ৾ಆু پઽஇभमؚक़फ़থॲभ౩ऽोऩःञठभରஃपઞ৷औचथःञटःथउॉऽघ
3+3ਫ਼ ৸বਐযभ3+3HUभञीप৫ 3+3⼒がぐんぐんと上昇してSKSLQLも⻑くなる ء ZZZSKSQHWPDQXDOMD प৻ॎॊৗऩ3+3भ৾ಆু L3KRQHط$QGURLGৌૢ ਁ৫آ
ँःइॊञ॒ॉऽखञ ॖথইॕॽॵॺঝشউभঐ५॥ॵॺय़কছॡॱش َँःइॊञُ॒॑ॉऽखञ؛
মभઍ ਈभ९ش३কঝ।ش৫হੲपणःथ ॖথইছपणःथ ୁृইঞشডشॡपणःथ ৌੁपणःथق:HEౣك ৌੁपणःथق'%ౣك ॸ५ॺपणःथ અपखथःॊੲਾपणःथ ऽधी
ਈभ९ش३কঝ।شহੲ ᾧ ᾧ ᾧ ᾧ
९ش३কঝ।شधम ९ش३কঝ।شقஶୁ 6RFLDO *DPHكमؚ९ش३কঝ؞ॿॵॺডشय़থॢ؞१ شঅ५ق616كदऔोؚभঘش२شध॥গॽॣش३ঙথ॑धॉऩऋैউ ঞॖघॊड़থছॖথ।ش؞ঈছक़२।شदँॊ؛ মदमॢজشऋਈੂप९ش३কঝ।شभ॑৫खؚजभॹॕش؞ग़ॾ؞ ग़شऋઈघॊఝਗ਼ਵऐ१شঅ५ؚঔং।شॱक़থऋ॑৫खञِჁ൯ট ডॖখঝّऋனभऽॉधऩढञ؛年াपम616বਈপুभॡ३ॕऋ َPL[L॔উজُभ१شঅ५॑৫ؚপু।شভऋघॊ।شऋোऔोؚ
5HNRRऋघॊِ१থ३কॖথฝৃّऋਸऋਐয॑௭घऩनؚඩା घॊेअपऩढञ؛ :LNLSHGLDेॉ௷ხ KWWSMDZLNLSHGLDRUJZLNL९ش३কঝ।ش ᾧ ᾧ ᾧ ᾧ
ਈभ९ش३কঝ।شহੲ ਰधૻसॊधःौःौକऌथःॊऊुء ९ش३কঝ।شऋॽগش५दਵपऩॊऒधऋੜइञ ڀ ॻজছথॻੜ༢उेलजोपહྖघॊ507ਖ ڀ ॥থউफ़ॳক ڀ ऩ॒टऊ਼भ௯ਊञॉऋਘऎऩढञ
ڀ ौीञःुभ॑ढथःॊणुॉमऩः ڀ ग़থ४ॽ॔धखथमૼपૐরखञः ৰभ୶मؚँऽॉ૮ः ڀ ્पঽীभఢॉपঢ়खथमँऽॉ୶ऋ૮ःेअट ڀ ञटखఢॉभ৸ே९ش३কঝ।شप௪ऋऩऊढञযऽदऋؚ َؙপຣءُधୂःथऎॊधःअ୶ऋ
ਈभ९ش३কঝ।شহੲ 開発者から⾒た最近のソーシャルゲーム開発 ५ঐऋਅৃपऩढथऌथःॊ ڀ ॿॖॸॕঈ॔উজमुठौؚ॒0REDJH؞*5((ु ڀ ガラケー界隈は少し落ち着いて来た印象 ڀ 3&ऐभ।ش
प)ODVK॑ઞ৷ मखञਏ ृढरॉ৸ேযमଌॉथःऩः ڀ ॡছॖ॔থॺ؞१شং؞ॖথইছऩन৸थऋଌॉऩः ڀ '%$ق'DWD%DVH $GPLQLVWUDWRUكऋฤऔोॊ ڀ +70/-6ग़থ४ॽ॔भॽش६ऋੜइजअ ڀ धमःइா৲ऋऽॉؚऩ॒ठूढथभطग़থ४ॽ॔म ؙ जौजौᇋᆓऔोमगीॊऊु
ਈभ९ش३কঝ।شহੲ खङणॎढथःऎ९ش३কঝ।ش৫ ૽સभ৲ ڀ ৫ૠெभఁপपൣःग़থ४ॽ॔ीैोॊुभुॎढथऌञ ڀ ૽સী૿भન৲قग़থ४ॽ॔۸੫ؚ⎻म⎻ોपؚഄఴमॉନघك 求められる能⼒ ڀ
継戦能⼒(続く運営・アップデート、終わりがない) ڀ 情報の横への共有化、他者/他社への展開能⼒ ڀ 安定したリソース提供、⻑期を⾒越した教育スキームの確⽴ ڀ 海外展開能⼒ ९ش३কঝ।شਰਗषभૢ৷ु ڀ ৈ:HE१شঅ५षभషؚ।شইॕॣش३ঙথषभૢ৷ ڀ జਟभ॥থ३গشঐش।شभॿॵॺ৲धजभংॵॡग़থॻ৫
ॖথইছपणःथ ᾧ ᾧ ᾧ ᾧ
ॖথইছपणःथ(1) ソーシャルゲームとクラウドは相性が良い インフラ視点から⾒たソーシャルゲームの特徴 ؞জজش५भॵॺૠெऋखः ؙڀ ঁشॻक़ख़॔৹ऋखः ؙڀ ॵॺखञৃ়ؚ୯ਸঌش५ऋଫः ؞আشॡऋপऌः ؙڀ
ફभৢඐৎؚ೬ाؚఽ ؙڀ ଅؚাੂ ؙڀ य़কথঌشথॖঋথॺऩन
ॖথইছपणःथ(2) Q. नऒ॑णऊढथःॊभء A. 最近では国内のクラウドサービスを利⽤しています पবॡছक़ॻ॑ઞअऒधऋःदघؚँधमAWSुઞःऽघ ਲਗऐभ१شঅ५भৃ়मؚऺऻAWSदघ ْॖথইছ৭लमశଞपপহآآٓ こんなポイントを⾒て選んでいます ڀ
コストや安定度(障害履歴)は当然⾒る ڀ ુથLBがあり、それが強⼒であること ڀ インスタンスの追加が容易で速いこと(電話やメールとかは論外ك ڀ ॹॕ५ॡषभI/OऋசऎखथःॊऒधؚSSDಉुँॉऋञः ڀ ⾼価でも強⼒なスペックのインスタンスが⽤意されている、 ؙ または物理マシンとの併⽤が可能(最後の⼿段的な使い⽅ك
ॖথইছपणःथ(3) १شংଡਛपणःथؙৣ੶भेअऩଡਛदघقनभ੧੯दुপ৬गك ZZZ $SDFKH௺ 3+3௺$3& '% 0\64/௺ 0+$ .96
PHPFDFKHG .\RWR7\FRRQ जभ UV\VORJ FDFWL 0\'16
ୁृইঞشডشॡ पणःथ ᾧ ᾧ ᾧ ᾧ
ୁृইঞشডشॡपणःथ ୁमपPHP॑ઞढथःऽघऋؚ ୦दुःःधઓःऽघ؛ইঞشডشॡमঽदघ ৫ୁ ڀ 3+3 3HUO 5XE\ँञॉ॑ेऎୂऎ ڀ ੭ਔऩୁदेःधઓअऋؚ৫জ९ش५भଓౄृؚ
ؙ 新⼈教育が容易な⾔語が向いている ইঞشডشॡ ڀ ঽইঞشডشॡ॑ઞढथःॊ ڀ 以前はあえてのベタ書きだったが、開発効率や再利⽤性など ؙ の⾯からフレームワークを作成し利⽤するように ڀ V\PIRQ\ऩनभใோইঞشডشॡ॑ୗखथઞढथःॊ ؙ ऩनभਵखुୂऎऋؚਈીपमဗୗऔोथःॊेअट
ॸ५ॺपणःथ ᾧ ᾧ ᾧ ᾧ
ॸ५ॺपणःथ(1) まずはテストプレイなどから数値目標を⽴てる ؞୳औोॊৎமਢਯ ؞ঘش२ऋউঞॖदඝघॊৎ ؞ঘش२ऋ分間に⾏うリクエストの数 【例】 ৎமਢਯ যقৎமਢਯधमৎदமਢऋँढञঘॽشॡঘش२ਯधघॊك ঘش२ऋඝघॊৎ 分操作し続けて離脱と想定
ঘش२ऋ分間に⾏う平均リクエスト数 ڀ ীभৎமਢঘش२ਯ ঘش२ ؙڀ ীपজॡग़५ॺऔोॊਯ ؙؙڀ ଧपজॡग़५ॺऔोॊਯ َؙٙজॡग़५ॺଧُ॑ञचोयेः
ॸ५ॺपणःथ(2) -0HWHUद३ॼজड़॑ॊ ؞ऩॊसऎৰभඝपः३ॼজड़पघॊ ؞ਛभুऋऊऊॉघऍऩःेअपघॊ ؞全部をシナリオに⼊れるのは無理なので重い処理ランキングを元に、 利⽤頻度と処理の重さを考慮して配分する ॡছक़ॻप-0HWHUクライアントを複数台⽤意して⼀⻫実⾏ ୳खञਯக৯ఏ॑ॡজ॔दऌॊऊ॑નऊीॊ ॲওऩैॳগشॽথॢܒ॑ॉନघ ॸ५ॺपमॖথইছଳਡऋऎਏऩञी
このあたりを⼀緒に協⼒してくれる ॖথইছग़থ४ॽ॔ऋฤऔोॊ
॔উজડभৌੁ पणःथ ᾧ ᾧ ᾧ ᾧ
॔উজડभৌੁपणःथ(1) ৌੁपु౦رँॊभदದपହखऽघ পऌऎणपীऐथৌੁ ؙڀ ુৢীقইঞشডشॡكभৈச৲ ؙڀ શঌش४ृ$3,भৈச৲ 共通部分はあらゆる処理で呼ばれることになる णऽॉPVଫऎऩोयؚজॡग़५ॺऩैୀअ ા৷ৌટऋৈःુৢী॑રखथৌ૪खؚ
जभपશभউটॢছ॑ৌ૪खथःऎ
॔উজડभৌੁपणःथ(2) ৰपઞॎोथःॊৌੁॳख़ॵॡজ५ॺ 【共通処理編ٓ 共通処理内で何をしているかを全て把握しているか ڀ どういう処理が⾏われるか、64/は何回流れているか、などを完全に把握すること ڀ 共通部分に処理を⾜すときは、かならずチーム内で許諾を取ること
そもそも、その処理は本当に必要なのか ڀ 最も効果的な負荷対策は、処理の速度を速めるより処理⾃体を無くすことである ڀ ્पॡছॖ॔থॺ サーバ型のアプリの場合は、相当処理が削れる ڀ クライアント側でキャッシュや処理できるような処理がないか⾒直す य़কॵ३গमदऌऩःऊ ڀ $3&य़কॵ३গ ! PHPFDFKH !!!!! 0\64/ भದदசः ق$3&म:HE१شংਜ਼दभय़কॵ३গदँॊऒधपିਔك ڀ 共通処理内では、64/実⾏回数がゼロが望ましい
॔উজડभৌੁपणःथ(3) 無駄なものの発⾒ ڀ ૮ྤऩUHTXLUH॑ንघपमड़شॺটشॻभোऋ௫ ڀ ;+3URIभFDOOJUDSKदॳख़ॵॡ ڀ -HQNLQVृঽ५ॡজউॺदؚ ؙ
૮ྤऩਯृઞॎोथःऩःও९ॵॻऩन॑ जभିਔਡ ڀ টफ़شृग़ছشঁথॻছऩनؚઓॎफधऒौऋॿॵॡपऩॊऒधुँॊभदؚ ؙ ళयोॊਯऋःुभमؚङॳख़ॵॡ ॳগشॽথॢघॊऒध ڀ B6(66,21の利⽤は最低限に留めること
॔উজડभৌੁपणःथ(4) ৰपઞॎोथःॊৌੁॳख़ॵॡজ५ॺ 【個別処理編ٓ ः3+3ছথय़থॢ॑ॊقঔॢছᇗऌ১ك ڀ 実⾏速度を記録する仕掛けを作り、最も遅くて呼ばれる回数の多い順に対処 ڀ $SDFKHটॢऊैDQDORJऩनदૐੑघॊ্১ु
64/の⾒直し ڀ ःৃ়भऺध॒नम64/ऋਉदःق॔উজট४ॵॡदभೄमखःك ڀ ৰभমधॹشॱਯऋୀअधઅपऩैऩःؚॹشॱमଞपीपোोथउऎऒध ڀ ॖথॹॵॡ५ઞ৷भॡग़জृ५টشॡग़জটॢपൗढथऎॊॡग़জ॑ንघ ڀ PNTXHU\GLJHVWで早くても実⾏回数の多いクエリを発⾒しチューニング ڀ FDFWLなどのグラフから問題を発⾒する 仕様で⾒直す ڀ ல॑ऺऻञखणणुؚ୶ऩऎঝش६पोॊधऒौऋऩःऊ॑ଞपਫ਼ୈ ڀ どうしてもダメなら仕様の⾒直しを相談
॔উজડभৌੁपणःथ(5) '%ঐ५ॱشभৌੁ ৌੁभ੦মमَ१شংਯ॑ੜृखथৌ૪घॊऒधُदँॊ؛ ञटख:HE१شংृ'%५ঞॖঈमؚਯ॑ੜृघऒधदৌૢदऌॊऋؚ '%ঐ५ॱشमෞपमੜृघऒधऋदऌऩःञीؚऒऒऋॿॵॡधऩॊ؛ ेढथؚ॑ऩॊसऎभ१شংपীങघॊਏऋলथऎॊ .96 PHPFDFKHGऩन पऐॊ ڀ
情報が古い可能性があることに注意、トランザクション処理にはあまり使えない '%५ঞॖঈपऐॊ ڀ ৢଞम५ঞॖঈपமਢखؚॺছথ२ॡ३ঙথ৫ %(*,1 दঐ५ॱشपமਢघॊ ؙقইঞشডشॡঞঋঝदৰಎك ڀ ঐ५ॱشड़থজشद৫॑ਤीؚ৸ऩॡग़জऊैದप.96ृ५ঞشঈप ؙ ஷढथःऎृॉ্ु ڀ ॖথইছभଡണ্ଉपु൪॒दऎॊ
॔উজડभৌੁपणःथ(6) '%ঐ५ॱشীસ ളਯডشঝॻपীऐैोऩःॱॖউभ।شृؚৎઽઍযਯभ ः।شभৃ়ؚঐ५ॱشীસमೂऐथৢॊऒधऋदऌऩः؛ ႄઉীસ ڀ 切り離しやすいテーブルを他の'%に持って⾏く(例ൕંഝटऐશ'%ك ীસ ڀ ঘش२,'ਜ਼दীસघॊ
ڀ ॢটشংঝ'%॑ठؚजऒपঘش२,'धતವ'%॑੶ஈखञॸشঈঝ॑ण ڀ ৗૠఃஈৎपमਈु॔ॡॸॕঈঘش२ਯभऩः'%पఃஈ ਠ૾म॔উজડदളਯभ'%॑ದपॺছথ२ॡ३ঙথ৫ܒ॥ॵॺखथःॊ ڀ ীસ'%が多くなるほど性能が劣化する ڀ バックアップ時の整合性や、エラー時の処理が⼤変 ڀ ঘش२भঢ়ॎॉऋਘःेअऩ॔উজमॉतैः ڀ 0\64/ &OXVWHUपୄखञः
॔উজડभৌੁपणःथ(7) টॵॡ଼়ৌੁ मऊऊढथःऩःऋঃইज़شঐথ५ऋলऩःؚ /RFN ZDLW WLPHRXWऋघॊؚऩनभৃ়मটॵॡ଼়॑ઑअ ঐ५ॱشীસऔोथःॊৃ়मؚ デッドロック検出がされないので更に厄介 ْৌੁٓ ॺছথ२ॡ३ঙথৎम૭ચऩॉಢऎ
ڀ ॔উজડपਫ਼লभலෳऐ॑ःोथःॊ ڀ 0\6ORZ7UDQ&DSWXUHऩनभॶشঝ॑ણ৷ টॵॡऋऎऊऊॊॸشঈঝमऊऎীऐॊ ڀ ⾏ロックをかけるのでؚつのポイントを同時に更新できない ڀ এॖথॺ௺भॸشঈঝऩनदีॉऋठऩᵜ user_point_tbl ⁹user_id ⁹energy_point ⁹battle_point user_energy_point_tbl ⁹user_id ⁹energy_point user_battle_point_tbl ⁹user_id ⁹battle_point ᡒ ṯ
અपखथःॊੲਾ ᾧ ᾧ ᾧ ᾧ
અपखथःॊੲਾ ఎഭછ॑ओງஂखऽघ ؞:HEग़থ४ॽ॔भञीभॹشॱঋش५ૼ>ৰᄷ@ো ؙؙૈਦຫ෩ ؙڀ ્ؚपฆम९ش३কঝ।ش৫मഭ ؞ग़य़५ঃشॺभञीभ0\64/>ઈ৷管理@ ؙॺছঈঝ३গشॸॕথॢफ़ॖॻؙൔୌื෩ ؙڀؙৢَูჶমُؚロックを理解するのにオススメ ؞0REDJH੍॑इॊૼ
〜ソーシャルゲームの舞台裏〜 ؙؙ'H1$෩ ؙڀؙলञयऊॉؚৰᄷऩઍ ૼછਰਗटध ؞හधखथ:(%'% 35(66ؚ6RIWZDUH'HVLJQ ؞धॉँइङؚमथवभَ॥থআগشॱ؞,7ُカテゴリは全部⾒てます
ऽधी(1) ९ش३কঝ।ش৫ु౦رॎॉणणँॊ ीैोॊुभभ৲पฑໞपৌૢखथःऌञः クラウドとソーシャルゲームは相性が良い ॖথইছ৭लमశଞपਏ ॥থঃॿृAPIमౄৰखथःॊधृढरॉᇃखः ॹॕ५ॡI/O॑ଳ ৈटऐनৈ५ঌॵॡमജऑधखथँॉऋञः
ऽधी(2) ইঞشডشॡमঽऋड़५५ও ৌੁमॸ५ॺधॳख़ॵॡজ५ॺ॑ढथཤرधৌ ੁ DBঐ५ॱشभೄऋຩधऩॊ पमॖথইছ؞॔উজऋீधऩढथৌૢ 基本に忠実に鉄板構成で、ただし⾏けるところはガン फ़থध পऩऒधुःऐन௫खःदघؚ௫खिऒधऋਏ ःणुපभੱ॑ພोङप
য൳ૐ ઙૄভॖথইॕॽॵॺঝشউदमग़থ४ॽ॔॑൳ૐखथःऽघ 社⻑も含めほぼ全てがプログラマで技術者に優しい環境 ඐਜ北海道札幌市 उःखः୫सःढरःؚঽேःढरःؚ୨ऩःؚჳखः 短い通勤時間、徒歩や⾃転⾞で通勤ীधऊु२ছ 8ॱشথؚ,ॱشথপຈಶ 3+3৫ग़থ४ॽ॔ ५ঐ৫ग़থ४ॽ॔ 0\64/ग़থ४ॽ॔
ॖথইছग़থ४ॽ॔
ؙ ओಯലँॉऋधअओकःऽखञ