Slide 1

Slide 1 text

։ൃͷٕज़ 2016/04/18 (PMBOHͱ(PPHMF"QQ&OHJOF

Slide 2

Slide 2 text

ࣗݾ঺հ 2 ௽Ԭ ୡ໵ • ι΢κ΢ɺαʔόαΠυΤϯδχΞ݉ Ϛωʔδϟʔ • ϝϧΧϦɺ૑ۀ͔࣌ΒόοΫΤϯυͷ ΤϯδχΞϦϯάΛ୲౰ • ։ൃऀָ͕͘͠࢓ࣄͰ͖Δ৔Λ࡞Δͷ ͕޷͖

Slide 3

Slide 3 text

ࠓճ͓఻͍͑ͨ͜͠ͱ 3 1. Go ͱ GAE ͸ඇৗʹ༗ྗͳ Web ΞϓϦ։ൃखஈ 2. PaaS ͷ࣌୅͕ຊ֨తʹ࢝·͖ͬͯͨ

Slide 4

Slide 4 text

INDEX Why Goʁ Why GAEʁ ෼ࢄγεςϜͷͨΊͷ Datastore Web ΞϓϦέʔγϣϯͷΞʔΩςΫνϟ

Slide 5

Slide 5 text

Why Go? Why GAE? 5 • Ξοςͷ։ൃΛ GAE/Go ʹܾΊͨཧ༝ ΞϓϦέʔγϣϯͷཁ݅ ϝϧΧϦͰ͸ͳ͘ι΢κ΢ (PPHMFͷಈ͖ ϓϩμΫτ։ൃ΁ϑΥʔΧε

Slide 6

Slide 6 text

ΞϓϦέʔγϣϯͷཁ݅ 6 • ػೳతͳଆ໘
 JSON APIɺ੩తίϯςϯπ഑৴ʢHTML/CSS/JSʣɺಈతίϯςϯπੜ੒ɺ
 σʔλϕʔε(ӬଓԽɺΫΤϦ)ɺΩϡʔॲཧɺ
 ݕࡧ(ΩʔɺશจݕࡧɺҐஔɺ༧ଌม׵)ɺ
 ը૾Ξοϓϩʔυͱ഑৴ɺϝʔϧૹ৴ɺPush ௨஌ɺσʔλ෼ੳ

Slide 7

Slide 7 text

ΞϓϦέʔγϣϯͷཁ݅ 7 • ඇػೳతͳଆ໘ • άϩʔόϧ • ෳ਺Ϧʔδϣϯ(USɺEUɺAPAC)ͰαʔϏεΛల։͍ͨ͠
 ͦͷͱ͖σʔλϕʔε͸άϩʔόϧʹͻͱ͚ͭͩ • େن໛ΞϓϦέʔγϣϯ • DAU ਺ઍສਓن໛Λѻ͑ΔΞʔΩςΫνϟΛߟ͍͑ͨ • ࢀߟɿݱࡏͷϝϧΧϦ͕೔ถ3500ສμ΢ϯϩʔυɻ
 ϐʔΫ࣌ຖ෼120ສϦΫΤετɻѻ͏σʔλྔ͸ԯ୯Ґ • ϋΠεέʔϥϒϧ • ্ཱͪ͛ظ͔ؒΒ࠷ޙ·ͰҰ؏ͨ͠ΞʔΩςΫνϟʹ͍ͨ͠

Slide 8

Slide 8 text

ϝϧΧϦͰ͸ͳ͘ι΢κ΢ 8 • େ୾ͳٕज़બఆ͕Ͱ͖ͨେ͖ͳཧ༝ͷͻͱͭ • ϝϧΧϦͷࢠձࣾͱ্ཱ͕ͯͪͬͨ͠ܦҢ͕͋Γɺ
 ಉٕ͡ज़Λ͋͑ͯબ͹ͳ͍ͱ͍͏બ୒ࢶ΋ߟ͑ͯΈΔ • ϝϧΧϦͷLAMPελοΫͰ͸ͳ͍ͱͨ͠ΒɺͲΜͳબ୒ࢶʹͳΔʁ

Slide 9

Slide 9 text

ϝϧΧϦͰ͸ͳ͘ι΢κ΢ 9 • ϓϩμΫτͷϦϦʔε͸͢ ΂ͯʹ༏ઌ͞ΕΔ • ݶΒΕͨϦιʔε
 ʢਓɺ͓ۚɺ࣌ؒʣ • ͍·ूΊΒΕΔՄೳੑͷߴ ͍ΤϯδχΞ͸ʁ • → อकతʹˍݎ࿚ʹ • ϝϧΧϦ͚ͩͰ͸ੜΈग़ͤ ͳ͍৽͍͠Ձ஋Λग़͍ͨ͠ • ५୔ͳϦιʔε • 3೥ޙʹ΋ΤϯδχΞʹͱͬ ͯັྗతͳ৔ॴͰ͋ΔͨΊ ʹ͸ʁ • → ଟ༷ੑͱٕज़ͷ։୓ ϝϧΧϦॳظ ι΢κ΢

Slide 10

Slide 10 text

Google ͷಈ͖ 10 • ΞοςͷΠϯϑϥΛߟ͑Δͱ͖ʹɺϝϧΧϦͱಉ͡ΦϯϓϨϛε΍AWSҎ֎ ͷબ୒ࢶ΋ௐࠪ • Google Cloud Platform Ͱྑ͍੒ՌΛग़ͤͨͱ͍͏৘ใΛಘͨɻ͙͢ʹ
 Google ͷ୲౰ऀΛ঺հͯ͠΋Β͍ɺGCP/GAE ͷ࠾༻ՄೳੑΛ1ϲ݄΄Ͳݕূ • Google ʹΑΔ͖Ίࡉ͔ͳαϙʔτମ੍ • 5೥͘Β͍લͱ͸༷ࢠ͕ҧ͏ • AWS ͕೔ຊϦʔδϣϯΛग़͖ͯͨ͠ͱ͖ͷΑ͏ͳงғؾ͕͋ͬͨ • Google Cloud Platform ʹରͯ͠ඇৗʹଟ͘ͷϦιʔεΛ౤Լ͍ͯ͠Δ

Slide 11

Slide 11 text

ϓϩμΫτ։ൃ΁ϑΥʔΧε 11 • ΤϯδχΞͷଟ͕͘
 ։ൃݴޠ΍Πϯϑϥಛ༗ͷ໰୊ʹ࣌ؒΛ࢖͏ͷͰ͸ͳ͘ɺ
 ϓϩμΫτͷ։ൃʹूதͰ͖Δ؀ڥ͕ཧ૝ɺͱ͍͏؍఺

Slide 12

Slide 12 text

ϓϩμΫτ։ൃ΁ϑΥʔΧε - Golang 12 • Go ͷੜ࢈ੑ΍ύϑΥʔϚϯε͸ʁ • ϝϧΧϦͰ GaurunʢPush ഑৴ϛυϧ΢ΣΞʣͳͲͷ࣮੷͕͋Γɺ
 Go ͷϙςϯγϟϧͷߴ͞͸ײ͍ͯͨ͡ • ݕূϙΠϯτɿϛυϧ΢ΣΞ͚ͩͰ͸ͳ͘ Web Ͱ΋ߴ͍ੜ࢈ੑΛग़ͤΔ͔ • LL ͱ͸ҧ͏ੜ࢈ੑͷग़͠ํ͕Ͱ͖Δ • ॳ଎΍ॻࣺͯͷૣ͞͸ LL ʹྼΓ͕ͪɻ௕͍໨ͰݟΕ͹ੜ࢈ੑ͸ߴ͘ײ͡ ͨɻݫ֨ͳܕγεςϜ͕͋ΔͷͰେ୾ͳมߋ΋҆৺ͯ͠Ͱ͖Δ • νʔϜ։ൃͷ͠΍͢͞ • go fmtɺgo doc

Slide 13

Slide 13 text

ϓϩμΫτ։ൃ΁ϑΥʔΧε - GAE 13 • 1ͭͷ GCP ϓϩδΣΫτʹ
 1ͭͷ App Engine • App Engine ͷதʹΞϓϦέʔγϣϯ ͕Քಇ͢ΔΠϯελϯε͕͋Δ • ݕࡧػೳ΍Ωϡʔ΋ఏڙ͞ΕΔ • σʔλϕʔε͸ Datastore • σʔλ෼ੳ͸ BigQuery • ଞʹ΋ଟ਺ͷػೳ͕͋Γɺ
 App Engine ͱ࿈ܞͰ͖Δ プロジェクト App Engine App Engine Datastore Instances Search BigQuery Task Queue - GCE - Logs etc. - Networks

Slide 14

Slide 14 text

ϓϩμΫτ։ൃ΁ϑΥʔΧε - GAE 14 • Ϟδϡʔϧͱόʔδϣϯ • ΞϓϦέʔγϣϯΛෳ਺ͷ؀ڥʹσϓϩΠͰ͖Δ = όʔδϣϯͱݺ͹ΕΔ • όʔδϣϯʹରͯ͠τϥϑΟοΫͷৼΓ෼͚ΛઃఆͰ͖Δ • ཧ૝తͳ Blue / Green σϓϩΠ ग़యɿIUUQTDMPVEHPPHMFDPNTPMVUJPOTNJDSPTFSWJDFTPOBQQFOHJOF

Slide 15

Slide 15 text

ཧ૝తͳ Blue/Green σϓϩΠ 15

Slide 16

Slide 16 text

ϓϩμΫτ։ൃ΁ϑΥʔΧε - GAE 16 • ΠϯελϯεͷΦʔτεέʔϧ • App Engine ʹΞϓϦέʔγϣϯΛσϓϩΠ͢Δ͚ͩͰΦʔτεέʔϧ͢Δ • ΞΫηε͕ͳ͚Ε͹Πϯελϯε͸্ཱ͕ͪΒͣɺ
 ΞΫηε͕͋ͬͨͱ͖ʹ্ཱ͕ͪΔ • Πϯελϯε͸ VM Ͱ͸ͳܰ͘ྔίϯςφ • Go ͷΠϯελϯεͳΒىಈ͸200msҎԼ • طଘΞϓϦ͔Βͷྲྀ͜͠Έ΍େن໛ͳ޿ࠂϓϩϞʔγϣϯͰ΋ɺ
 Կ΋͠ͳͯ͘΋ॠ࣌ʹΠϯελϯε͕૿͑ͯॲཧ͞ΕΔ

Slide 17

Slide 17 text

GAE ͷΦʔτεέʔϧ 17

Slide 18

Slide 18 text

౷߹͞Ε͍ͯΔϦΞϧλΠϜͷϩάػೳ 18

Slide 19

Slide 19 text

౷߹͞Ε͍ͯΔϦΞϧλΠϜͷϩάػೳ - τϨʔε 19

Slide 20

Slide 20 text

෼ࢄγεςϜͷͨΊͷ%BUBTUPSF

Slide 21

Slide 21 text

ӬଓԽσʔλΛͲ͏΍ͬͯεέʔϧͤ͞Δ͔ 21 • Ҋ1) RDB ʹΑΔ఻౷తͳ Master/Slave Ϟσϧ • ࣮੷े෼Ͱཱ֬͞Εͨख๏ • ͱ͸͍͑ DB Λθϩ͔Β্ཱͪ͛ͯεέʔϧ͍ͤͯ͘͞ͷ͸େม • େن໛ͳσʔλʹͳΔ΄Ͳ RDB ຊདྷͷ࣋ͪຯ͸ੜ͔ͤͳ͘ͳΔ • ҟͳΔ DB ςʔϒϧͱͷτϥϯβΫγϣϯ͕Ͱ͖ͳ͍ɻJOIN ͕ݶఆత • Ϣʔβ਺ͷ্ݶ͕Θ͔͍ͬͯΔ৔߹͸͜ΕͰ OK • → GCP Ͱ͸ Cloud SQL ͕ఏڙ͞Ε͍ͯΔ

Slide 22

Slide 22 text

ӬଓԽσʔλΛͲ͏΍ͬͯεέʔϧͤ͞Δ͔ 22 • Ҋ2) εέʔϥϏϦςΟΛॏࢹͨ͠ NoSQL Ϟσϧ • NoSQL σʔλϕʔε "Datastore" • τϨʔυΦϑɿ • ࣮༻తͳ ACID ͸͖͋ΒΊΔ • ۃΊͯߴ͍εέʔϥϏϦςΟ

Slide 23

Slide 23 text

RDB ͱ NoSQL ͲͪΒΛબͿ΂͖͔ʁ 23 • ؒҧ͍ͳ͘ɺGAE ͷσʔλϕʔεʹ͸ Datastore ΛબͿ΂͖ • Gmail ΍ YouTube ͷΑ͏ͳαʔϏεͷσʔλ͸ RDB Ͱ͸ͳ͘
 BigTable ʹอଘ͞Ε͍ͯΔ • NoSQL ͷ࣮੷͸ Google ͕࣮ূࡁΈ • Ξος΋΋ͪΖΜ RDB Λ࢖Θͣ Datastore Λར༻ • ௕͍͜ͱ׳Ε਌͠ΜͰ͖ͨ RDB Ͱ͸ͳ͘ɺNoSQL ΛબͿܾஅ͸೉͍͠ • ͔͠͠άϩʔόϧϨϕϧͷେن໛αʔϏεΛ࡞ΔͨΊʹ
 NoSQL ΛબͿܾஅΛ͠Α͏

Slide 24

Slide 24 text

Datastore ͷಛ௃ 24 • ΦϒδΣΫτߏ଄Λ࣋ͭεΩʔϚϨεͳ Key-Value Store ʹ
 ୯७ͳΫΤϦʹΑΔݕࡧΛՃ͑ͨ΋ͷ • BigTable ͷ্ʹߏங͞Ε͍ͯΔ • BigTable ͸୯७ͳ KVSʢΩʔΛݩʹͨ͠ߦ୯Ґͷ CRUD + Ωʔͷൣғݕࡧʣ

Slide 25

Slide 25 text

Datastore ͷಛ௃ 25 • Pros • ۃΊͯߴ͍εέʔϥϏϦςΟ • ӬଓԽͰ͖ΔσʔλʢΤϯςΟςΟʣͷ਺ʹ੍ݶ͸ͳ͍ • ӬଓԽσʔλ͕ͲΕ͚ͩ૿͑ͯ΋औಘͱ௥Ճͷ଎౓͸ྼԽ͠ͳ͍ • 1݅Ͱ΋10ԯ݅Ͱ΋ಉ͡ • ಉҰΤϯςΟςΟͰͳ͚Ε͹੍ݶͳ͠ͷฒྻॻ͖ࠐΈ • ۃΊͯߴ͍Մ༻ੑ • μ΢ϯλΠϜͳ͠ • Cons • BigTable ΑΓߴػೳͱ͸͍͑ϓϦϛςΟϒ • ݶఆ͞Εͨ৚݅Ͱ͔͠ ACID τϥϯβΫγϣϯ͕αϙʔτ͞Εͳ͍ • JOIN ͕ͳ͍ɺू໿ؔ਺͕ͳ͍ɺetc.

Slide 26

Slide 26 text

Datastore Λ࢖͏ͱ͖ʹߟ͑Δ͜ͱ 26 • RDB ͷύλʔϯΛͦͷ··౰ͯ͸ΊΔ͜ͱ͸Ͱ͖ͳ͍ • ྫ1) τϥϯβΫγϣϯͳ͠Ͱෳ਺ͷ஋ΛҰ؏ੑΛ࣋ͨͤͯߋ৽ • → Ұ࣌తʹҰ؏ੑ͕ͳ͘ͳΔ͜ͱΛڐ༰͢Δ • ྫ2) ΦʔτΠϯΫϦϝϯτʢ୯ௐ૿Ճ͢Δ਺஋ͷ࠾൪ʣ • → Datastore ͷػೳ͚ͩͰεέʔϧ͢Δ࠾൪͸࣮૷Ͱ͖ͳ͍ • ෼ࢄγεςϜͰͷΦʔτΠϯΫϦϝϯτͷߟ͑ํ͕ඞཁ

