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
26
ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策
2012年8月30日に北海道大学で行われた「Cloud Week 2012@北海道大学 ~クラウド技術の最先端を探る~」の講演発表で使用した資料。
Infiniteloop
July 12, 2023
Tweet
Share
More Decks by Infiniteloop
See All by Infiniteloop
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2025年版)
infiniteloop_inc
16
60k
俺の PHP プロファイラの話 PHP スクリプトで PHP 処理系のメモリをのぞき込む
infiniteloop_inc
1
560
心理的安全性を学び直し、 「いい組織とは何か?」を考えてみる
infiniteloop_inc
1
800
ゼロからつくる 2D物理シミュレーション ~物理現象をコードに落とし込む方法~
infiniteloop_inc
1
1.2k
詫び石の裏側
infiniteloop_inc
0
780
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
7
34k
リファクタリングで実装が○○分短縮した話
infiniteloop_inc
0
240
ADRという考えを取り入れてみて
infiniteloop_inc
0
250
500万行のPHPプロジェクトにおけるログ出力の歩み
infiniteloop_inc
0
180
Other Decks in Programming
See All in Programming
XP, Testing and ninja testing ZOZ5
m_seki
3
670
Go Conference 2025: Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
takehaya
9
1.7k
アメ車でサンノゼを走ってきたよ!
s_shimotori
0
220
10年もののAPIサーバーにおけるCI/CDの改善の奮闘
mbook
0
830
CSC509 Lecture 05
javiergs
PRO
0
300
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
430
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
3.3k
AIと人間の共創開発!OSSで試行錯誤した開発スタイル
mae616
1
470
エンジニアインターン「Treasure」とHonoの2年、そして未来へ / Our Journey with Hono Two Years at Treasure and Beyond
carta_engineering
0
200
コードとあなたと私の距離 / The Distance Between Code, You, and I
hiro_y
0
170
Domain-centric? Why Hexagonal, Onion, and Clean Architecture Are Answers to the Wrong Question
olivergierke
2
890
Claude Agent SDK を使ってみよう
hyshu
0
800
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
44
7.8k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
GraphQLとの向き合い方2022年版
quramy
49
14k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
Scaling GitHub
holman
463
140k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
9
590
Why Our Code Smells
bkeepers
PRO
340
57k
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/ग़থ४ॽ॔
ॖথইছग़থ४ॽ॔
ؙ ओಯലँॉऋधअओकःऽखञ