Slide 1

Slide 1 text

ʮϝϧΧϦΞοςʯΛࢧ͑Δ 2016/06/08 (PPHMF"QQ&OHJOFͱ(PMBOH

Slide 2

Slide 2 text

ࣗݾ঺հ 2 ௽Ԭ ୡ໵ • ι΢κ΢ & ϝϧΧϦ • ૑ۀ࣌ͷόοΫΤϯυͷΤϯδχΞϦϯάͱ
 ։ൃνʔϜͷϚωʔδϝϯτΛ୲౰ • νʔϜָ͕͘͠࢓ࣄͰ͖Δ৔Λ࡞Δͷ͕޷͖

Slide 3

Slide 3 text

֓ཁ 3 1. ৽ن Web αʔϏεͷΠϯϑϥ؀ڥͱͯ͠
 GAE/Go Λ࠾༻ͨ͠ͷ͸ͳ͔ͥ 
 2. GAE/Go ʹΑΔ։ൃͱӡ༻͸ͲͷΑ͏ͳ΋ͷͳͷ͔ɻ
 ੜ࢈ੑɺεέʔϥϏϦςΟͱύϑΥʔϚϯεɺՄ༻ੑɺ
 αϙʔτମ੍ɺίετ͸ɺଞͷΠϯϑϥ؀ڥͱൺֱͯ͠ Ͳ͏͔ͩͬͨ

Slide 4

Slide 4 text

("&(P࠾༻ͷཧ༝

Slide 5

Slide 5 text

GAE/Go ࠾༻ͷཧ༝ 5 • ཧ༝1 : GAE ͷεέʔϥϒϧͳ෼ࢄγεςϜͷ࢓૊Έ • ཧ༝2 : GCP ੝Γ্͕Γͷஹ͠ͱকདྷͷՄೳੑ • ཧ༝3 : νʔϜ։ൃʹ޲͍͍ͯΔ GolangɻGAE ʹΑΔਖ਼ࣜରԠ

Slide 6

Slide 6 text

GAE/Go ࠾༻ͷཧ༝1 : εέʔϥϒϧͳ GAE 6 • લఏɿ৽نࣄۀΞοςͷΠϯϑϥཁ݅ • άϩʔόϧ • ෳ਺ϦʔδϣϯʢUSɺEUɺAPACʣͰαʔϏεΛల։͍ͨ͠ • ڞ௨ͷίʔυ & ͻͱͭͷσʔλϕʔε • େن໛ΞϓϦέʔγϣϯ • DAU਺ઍສਓن໛ɻॠؒతͳΞΫηε͸਺ສϦΫΤετ/ඵ • ϋΠεέʔϥϒϧ • ػೳվम࣌ͳͲʹαʔϏεແఀࢭʹ͍ͨ͠ • εέʔϧͷͨΊͷ४උ࡞ۀΛͳ͍ͨ͘͠

Slide 7

Slide 7 text

GAE/Go ࠾༻ͷཧ༝1 : εέʔϥϒϧͳ GAE 7 • Α͋͘ΔΞϓϩʔνͰɺ͏·͍͘͘΋ͷ͸ɿ • ҊA : աڈʹܦݧͷ͋Δߏ੒΍طଘͷΠϯϑϥΛ࢖͏ • ҊB : ৽نઃܭɻকདྷతʹ͸ඞཁʹԠͯ͡ઃܭΛੈ୅ަ୅ͤ͞Δ • → ϝϧΧϦͷͱ͖͸ҊBɻϦϦʔεޙ3ϲ݄Ͱ਺ेສϢʔβͱ͍͏૝ఆΛ͠ ͯɺߴੑೳઐ༻αʔό1୆Ͱߏஙɻߏ੒Λੈ୅ަ୅ͤ͞Δ͜ͱͰεέʔϧ͞ ͍ͤͯͬͨ • ࠓճͷ৽نࣄۀͷΠϯϑϥཁ݅͸ϋʔυϧ͕ߴ͘ɺҊAɺҊB ͲͪΒͷΞϓ ϩʔν΋͏·͋ͯ͘͸·Βͳ͔ͬͨ

Slide 8

Slide 8 text

GAE/Go ࠾༻ͷཧ༝1 : εέʔϥϒϧͳ GAE 8 • ผͷΞϓϩʔνɺPaaS ʹ͍ͭͯߟ͑ͯΈΔ • GAE Ҏ֎ͷ PaaS ͸ʁ • AWS ্ʹߏஙͯ͠ఏڙ͞Ε͍ͯΔ PaaS ͸ AWSʢIaaSʣͷ੍໿Λड͚ͯ ͠·͏ • PaaS ΛӡӦ͍ͯ͠Δاۀͷن໛͕খ͍͞৔߹ɺͦ͜ʹΠϯϑϥΛ༬͚Δͱ ϦεΫΛίϯτϩʔϧͮ͠Β͍ • Microsoft Azure ΍ Force.com ͸ɺࠓճͷ։ൃཁ݅ʹ͸߹Θͳ͍

Slide 9

Slide 9 text

GAE/Go ࠾༻ͷཧ༝1 : εέʔϥϒϧͳ GAE 9 • GAE → ཁ݅ΛຬͨͤΔ • άϩʔόϧ • US ͔Βੈք޲͚ʹଟ͘ͷαʔϏε͕ల։͞Ε͍ͯΔ • Google ͱΠϯϑϥΛڞ༻͍ͯ͠Δ GAE ΋౰વάϩʔόϧରԠ • େن໛ΞϓϦέʔγϣϯ • Snapchat ͷΑ͏ͳDAU1ԯਓن໛ͷࣄྫ • ϋΠεέʔϥϒϧ • ෼ࢄγεςϜΛ࡞ΔͨΊͷ࢓૊Έ͕੔͍ͬͯΔ • খ͞ͳن໛͔Βେ͖ͳن໛·Ͱઢܗʹεέʔϧ

Slide 10

Slide 10 text

GAE/Go ࠾༻ͷཧ༝2 : GCP ੝Γ্͕Γͷஹ͠ 10 • ཧ༝2 : GCP ੝Γ্͕Γͷஹ͠ͱকདྷͷՄೳੑ • 2015೥9݄ࠒɺ৽نࣄۀͷٕज़બఆΛ࢝͠Ίͨͱ͖ʹɺ͢Ͱʹ GCP(GKE) Λ ࢖ͬͯ։ൃΛ͍ͯͨ͠ΤϯδχΞ͔ΒʮGCP ͕ඇৗʹྑ͔ͬͨʯͱ͍͏࿩Λ ฉ͍ͨ • ͦΕ·Ͱ BigQuery ΍ GCE ͘Β͍͔͠৮͍ͬͯͳ͔ͬͨͷͰɺ৘ใऩूΛ։ ࢝ɻGoogle ͷ୲౰ऀΛ঺հͯ͠΋Β͍ɺ͙͢ʹ࠷৽ͷ GCP ৘ใΛڭ͑ͯ΋ Β͏ • → AWS ͷιϦϡʔγϣϯΞʔΩςΫτͷΑ͏ͳ௚઀࿩ͤΔٕज़୲౰ऀ͕͍ Δ͜ͱʹ·ͣڻ͍ͨ

Slide 11

Slide 11 text

GAE/Go ࠾༻ͷཧ༝2 : GCP ੝Γ্͕Γͷஹ͠ 11 • ࠓͰͦ͜ීٴ͍ͯ͠Δ AWS ΋౦ژϦʔδϣϯ͕ͳ͍͜Ζ͸ٕज़୲౰ऀ΋͍ͳ ͯ͘ɺΦϯϥΠϯυΩϡϝϯτΛཔΔ͔͠ͳ͔ͬͨ • ௚ۙ·Ͱ GCP ΋ͦ͏͍͏ঢ়ଶʹͳ͍ͬͯΔͱࢥ͍ͬͯͨ → ௚઀࿩ͤΔ୲౰ऀ͕͍ͯɺGCP ʹؔ͢Δٙ໰ʹ΋ਝ଎ˍత֬ʹճ౴Λ΋Β ͑Δঢ়ଶ • ͞ΒʹΦϯϥΠϯ্Ͱ΋ɺGoogle ʹΑΔ GCP ͷ৘ใΞοϓσʔτස౓͸ߴ ·͍ͬͯΔ • → Google ͕ GCP ʹରͯ͠ଟ͘ͷϦιʔεΛׂ͍͍ͯΔ͜ͱ͕Θ͔ͬͨɻ αʔϏεΛͷͤΔΠϯϑϥͱͯ͠े෼ʹ҆શͱ൑அ

Slide 12

Slide 12 text

GAE/Go ࠾༻ͷཧ༝3 : Golang αϙʔτ 12 • ࠷ॳʹ Golang ʹ͍ͭͯݕ౼͢ΔΑ͏ʹͳ͖͔͚ͬͨͬɿ
 
 ࠾༻ձ৯ʹ޲͔͏λΫγʔͷத… 
 ࢁాʮ࣍Ͳ͏͍͏ݴޠͰ࡞Δʁʯ
 ௽ʮϝϧΧϦͱಉ͡ PHP Ͱ͢Ͷʯ
 ࢁాʮGo ͬͯͲ͏͔ͳʁʯ
 ௽ʮྑ͍ݴޠͰ͢Ͷɻͨͩࠓճ΋PHPͰ࣮֬ʹ࡞Ζ͏ͱࢥ͍·͢ʯ
 ʢͦͷޙ Golang ʹ͍͍ͭͯΖ͍Ζ৘ใΛूΊΔʣ

Slide 13

Slide 13 text

GAE/Go ࠾༻ͷཧ༝3 : Golang αϙʔτ 13 • Golang ͱ Web αʔϏε։ൃͷ૬ੑ • CLI ͳͲγεςϜϓϩάϥϛϯά͸ಘҙͳྖҬͱͯ͠޿͘஌ΒΕ͍ͯΔ • → ϝϧΧϦࣾ಺Ͱ΋ଟ਺ͷ࣮੷͋Δ Go ϓϩμΫτ͕͋Γɺੜ࢈ੑͷߴ ͞͸ೝ͍ࣝͯͨ͠ • ࣮ࡍʹ৮ΔͱɺWeb αʔϏε։ൃʹ͓͍ͯ΋ඇৗʹڧྗͳ͜ͱ͕Θ͔ͬͯ ͖ͨ • ݴޠࣗମͷಛ௃ɿ੩తܕ෇͚ɺγϯϓϧͳߏจɺgo fmt/doc ͳͲ • ύοέʔδ/ϥΠϒϥϦͷےͷྑ͞ɿnet/http ΍ x/net/context • GAE ΋ Golang ͷਖ਼ࣜରԠ͕ൃද͞Ε͍ͯͨʢ2015೥7݄ʣ

Slide 14

Slide 14 text

GAE/Go ࠾༻ͷཧ༝3 : Golang αϙʔτ 14 • ཧ༝1 : GAE ͷεέʔϥϒϧͳ෼ࢄγεςϜͷ࢓૊Έ • ཧ༝2 : GCP ੝Γ্͕Γͷஹ͠ͱকདྷͷՄೳੑ • ཧ༝3 : νʔϜ։ൃʹ޲͍͍ͯΔ GolangɻGAE ʹΑΔਖ਼ࣜରԠ
 
 → ͜ΕΒͷཧ༝Ͱι΢κ΢ࣾ͸ GAE/Go ʹܾఆɻ
 ϝϧΧϦʹର͢Δι΢κ΢ͷٕज़తͳҐஔ͚͕ͮϋοΩϦͯ͠ɺ
 ਺೥ޙʹͲ͏ͳ͍ͬͯΔ͔΋૝૾Ͱ͖ͨͷͰ໎͍ͳܾ͘ఆͰ͖ͨ

Slide 15

Slide 15 text

("&(P࠾༻ͷ݁Ռ

Slide 16

Slide 16 text

GAE/Go ࠾༻ͷ݁Ռ 16 • ݁Ռ1 : ੜ࢈ੑ • ݁Ռ2 : εέʔϥϏϦςΟͱύϑΥʔϚϯε • ݁Ռ3 : Մ༻ੑ • ݁Ռ4 : αϙʔτମ੍ • ݁Ռ5 : ίετ

Slide 17

Slide 17 text

GAE/Go ࠾༻ͷ݁Ռ1 : ੜ࢈ੑ 17 • ͲΕ͚ͩૉ੖Β͍͠ͱݴΘΕΔΠϯϑϥ΍։ൃݴޠͰ͋ͬͯ΋ɺ ͔ͦ͜ΒϓϩμΫτ͕ϦϦʔε͞Εͳ͚Ε͹ɺҙຯ͕ͳ͍ • ࠓճɺGAE/Go Λࣗ৴Λ࣋ͬͯબ୒ͨ͠΋ͷͷɺ͜ͷٕज़͕ੈؒ ҰൠͰ΋ීٴ͍ͯ͘͠΋ͷͳͷ͔͸Α͘ݟۃΊΔඞཁ͕͋ͬͨ • →ʮΞοςʯͷόοΫΤϯυͷ։ൃ͸શһ͕ GAE ΋ Golang ΋ ະܦݧ͔Β࢝·͍ͬͯΔɻࣾ಺ͷৄ͍͠ਓʹ͸(ҙਤతʹ)૬ஊͤ ͣʹ։ൃ

Slide 18

Slide 18 text

GAE/Go ࠾༻ͷ݁Ռ1 : ੜ࢈ੑ 18 • ࣮ࡍʹͲ͏͔ͩͬͨɿ • ։ൃணख͔Β2ϲ݄໨ʹݶఆެ։όʔδϣϯΛϦϦʔεɻ5ϲ݄ ໨ʹਖ਼ࣜ൛ϦϦʔε • ະܦݧ͔Β࢝·ͬͯ΋ԿΒ͔ͷΠϯϑϥͱ։ൃݴޠΛѻ͑ΔΤ ϯδχΞͰ͋Ε͹ɺ͙͢ʹϓϩμΫτͷ։ൃʹՃΘΕΔ • → ೖࣾͯ͠1िؒҎ಺ʹຊ൪؀ڥͰಈ͘ίʔυΛॻ͍ͯߩݙɻ 1ϲ݄໨ʹ͸पғͷίʔυͱḮ৭ͳ͍Ϩϕϧ΋ • ݁Ռ1: ੜ࢈ੑ → ˕ྑ͍

Slide 19

Slide 19 text

GAE/Go ࠾༻ͷ݁Ռ2 : εέʔϥϏϦςΟͱύϑΥʔϚϯε 19 • ݁Ռ2 : εέʔϥϏϦςΟͱύϑΥʔϚϯε
 • GAE ͷΞϓϦ͸ɺਖ਼͘͠ઃܭ࣮ͯ͠૷ͨ࣌͠఺Ͱෛՙରࡦ͕׬ྃ ͍ͯ͠Δ → ྫɿϝοηʔδػೳɻDatastore ʹ௥هͯ͠औಘ͢Δ͚ͩɻ Ϣʔβ͕ͲΕ͚ͩ૿͑ͯϝοηʔδྲྀ௨݅਺΍ಡΈऔΓճ਺͕૿ ͑ͯ΋Կ΋͠ͳͯ͘ OK

Slide 20

Slide 20 text

GAE/Go ࠾༻ͷ݁Ռ2 : εέʔϥϏϦςΟͱύϑΥʔϚϯε 20 • ΞοςͰ࣮ࡍʹ͋ͬͨෛՙɿ • ϝϧΧϦͷΞϓϦ্ͷόφʔ͔ΒΞος΁ͷ༠ಋ • → ҰॠͰ App Store ϥϯΩϯά্Ґ΁ • ਺ेສʙ਺ඦສ݅ͷ Push ௨஌ͷҰ੪഑৴ • → ॠؒతʹΞΫηε͕਺ेഒʹ • ͜ΕΒͷෛՙ͸ GAE/Go ্ͰαʔϏε͕ಈ͍͍ͯΔ࣌఺ͰࣗಈͰ εέʔϧͯ͠ରԠͰ͖Δ

Slide 21

Slide 21 text

GAE/Go ࠾༻ͷ݁Ռ2 : εέʔϥϏϦςΟͱύϑΥʔϚϯε 21 • ϓϩϏδϣχϯά΍΢ΥʔϜΞοϓ͸ෆཁ • ϓϩϞʔγϣϯνʔϜͱΤϯδχΞ͕ࣄલʹෛՙʹ͍ͭͯଧͪ ߹ΘͤΔඞཁͳ͠ • 1Ϣʔβͷͱ͖ʹਖ਼͘͠ಈ͍͍ͯΕ͹ɺԿઍສϢʔβʹͳͬͯ΋໰ ୊ͳ͠ ※ಛఆͷΩʔʹର͢Δߋ৽ॲཧ͕େྔൃੜ͢Δͱ͖ͳͲɺྫ֎͸͋Γ

Slide 22

Slide 22 text

GAE/Go ࠾༻ͷ݁Ռ2 : εέʔϥϏϦςΟͱύϑΥʔϚϯε 22 • ͜ͷεέʔϥϏϦςΟ͸ Golang ͷύϑΥʔϚϯεʹΑ࣮ͬͯݱ͞ Ε͍ͯΔ • GAE ͷΠϯελϯε͸ • Golang ͷ৔߹ɺ਺ेms Ͱىಈ͢Δ • ΞΫηε͕͋Ε͹૿͑ͯɺͳ͚Ε͹ݮΔ → ΞΫηε͕͋Δͱ͖ʹॠ࣌ʹىಈ͢ΔͷͰ΢ΥʔϜΞοϓෆཁ • ݁Ռ2: εέʔϥϏϦςΟͱύϑΥʔϚϯε → ˕ྑ͍

Slide 23

Slide 23 text

GAE/Go ࠾༻ͷ݁Ռ3 : Մ༻ੑ 23 • ݁Ռ3 : Մ༻ੑ
 • Ξος͸ 100% Քಇத → ·ͩӡ༻ظ͕ؒ୹͍ͨΊਖ਼֬ͳධՁ͸Ͱ͖ͳ͍ • ϝϧΧϦͷաڈͷΠϯϑϥ͸ϐʔΫλΠϜʹͳΔͱμ΢ϯ͢Δ͜ͱ ͕Α͋ͬͨ͘ͷͰɺࣾ಺ͷ໨ඪઃఆʹՔಇ཰ΛೖΕ͍ͯͨ • Ξος͸100%αʔϏεఏڙͰ͖Δ͜ͱ͕લఏͳͷͰ໨ඪઃఆ΋͠ ͍ͯͳ͍

Slide 24

Slide 24 text

GAE/Go ࠾༻ͷ݁Ռ3 : Մ༻ੑ 24 • ϝϯςφϯε΍ܭըఀࢭ͸ʁ →ΞοςͰ͸ϝϯςφϯε΍ܭըఀࢭ͸༧ఆ͍ͯ͠ͳ͍ɻྫ͑͹ DB ʹΧϥϜΛ௥Ճ͢ΔͨΊʹαʔϏεΛࢭΊͨΓ͸͠ͳ͍ • GAE + Datastore Ͱ͋Ε͹؆୯ʹආ͚ΒΕΔ • ͍ͭͰ΋࢖͑ΔαʔϏεʹ͢ΔͨΊʹɺଟେͳ࿑ྗΛ෷͍ͬͯΔΘ ͚Ͱ͸ͳ͍఺͕େࣄ • GAE ΍ Datastore ͷಛੑʹ߹Θͤͯ࡞Ε͹ɺͦ͏ͳΔ
 • ݁Ռ3: Մ༻ੑ → ˕ྑ͍

Slide 25

Slide 25 text

GAE/Go ࠾༻ͷ݁Ռ4 : αϙʔτମ੍ 25 • ݁Ռ4 : αϙʔτମ੍
 • ࣄલʹ৘ใΛूΊͯαϙʔτମ੍ʹ͍ͭͯ͸Α͘Θ͔Βͳ͔ͬͨ ͷͰɺݸਓతʹ͸Ұ൪ݒ೦ͩͬͨ఺ • Google ͞ΜͱͷϛʔςΟϯάΛ܁Γฦͨ͠ΓɺGCP ͷ༗ঈαϙʔ τʢGoldϓϥϯʣʹೖΔ͜ͱͰɺॆ࣮ͨ͠ମ੍͕ݟ͖͑ͯͨ

Slide 26

Slide 26 text

GAE/Go ࠾༻ͷ݁Ռ4 : αϙʔτମ੍ 26 • ϝϧΧϦͷ஍ͷརɿಉ͡Ϗϧʹ Google ͞Μ͕͍ΔͷͰɺࠔͬͨͱ ͖ʹ͙͢ʹ௚઀࿩ͯ͠৘ใަ׵Ͱ͖Δ → Ӧۀ୲౰ऀ΍ٕज़୲౰ऀ͕ͨ͘͞Μ͍ΔͷͰɺଞͷϏϧͷօ͞ ·΋΄΅ಉ༷ͷαϙʔτ͸ड͚ΒΕΔ(͸ͣ) • GCP ͷ༗ঈαϙʔτɺߴ౓ͳٕज़తͳ࣭໰ʹରͯ͠΋1࣍ճ౴͸ ౰೔ʹདྷͨΓɺ஗ͯ͘΋2೔Ҏ಺ʹ໰୊͕ղܾ͢Δ • ଞͷબ୒ࢶɿτοϓήʔτ͞ΜͷΑ͏ͳ GCP ύʔτφʔاۀ • ݁Ռ4: αϙʔτମ੍ → ˕ྑ͍

Slide 27

Slide 27 text

GAE/Go ࠾༻ͷ݁Ռ5 : ίετ 27 • ݁Ռ5 : ίετ
 • աڈʹ͸ར༻ྉ͕ۚߴֹͩͬͨ࿩Λฉ͍ͨΓ͢Δ • աڈ͸Ұ୴๨Εͯɺ͍·࢖͏ͱͲ͏͍͏ֹۚʹͳΔͷ͔Λ஌Δ • ݱࡏ͸ۃΊͯ௿ίετʹͳ͍ͬͯΔ

Slide 28

Slide 28 text

GAE/Go ࠾༻ͷ݁Ռ5 : ίετ 28 • Ξοςͷ GCP ؀ڥɺ5݄ͷར༻ྉۚʢ໨҆ʣ ։ൃ؀ڥ * αʔόαΠυΤϯδχΞਓ਺෼ = 0ԁʢ1ԁະຬʣ QA ؀ڥ = 1,100ԁ ຊ൪؀ڥ͸ɺDAU100ສ׵ࢉ͢Δͱ200ສԁ • අ༻ͷ಺༁ ɾDatastore Read Ops 46%ɺSimple Searches 28%ɺ
 Frontend Instances 17%ɺOut Bandwidth 4%ɺͦͷଞ 4%

Slide 29

Slide 29 text

GAE/Go ࠾༻ͷ݁Ռ5 : ίετ 29 • Πϯϑϥઐ೚ͷΤϯδχΞ͕͍ͳͯ͘΋ӡ༻Ͱ͖ΔͨΊɺΠϯϑ ϥΛҡ࣋͢Δਓ݅අ΋͔͔͍ͬͯͳ͍ • ΦϯϓϨϛεΛؚΊͨଞͷͲͷΑ͏ͳΠϯϑϥ؀ڥͰ΋ɺ
 GCP ΑΓ҆ՁʹαʔϏεΛ࡞Δ͜ͱ͸Ͱ͖ͳ͍ • ͢΂ͯैྔ՝ۚɻϢʔβ਺͕૿͑Ε͹අ༻͸ਖ਼ൺྫ͢ΔɻϦβʔϒ υΠϯελϯεͷΑ͏ͳɺܭըੑ͕ඞཁͳ΋ͷ͸ͳ͘ɺৗʹ҆Ձ ͳঢ়ଶ • ݁Ռ5: ίετ → ˕ྑ͍

Slide 30

Slide 30 text

݁࿦ 30 • GAE/Go Λ࠾༻ͨ݁͠ՌɺͲ͏͔ͩͬͨ → ੜ࢈ੑɺεέʔϥϏϦςΟͱύϑΥʔϚϯεɺՄ༻ੑɺ
 αϙʔτମ੍ɺίετɺތுͰ͸ͳ͘͢΂ͯຬ଍ • ࠓޙͷҊ݅Ͱ΋ GAE/Go Λ࢖͍͍͔ͨ → Yes!