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

サーバレスとマイクロサービスで変わるゲームサーバ開発

62340514ee3033d54d79c9e7a3db68d5?s=47 Kazutomo Niwa
October 01, 2016

 サーバレスとマイクロサービスで変わるゲームサーバ開発

Serverlessconf Tokyo 2016 で登壇した際に利用した資料です。

こちらもご参照ください → https://gs2.io/

62340514ee3033d54d79c9e7a3db68d5?s=128

Kazutomo Niwa

October 01, 2016
Tweet

Transcript

  1. αʔόϨεͱϚΠΫϩαʔϏεͰมΘΔ ήʔϜαʔό։ൃ 4FSWFSMFTT$POG5PLZP  (BNF4FSWFS4FSWJDFTגࣜձࣾ ୅දऔక໾ࣾ௕$&0୮Ӌ Ұஐ

  2. ࣗݾ঺հ (BNF4FSWFS4FSWJDFTגࣜձࣾ ೥݄೔૑ۀ ୅දऔక໾ࣾ௕$&0୮Ӌ ҰஐʢʹΘ ͔ͣͱ΋ʣ ೥ גࣜձࣾηΨೖࣾ ܞଳి࿩޲͚ήʔϜɾαʔό։ൃʹैࣄ ೥

    ೚ఱಊגࣜձࣾೖࣾ ϙέϞϯɾϚϦΦΧʔτΛ͸͡Ίͱͨ͠ ήʔϜαʔό։ൃɾӡ༻ʹैࣄ ޷͖ͳ"84αʔϏε"1*(BUFXBZ -BNCEB %ZOBNP%#
  3. Game Server Services(GS2) とは εϚϗήʔϜ΍ϒϥ΢βήʔϜͷඞཁͱ͢Δػೳͷ͏ͪɺ • ϚονϝΠΩϯά • ϥϯΩϯά •

    ϝʔϧϘοΫεʢϓϨθϯτϘοΫεʣ • ελϛφ؅ཧ ͱ͍ͬͨɺΑ͋͘ΔػೳΛ .JDSP4FSWJDFTԽ͠ɺ 4FSWFSMFTTͰઃܭɾ࣮૷͠ɺҰ࣌ؒ਺ԁʙͰར༻Ͱ͖Δͱ ͍͏"84ͷΑ͏ͳαʔϏεͰ͢ɻ
  4. (BNF4FSWFS4FSWJDFT (4 ʹ͍ͭͯ ઌ೔αΠτΛެ։ IUUQTHTJP ݄தʹ࣮ࢪ༧ఆͷϕ ʔλςετࢀՃऀΛืूத ຊ೔ͷηογϣϯ͸ (4ΛαʔόϨεͰ࣮ݱ͢Δʹࢸͬͨ ܦҢ΍࣮ྫΛݩʹ͍ͯ͠·͢

  5. (4ͷઃཱʹࢸͬͨܦҢ ίϯγϡʔϚήʔϜͷ։ൃʹ͓͍ͯɺήʔϜαʔό͸ϓϥο τϑΥʔϚʔ͕ఏڙ͢Δ4%,ͷҰ෦ɻ ˠεϚʔτϑΥϯͰ͸ͦ͜·Ͱ໘౗ݟͯ͘Εͳ͍ɻ ֤͕ࣾࣅͨΑ͏ͳαʔόγεςϜΛ։ൃͯ͠͠·͍ͬͯΔɻ ˠوॏͳ։ൃϦιʔεΛ࿘අ͍ͯ͠Δɻ ήʔϜαʔό͸ϓϥοτϑΥʔϚʔ͕։ൃ͍ͯͨͨ͠Ίɺή ʔϜ։ൃऀ͸ήʔϜαʔό։ൃͷϊ΢ϋ΢͕গͳ͍ɻ ˠͩ·ͩ͠·͠։ൃ͍ͯ͠Δݱ৔΋ଟ͍ɻ

  6. (4ͱ αʔόϨεΞʔΩςΫνϟ ՝୊ࣗମ͸ϒϥ΢βήʔϜ͔ΒωΠςΟϒήʔϜʹτϨϯυ ͕γϑτͯ͠͠͹Β͘ܦͬͨ͋ͨΓ͔Βײ͍ͯͨ͡ɻ ˠ(4ͷߏ૝ࣗମ͸ਵ෼લ͔Β͋ͬͨɻ ͳͥࠓ·ͰىۀʹࢸΒͳ͔͔ͬͨʁ ˠαʔϏεΛ੒ཱͤ͞ΔͨΊͷ՝୊͕͋ͬͨɻ సػ͸ʁ ˠࡢ೥݄ͷ"1*(BUFXBZͷൃදɻ ˠಉ೥݄ʹ͸αʔϏεͷ։ൃΛ։࢝ɻ

  7. ͳͥαʔόϨε͸՝୊Λղܾ͢Δͱࢥͬͨͷ͔ʁ • εέʔϥϏϦςΟͷ֬อ • Մ༻ੑͷ֬อ • อकੑͷ֬อ • Ձ֨༏Ґੑͷ֬อ

  8. εέʔϥϏϦςΟɾՄ༻ੑ αʔόϨε͸࣮ߦ؀ڥͷίϯςφ͕ఆظతʹഁغ͞ΕΔɻ ˠγεςϜ͸ *NNVUBCMFͰ 4UBUFMFTTͳ΋ͷͱͳΔɻ *NNVUBCMFͰ 4UBUFMFTTͳγεςϜʹͳΔͱԿ͕خ͍͠ʁ ˠ෼ࢄॲཧ͕ՄೳͱͳΓɺεέʔϥϒϧʹɻ ˠαʔόো֐ʹର͢Δ଱ੑ͕ڧ͘ͳΔɻ ήʔϜαʔό͸ࣄલͷΞΫηε਺ͷ༧૝͕೉͘͠ɺώοτ͠

    ͨࡍʹ͸ඇৗʹεέʔϧ͕େ͖͘ҟͳΔɻ ˠεέʔϥϏϦςΟ͸ඇৗʹॏཁͳཁૉɻ
  9. อकੑ -BNCEBͰ͸ɺσʔληϯλʔ "; ʹো֐͕ൃੜͯ͠΋ɺ ͦͷ";ͰॲཧΛܧଓ͠ͳ͘͢Δɻ෮چޙʹॲཧର৅ʹ໭͢ɻ ͱ͍ͬͨΦϖϨʔγϣϯ͸ "NB[PO͕ߦͬͯ͘ΕΔɻ ˠαʔόϨεԽ͢Δ͜ͱͰɺ ΠϯϑϥͷϚωʔδϝϯτ͔Β։์͞ΕΔɻ ܾͯ͠ϦιʔεϦονͰ͸ͳ͍(4ʹͱͬͯɺΠϯϑϥͷอ

    क؅ཧΛ"NB[POʹ೚ͤΔ͜ͱ͕ग़དྷΔͱ͍͏ͷ͸େ͖ͳϝ Ϧοτɻ
  10. Ձ֨༏Ґੑ ࠓ͸&$ͳͲԾ૝αʔόͷΠϯελϯε਺Λௐ੔͍ͯ͠Δɻ ˠαʔόϨε͸࣮ࡍʹؔ਺͕࣮ߦ͞Εͨ࣌ؒʹରͯ͠ ՝ۚ͞ΕΔͨΊɺΩϟύγςΟίϯτϩʔϧ͸ෆཁɻ -BNCEB͸ؔ਺Λ࣮ߦ͢ΔίϯςφʹׂΓ౰ͯΔϝϞϦ༰ྔ ΍$16ϦιʔεͳͲ΋ઃఆͰ͖Δɻ ˠؔ਺ͷಛੑʹ߹ΘͤͨϦιʔεׂ౰͕ߦͳ͑Δɻ ैདྷͷ։ൃख๏Ͱઃܭ͞ΕͨγεςϜͱൺֱͯ͠΋Ḯ৭ͷͳ ͍Ձ֨ଳͰαʔϏε͕ఏڙͰ͖ͨɻ

  11. ͳͥ (4͸ϚΠΫϩαʔϏεʹͨ͠ͷ͔ʁ • γεςϜͷݟ௨͕͠ྑ͘ͳΔ • αʔϏε͕ૄ݁߹ͳͨΊɺ෦෼తʹར༻Մೳ • ςετ͕͠΍͍͢

  12. γεςϜͷݟ௨͕͠ྑ͘ͳΔ ػೳΛࡉ෼Խ͢Δ͜ͱͰɺγεςϜͷ࣋ͭ໾ׂ͕໌֬ʹͳΔɻ ໾ׂ͕໌֬ʹͳΔͱ͍͏͜ͱ͸ɺΠϯϓοτɾΞ΢τϓοτ Λ૝૾͠΍͘͢ͳΔͨΊɺαʔϏεΛγϯϓϧʹݟͤΔ͜ͱ ͕Ͱ͖ͨɻ

  13. αʔϏε͕ૄ݁߹ͳͨΊɺ෦෼తʹར༻Մೳ γεςϜؒ͸ૄ݁߹ͳͨΊɺ(4ͷఏڙ͢ΔαʔϏεͷ͏ ͪɺͱ͋ΔͭͷαʔϏε͚ͩར༻͢Δɻͱ͍͏Α͏ͳ͜ͱ ͕͓͜ͳ͑Δɻ ݁߹౓ͷߴ͍γεςϜͩͱɺࣗ෼͸ελϛφ஋ͷ؅ཧػೳΛ ࢖͍͍͚ͨͩͳͷʹɺԿނ͔(4ͷΞΧ΢ϯτγεςϜ΋ར ༻͠ͳ͚Ε͹ར༻Ͱ͖ͳ͍ɻͱ͍͏Α͏ͳࣗ༝౓ͷ௿͍αʔ Ϗεʹͳͬͯ͠·͍ͬͯͨͰ͠ΐ͏ɻ

  14. ςετ͕͠΍͍͢ • γϯϓϧͳγεςϜ͸ςετΛॻ߲͘໨΋ݶΒΕ·͢ • ૄ݁߹ͳγεςϜ͸ςετ͕ॻ͖΍͍͢Ͱ͢ • ϚΠΫϩαʔϏεΛ࠾༻͢Δ͜ͱͰɺ(4ͷΞϓϦέʔγ ϣϯϨΠϠʔͷ඼࣭Λอͭ͜ͱʹͭͳ͕͍ͬͯ·͢

  15. (4ΛαʔϏε͢Δ্Ͱͷෆ҆ ओ࠵ͷ٢ా͞Μ͔ΒʮαʔόϨεʹίϛοτͨ͠αʔϏεΛ ఏڙ͢Δ͜ͱʹෆ҆͸ͳ͔͔ͬͨʁʯͱฉ͔Εͨɻ ˠ࠷ॳ͸ރΕͯͳ͍͕ނʹൃੜ͢Δ໰୊΋͋Δ͔΋ɻ ೥͝Ζɺ4Λ࠷ॳʹ࠾༻͢Δͱ͖ʹ΋ɺ͍͔ͭαʔϏ ε͕ऴΘΔΜ͡Όͳ͍͔ʁͱ࿩Λͨ͜͠ͱ͕͋Δɻ ˠࠓͰ͸ͦΜͳ͜ͱΛؾʹ͢Δਓ͸͍ͳ͍ αʔόϨε΋ಉ͡Ͱ͸ʁ

  16. αʔόϨεͷ՝୊ • ཁ݅ʹΑͬͯݴޠΛ࢖͍෼͚ͳ͚Ε͹ͳΒͳ͍ • εςʔτϑϧͳγεςϜΛ։ൃ͢Δͷ͸೉͍͠ • ϑϨʔϜϫʔΫ͕·ͩະ੒ख़

  17. ཁ݅ʹΑͬͯݴޠΛ࢖͍෼͚ͳ͚Ε͹ͳΒͳ͍ -BNCEB͸ 1ZUIPO KBWBTDSJQU +BWBͷݴޠ͕ར༻Ͱ͖Δɻ ˠ࠷ॳ+BWBͰ։ൃ͠Α͏ͱࣦͯ͠ഊͨ͠ +BWB͸ίϯςφىಈ࣌ͷΦʔόʔϔου͕ͱͯ΋େ͖͍ɻ ˠʙඵͷىಈ࣌ؒɺϝϞϦফඅྔ΋େ͖͍ +BWBʹ΋ྑ͍఺͕͋Δɻ ˠॲཧ଎౓͕ѹ౗తʹ଎͍ɻ

    "1*ͷड෇ʹ͸1ZUIPOKBWBTDSJQUɻόονॲཧ͸+BWBɻ
  18. εςʔτϑϧͳγεςϜΛ։ൃ͢Δͷ͸೉͍͠ αʔόϨε͸ঢ়ଶΛ࣋ͭ͜ͱ͕Ͱ͖ͳ͍ɻ ˠ࣋ͭͳΒ%#΍,74ͳͲΛར༻͢Δ͜ͱʹɻ ֎෦ࢿݯͰߴ଎͔ͭίετײͷ͍͍ํ๏͕ͳ͍ɻ ˠ%ZOBNP%#͸ಡΈॻ͖͸ߴ଎ͳ͕Β΋ ม਺ͷಡΈॻ͖Ϩϕϧͷ*0Λཁٻ͢ΔͱߴՁɻ ˠ.FNDBDIF3FEJT͸εέʔϧͮ͠Β͍ɻ ϑΝΠϧγεςϜΛ௨ͯ͠ঢ়ଶΛ࣋ͭʁ ˠίϯςφ͕ഁغ͞ΕΔͱҰॹʹফ͑ͯ͠·͏

  19. ϑϨʔϜϫʔΫ͕·ͩະ੒ख़ ࠓͰͦ͜ɺز͔ͭͷϓϩμΫτ͕ग़͖͍ͯͯ·͢ɻ͔͠͠ɺ ·ͩ·ͩະ੒ख़ɻ (4Ͱ͸࣌ظతʹ࢖͑ΔϓϩμΫτ͕ଘࡏ͠ͳ͔ͬͨͨΊɺ ׬શʹࣗલͷϑϨʔϜϫʔΫΛར༻ɻ ࠓޙɺαʔόϨεͰͷγεςϜ։ൃ͕Ұൠతͳ΋ͷʹͳΔͨ Ίʹ͸ϑϨʔϜϫʔΫͷ੔උ͕ඞཁͱͳΓͦ͏ɻ

  20. αʔόϨεͷະདྷ Ծ૝ԽͷྲྀΕͷ࣍͸ίϯςφͰ͸ͳ͘αʔόϨεʁ ˠԾ૝Խ͸ௐୡظؒͷ୹ॖͰීٴ *BB4ͷొ৔ ˠϋʔυ΢ΣΞͷ؅ཧ͔Β։์ ˠඞཁͳͱ͖ʹඞཁͳ͚ͩαʔό͕खʹೖΔ ίϯςφ͸Ͳ͏ʁ αʔόϨε͸ΞΠυϧϦιʔε͸׬શʹͳ͘ͳΔɻ

  21. αʔόϨεͱϚΠΫϩαʔϏεͰมΘΔήʔϜαʔό։ൃ • Πϯϑϥอकʹର͢ΔཁٻϦιʔεͷ࡟ݮ • ༨৒Ϧιʔε؅ཧ͔Βͷ։์ • ίϞσΟςΟԽͨ͠ػೳͷ࠶ར༻ੑ޲্ • ඼࣭΍৴པੑͷ޲্

  22. Πϯϑϥอकʹର͢ΔཁٻϦιʔεͷ࡟ݮ αʔόϨεԽ͢Δ͜ͱͰɺΠϯϑϥϨΠϠʔͷอकΛ "NB[PO΍ (PPHMFʹ೚ͤΔ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔͨΊɺ ήʔϜ։ൃݱ৔Ͱෆ଍͕ͪ͠ͳΠϯϑϥΤϯδχΞʹର͢Δ ཁٻϦιʔε͕࡟ݮͰ͖·͢

  23. ༨৒Ϧιʔε؅ཧ͔Βͷ։์ ૝ఆ͞ΕΔΞΫηε਺Λࡹ͖ɺকདྷͷΞΫηε૿ʹඋ͑ͨα ʔό୆਺ͷ֬อɻ͜ΕΛ࣮ݱ͢ΔͨΊʹ͸ΞΫηε਺ͷ༧ଌ ΍αʔόࢿݯͷௐୡۀ຿͕ൃੜɻ ˠαʔόϨεͰ͸ॏཁੑ͸௿͘ͳΔɻ ϐʔΫ࣌ؒଳͱͦ͏Ͱͳ͍࣌ؒଳͷΪϟοϓʹΑͬͯੜ·Ε ΔΞΠυϧɻ ˠΦʔτεέʔϦϯάͷ࢓૊Έͷඞཁͩͬͨɻ ˠαʔόϨεͰ͸ඞཁͳ͘ͳΔɻ

  24. ίϞσΟςΟԽͨ͠ػೳͷ࠶ར༻ੑ޲্ ήʔϜαʔόͷதʹ͸͓໿ଋతͳػೳ͕ଟ਺ଘࡏ͠·͢ ͦ͏͍ͬͨػೳ͸ϚΠΫϩαʔϏεԽ͢Δ͜ͱͰɺԿ౓΋࠶ ։ൃ͢Δ͜ͱΛආ͚Δ͜ͱ͕Ͱ͖·͢ ͜ΕʹΑͬͯɺΑΓήʔϜΛ໘ന͘͢ΔͨΊͷݻ༗ͷػೳͷ ։ൃʹΑΓϦιʔεΛׂ͘͜ͱ͕ग़དྷΔΑ͏ʹͳΓ·͢

  25. ඼࣭ɾ৴པੑͷ޲্ ςετ͕͠΍͘͢ͳͬͨΓɺεέʔϥϏϦςΟɾՄ༻ੑ͕޲ ্͢Δ͜ͱͰɺγεςϜશମͷ඼࣭΍৴པੑ͕޲্ɻ • εύήοςΟԽͯ͠ςετ͕ࠔ೉ • ϋʔυ΢ΣΞ͕ނোɺωοτϫʔΫো֐ʹΑͬͯαʔϏε͕ఀࢭ • ٸܹͳΞΫηε૿ՃʹΞϓϦέʔγϣϯΞʔΩςΫνϟ͕଱͑ΒΕͳ͍ ͜ͷΑ͏ͳ໰୊͸ɺαʔόϨεͱϚΠΫϩαʔϏεʹΑͬͯɺ

    ΑΓ؆୯ͳ໰୊ʹͳΔɻ
  26. ࠷ޙʹ αʔόϨε͸࣍ͳΔτϨϯυͱͳΔՄೳੑ͕ߴ͍ ˠ͔͠͠ɺαʔόϨε͸ۜͷ஄ؙͰ͸ͳ͍ ͨͱ͑͹ɺεςʔτϑϧͳγεςϜʹ͸޲͍͍ͯͳ͍ ˠແཧ࣮ͯ͠૷ͯ͠΋͍͍͜ͱ͸ͳ͍ దࡐదॴɺ࢖͍ॴΛݟۃΊΔ͜ͱ΋େࣄ

  27. એ఻ (4Ͱ͸εϚϗήʔϜ΍ϒϥ΢βήʔϜͷඞཁͱ͢Δػೳ ͷதͰίϞσΟςΟԽͨ͠෦෼ΛϚΠΫϩαʔϏεԽ͠ɺα ʔόϨεͰઃܭɾ࣮૷ͨ͠αʔϏεɻ ˠ͜Ε·Ͱ࿩͖ͯͨ͠Α͏ͳԸܙ͕ಘΒΕΔɻ ࣗΒαʔόϨεԽʹऔΓ૊ΉલʹҰ౓ɺ(4ͷ࠾༻΋ݕ౼ ͍͚ͨͩΕ͹ɻ

  28. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ IUUQTHTJP ϕʔλςετࢀՃऀืूதʂ