Slide 27

Slide 27 text

8FCΞϓϦέʔγϣϯͷΞʔΩςΫνϟ

Slide 28

Slide 28 text

Web ΞϓϦέʔγϣϯͷΞʔΩςΫνϟ 28 • Go Ͱ Web ΞϓϦΛ࡞Δ͜ͱ͸Ͱ͖Δʁ → Ͱ͖Δ • ͲΜͳϑϨʔϜϫʔΫΛ࢖͏ʁ → net/http? • ੜ࢈ੑ͸ʁ → ʁʁʁ Α͘ฉ͔ΕΔ͜ͱ

Slide 29

Slide 29 text

ΞοςͷΞʔΩςΫνϟ 29 • ΞϓϦέʔγϣϯ͸ෳ਺ݸͷϞδϡʔϧͰߏ੒͞ΕΔ • APIɺWebɺCS toolɺetc. • Ϟδϡʔϧ͸ͦͷ··σϓϩΠ୯Ґ • ୯ҰͷϦϙδτϦ(monorepo)Ͱɺଟ͘ͷίʔυ͸ڞ௨ • API ͸ JSON RPC 2.0 • Web ͱ CS tool ͸ HTML Λಈతੜ੒͢Δ • ΞϓϦέʔγϣϯ૚ɺυϝΠϯ૚ɺUI૚ɺΠϯϑϥ૚ͷ4૚ʹ෼͔Ε͍ͯͯɺ ֤Ϟδϡʔϧ͸ UI ૚ͷҧ͍ͱͯ͠දݱ͍ͯ͠Δ

