Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

ソーシャルゲームを支える技術 ~ クラウドを活用した高負荷対策

2012年8月30日に北海道大学で行われた「Cloud Week 2012@北海道大学 ~クラウド技術の最先端を探る~」の講演発表で使用した資料。

Infiniteloop

July 12, 2023
Tweet

More Decks by Infiniteloop

Other Decks in Programming

Transcript

  1. ਈ੺भ९ش३কঝ।ش঒হੲ  ਰ৐धૻसॊधःौःौକऌथःॊऊुء ९ش३কঝ।ش঒ऋॽগش५दਵ਻पऩॊऒधऋੜइञ ڀ ॻজছথॻੜ༢उेलजोपહྖघॊ507ਖ਻ ڀ ॥থউफ़ॳক๱৿ ڀ ऩ॒टऊ਼৑भ௯ਊञॉऋਘऎऩढञ

    ڀ ৏ौीञःुभ॑੿ढथःॊणुॉमऩः ڀ ग़থ४ॽ॔धखथमૼ୒पૐরखञः ৰ੠भ୶஭मؚँऽॉ૮ः ڀ ્पঽীभఢॉपঢ়खथमँऽॉ୶஭ऋ૮ःेअट ڀ ञटखఢॉभ৸ே९ش३কঝ।ش঒प௪௡ऋऩऊढञযऽदऋؚ َؙপຣ୏ءُधୂःथऎॊधःअ୶஭ऋ
  2. ਈ੺भ९ش३কঝ।ش঒হੲ  開発者から⾒た最近のソーシャルゲーム開発 ५ঐ঍ऋ਌ਅৃपऩढथऌथःॊ ڀ ॿॖॸॕঈ॔উজमुठौؚ॒0REDJH؞*5((ु ڀ ガラケー界隈は少し落ち着いて来た印象 ڀ 3&਱ऐभ।ش঒

    ਌प)ODVK॑ઞ৷ म਍৒खञ೽ਏ ृढरॉ৸ேযमଌॉथःऩः ڀ ॡছॖ॔থॺ؞१شং؞ॖথইছऩन৸थऋଌॉऩः ڀ '%$ق'DWD%DVH $GPLQLVWUDWRUكऋ੎ฤऔोॊ ڀ +70/-6ग़থ४ॽ॔भॽش६ऋੜइजअ ڀ धमःइ੸ா৲ऋ઩ऽॉؚऩ॒ठूढथभ঵঻طग़থ४ॽ॔म ؙ जौजौᇋᆓऔोमगीॊऊु
  3. ਈ੺भ९ش३কঝ।ش঒হੲ  ૘खङण૗ॎढथःऎ९ش३কঝ।ش঒৫৅ ૽સभ૗৲ ڀ ৫৅ૠெभఁপपൣःग़থ४ॽ॔੷ीैोॊुभु૗ॎढथऌञ ڀ ૽સী૿भ৥ન৲قग़থ४ॽ॔۸੫઺ؚ⎻म⎻ોपؚഄఴम೷ॉନघك 求められる能⼒ ڀ

    継戦能⼒(続く運営・アップデート、終わりがない) ڀ 情報の横への共有化、他者/他社への展開能⼒ ڀ 安定したリソース提供、⻑期を⾒越した教育スキームの確⽴ ڀ 海外展開能⼒ ९ش३কঝ।ش঒ਰਗषभૢ৷ु ڀ ৈ଀෰:HE१شঅ५षभ৚షؚ।ش঑ইॕॣش३ঙথषभૢ৷ ڀ జਟभ॥থ३গشঐش।ش঒भॿॵॺ৲धजभংॵॡग़থॻ৫৅
  4. ॖথইছपणःथ(2) Q. नऒ॑णऊढथःॊभء A. 最近では国内のクラウドサービスを利⽤しています ਌पব৔ॡছक़ॻ॑ઞअऒधऋ੗ःदघؚँधमAWSुઞःऽघ ਲਗ਱ऐभ१شঅ५भৃ়मؚऺऻAWSदघ ْॖথইছ৭लमశଞपপহآآٓ こんなポイントを⾒て選んでいます ڀ

    コストや安定度(障害履歴)は当然⾒る ڀ ુથLBがあり、それが強⼒であること ڀ インスタンスの追加が容易で速いこと(電話やメールとかは論外ك ڀ ॹॕ५ॡषभI/Oऋசऎ਍৒खथःॊऒधؚSSDಉुँॉऋञः ڀ ⾼価でも強⼒なスペックのインスタンスが⽤意されている、 ؙ または物理マシンとの併⽤が可能(最後の⼿段的な使い⽅ك
  5. ੉ୁृইঞش঒ডشॡपणःथ ੉ୁम਌पPHP॑ઞढथःऽघऋؚ ୦दुःःधઓःऽघ؛ইঞش঒ডشॡमঽ੿दघ ৫৅੉ୁ ڀ 3+3 3HUO 5XE\ँञॉ॑ेऎୂऎ ڀ ੭ਔऩ੉ୁदेःधઓअऋؚ৫৅জ९ش५भଓౄृؚ

    ؙ 新⼈教育が容易な⾔語が向いている ইঞش঒ডشॡ ڀ ঽ੿ইঞش঒ডشॡ॑ઞढथःॊ ڀ 以前はあえてのベタ書きだったが、開発効率や再利⽤性など ؙ の⾯からフレームワークを作成し利⽤するように ڀ V\PIRQ\ऩनभใோইঞش঒ডشॡ॑੝ୗखथઞढथःॊ ؙ ऩनभਵखुୂऎऋؚਈી৓पमဗ੝ୗऔोथःॊेअट
  6. ଀෰ॸ५ॺपणःथ(1) まずはテストプレイなどから数値目標を⽴てる ؞੒୳औोॊ৊ৎமਢਯ ؞ঘش२ऋউঞॖदඝ੿घॊৎ৑ ؞ঘش२ऋ分間に⾏うリクエストの数 【例】 ৊ৎமਢਯ যق৊ৎமਢਯधमৎ৑दமਢऋँढञঘॽشॡঘش२ਯधघॊك ঘش२ऋඝ੿घॊৎ৑ 分操作し続けて離脱と想定

    ঘش२ऋ分間に⾏う平均リクエスト数 ৚ ڀ ী৑भ৊ৎமਢঘش२ਯ    ঘش२ ؙڀ ী৑पজॡग़५ॺऔोॊ৚ਯ   ৚ ؙؙڀ ଧ৑पজॡग़५ॺऔोॊ৚ਯ    ৚ ؙٙ਴಑َজॡग़५ॺଧُ॑௥ञचोयेः
  7. ॔উজડभ଀෰ৌੁपणःथ(2) ৰ੠पઞॎोथःॊ଀෰ৌੁॳख़ॵॡজ५ॺ 【共通処理編ٓ  共通処理内で何をしているかを全て把握しているか ڀ どういう処理が⾏われるか、64/は何回流れているか、などを完全に把握すること ڀ 共通部分に処理を⾜すときは、かならずチーム内で許諾を取ること 

    そもそも、その処理は本当に必要なのか ڀ 最も効果的な負荷対策は、処理の速度を速めるより処理⾃体を無くすことである ڀ ્पॡছॖ॔থॺ  サーバ型のアプリの場合は、相当処理が削れる ڀ クライアント側でキャッシュや処理できるような処理がないか⾒直す  य़কॵ३গमदऌऩःऊ ڀ $3&य़কॵ३গ ! PHPFDFKH !!!!! 0\64/ भದदசः ق$3&म:HE१شং౐ਜ਼दभय़কॵ३গदँॊऒधपିਔك ڀ 共通処理内では、64/実⾏回数がゼロが望ましい
  8. ॔উজડभ଀෰ৌੁपणःथ(3)  無駄なものの発⾒ ڀ ૮ྤऩUHTXLUH॑ንघपमड़شॺটشॻभ଑োऋ௫ ڀ ;+3URIभFDOOJUDSKदॳख़ॵॡ ڀ -HQNLQVृঽ੿५ॡজউॺदؚ ؙ

    ૮ྤऩ৒ਯृઞॎोथःऩःও९ॵॻऩन॑྽௾  जभ౎ିਔਡ ڀ টफ़شृग़ছشঁথॻছऩनؚઓॎफधऒौऋॿॵॡपऩॊऒधुँॊभदؚ ؙ ళयोॊ৚ਯऋ੗ःुभमؚ૑ङॳख़ॵॡ ॳগشॽথॢघॊऒध ڀ B6(66,21の利⽤は最低限に留めること
  9. ॔উজડभ଀෰ৌੁपणःथ(4) ৰ੠पઞॎोथःॊ଀෰ৌੁॳख़ॵॡজ५ॺ 【個別処理編ٓ  ೚ः3+3ছথय़থॢ॑੿ॊقঔॢছᇗऌ১ك ڀ 実⾏速度を記録する仕掛けを作り、最も遅くて呼ばれる回数の多い順に対処 ڀ $SDFKHটॢऊैDQDORJऩनदૐੑघॊ্১ु 

    64/の⾒直し ڀ ೚ःৃ়भऺध॒नम64/ऋਉ౤द೚ःق॔উজট४ॵॡदभ଀෰ೄ੖म୔खःك ڀ ৰ੠भম୞धॹشॱਯऋୀअध૞અपऩैऩःؚॹشॱमଞप੗ीपোोथउऎऒध ڀ ॖথॹॵॡ५౞ઞ৷भॡग़জृ५টشॡग़জটॢपൗढथऎॊॡग़জ॑ንघ ڀ PNTXHU\GLJHVWで早くても実⾏回数の多いクエリを発⾒しチューニング ڀ FDFWLなどのグラフから問題を発⾒する  仕様で⾒直す ڀ ல஘॑ऺऻ௥ञखणणुؚ୶஭ऩऎঝش६प੿ोॊधऒौऋऩःऊ॑ଞपਫ਼ୈ ڀ どうしてもダメなら仕様の⾒直しを相談
  10. ॔উজડभ଀෰ৌੁपणःथ(5) '%ঐ५ॱشभ଀෰ৌੁ ଀෰ৌੁभ੦মमَ१شং઎ਯ॑ੜृखथৌ૪घॊऒधُदँॊ؛ ञटख:HE१شংृ'%५ঞॖঈमؚ઎ਯ॑ੜृघऒधदৌૢदऌॊऋؚ '%ঐ५ॱشम౐ෞपमੜृघऒधऋदऌऩःञीؚऒऒऋॿॵॡधऩॊ؛ ेढथؚ଀෰॑ऩॊसऎ౎भ१شংपীങघॊ૑ਏऋলथऎॊ .96 PHPFDFKHGऩन प਱ऐॊ ڀ

    情報が古い可能性があることに注意、トランザクション処理にはあまり使えない '%५ঞॖঈप਱ऐॊ ڀ ৢଞम५ঞॖঈपமਢखؚॺছথ२ॡ३ঙথ৫઩ %(*,1 दঐ५ॱشपமਢघॊ ؙقইঞش঒ডشॡঞঋঝदৰಎك ڀ ঐ५ॱشड़থজشद৫৅॑ਤीؚ਍৸ऩॡग़জऊैದप.96ृ५ঞشঈप ؙ ஷढथःऎृॉ্ु ڀ ॖথইছभଡണ্ଉपु൪॒दऎॊ
  11. ॔উজડभ଀෰ৌੁपणःथ(6) '%ঐ५ॱشীસ ളਯডشঝॻपীऐैोऩःॱॖউभ।ش঒ृؚ৊ৎઽઍযਯभ ੗ः।ش঒भৃ়ؚঐ५ॱشীસमೂऐथৢॊऒधऋदऌऩः؛ ႄઉীસ ڀ 切り離しやすいテーブルを他の'%に持って⾏く(例ൕંഝटऐશ'%ك ਷਴ীસ ڀ ঘش२,'౐ਜ਼दীસघॊ

    ڀ ॢটشংঝ'%॑੅ठؚजऒपঘش२,'धતವ'%॑੶ஈखञॸشঈঝ॑੅ण ڀ ৗૠఃஈৎपमਈु॔ॡॸॕঈঘش२ਯभ૘ऩः'%पఃஈ ਠ૾म॔উজડदളਯभ'%॑ದपॺছথ२ॡ३ঙথ৫઩ܒ॥঑ॵॺखथःॊ ڀ ীસ'%が多くなるほど性能が劣化する ڀ バックアップ時の整合性や、エラー時の処理が⼤変 ڀ ঘش२৑भঢ়ॎॉऋਘःेअऩ॔উজम੿ॉतैः ڀ 0\64/ &OXVWHUप਋ୄखञः
  12. ॔উজડभ଀෰ৌੁपणःथ(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 ᡒ ṯ