Slide 30

Slide 30 text

ΞοςͷΞϓϦέʔγϣϯͷઃܭํ਑ 30 • GAE ΁ͷґଘ • GAE ͷػೳΛϑϧʹ׆༻͢Δ͜ͱͰεέʔϥϏϦςΟ΍Մ༻ੑͷԸܙΛड ͚͍ͯΔ • ౰વɺڧྗʹϩοΫΠϯ͞ΕΔ͜ͱʹͳΔ • ͞͞΍͔ͳ఍߅ɿυϝΠϯ૚ʢϏδωεϩδοΫʣͱΠϯϑϥ૚Λ෼͚ ͯɺυϝΠϯ૚Λ GAE ʹґଘ͠ͳ͍Α͏ʹ͍ͯ͠Δ • Datastore Λར༻͢Δ Repository Λ AWS ͷ DynamoDB Λར༻͢Δ Repository ʹࠩ͠ସ͑Α͏ͱࢥ͑͹Ͱ͖Δ

Slide 31

Slide 31 text

ΞοςͷΞϓϦέʔγϣϯͷઃܭํ਑ 31 • Go ͷߟ͑ํʹै͏ • ίʔυͷॻ͖ํͷΑ͏ͳࡉ͔͍͜ͱ • ύοέʔδΛͲ͏؅ཧ͢Δ͔ • ॏްͳϑϨʔϜϫʔΫΛಋೖ͠ͳ͍ • x/net/context ͱ net/http ύοέʔδ • 1ͭͷϦϙδτϦʹ͢΂ͯΛೖΕΔʢmonorepoʣ • APIɺWebɺCStool ͷΑ͏ͳڥք͕ҟͳΓͦ͏ͳϓϩδΣΫτΛɺ୯Ұϓ ϩδΣΫτͱͯ͠ѻ͏ • ڞ௨෦඼Λѻ͍΍͘͢ͳͬͯɺґଘؔ܎؅ཧ΋؆୯ʹͳΔ • ԣஅతͳίʔυͷվमΛ͠΍͘͢ͳΔ

Slide 32

Slide 32 text

·ͱΊ 32 1. Go ͱ GAE ͸ඇৗʹ༗ྗͳ Web ΞϓϦ։ൃखஈ 2. PaaS ͷ࣌୅͕ຊ֨తʹ࢝·͖ͬͯͨ
 
 → ͥͻ GAE/Go Λମݧͯ͠Έ͍ͯͩ͘͞