Slide 1

Slide 1 text

When to use golang in production @y_matsuwitter 1

Slide 2

Slide 2 text

ࣗݾ঺հ • ։ൃຊ෦ࣥߦ໾һࡶ༻໾ • iOS, Android, Infrastructure, Web • Golang!! Docker!! • ਖ਼࠲ 2

Slide 3

Slide 3 text

ࠓ೔ͷ࿩ • ҰൠతͳWeb/AppαʔϏεʹ͓͚ΔGoݴޠͷӡ༻ʹ͍ͭͯ 3

Slide 4

Slide 4 text

Goݴޠͷಛ௃ • CPUɾϝϞϦ྆໘͔Βݟͯܰྔ • Ͳ͜Ͱ΋ಈ࡞͢ΔόΠφϦ • ੩తܕ෇͚ݴޠ • ฒߦɾฒྻॲཧ͕ॻ͖΍͍͢ (goroutine) 4

Slide 5

Slide 5 text

Goݴޠͷۤखͳ΋ͷ • LL΄Ͳͷॊೈੑ͸΋ͨͤͮΒ͍ʢreflectͱ͔͋Δ͚Ͳʣ 5

Slide 6

Slide 6 text

Α͋͘ΔWeb/Appͷߏ੒ 6

Slide 7

Slide 7 text

ࢀߟ: GunosyͷΠϯ ϑϥ AWS ಋೖࣄྫɿGunosyגࣜձࣾΑΓ 7

Slide 8

Slide 8 text

NativeApp iOS/AndroidͰಈ࡞͢ΔόΠφϦΛੜ੒͢Δ • go.mobile • go v1.4͔ΒAndroidΞϓϦ࡞Ε·͢ • go v1.5͔ΒiOS΋αϙʔτ։࢝ 8

Slide 9

Slide 9 text

NativeApp: GunosyͰͷ࿩ • go-mobileΛɺGoͱ֤छΫϥΠΞϯτͷϞσϧपΓڞ௨Խʹ ࢖͏ݕ౼ ͔͠͠ࠓͷͱ͜Ζ࣮༻తͰͳ͍ 9

Slide 10

Slide 10 text

Web App ֤ϖʔδͷHTMLඳը • text޲͚ɺhtml޲͚ͦΕͧΕͷTemplateΛඪ४Ͱඋ͍͑ͯ· ͢ • net/httpͰେ൒͸ࣄ଍Γ·͢ ͨͩ͠ɺRails΍Django౳ͷϖʔδϨϯμϦϯάػߏͱൺ΂Δͱ ॊೈੑ͸௿͘ɺ෺଍Γͳ͍ 10

Slide 11

Slide 11 text

Web Appʹ͍ͭͯ SPA͕ओྲྀʹͳ͍ͬͯΔ͜ͱΛߟ͑ΔͱɺϖʔδͷϗεςΟϯά ʹͦΕ΄Ͳߴػೳ͸ඞཁͳ͍ ϑΝΠϧΛฦ͚ͩ͢Ͱ͋Ε͹GolangͰे෼ ϖʔδͷ։ൃ͸jsͷ্ʹ৐͔ͬΖ͏ 11

Slide 12

Slide 12 text

Web Appʹ͍ͭͯ: GunosyͰͷ࿩ ฐࣾͷWebApp։ൃͰ͸ • ϖʔδϋϯυϥ͸Go • ϑϩϯτΤϯυʢHTML, JS, CSSʣ͸શͯgulpͰ։ൃ • σʔλ͸جຊతʹAPIܦ༝Ͱͷऔಘ ͱ͍͏ܗࣜʹ͍ͯ͠·͢ɻ APIܦ༝ʹ౷Ұ͢Δ͜ͱͰωΠςΟϒΞϓϦͱWebͷ࢓༷Λڞ௨ 12

Slide 13

Slide 13 text

API ओλεΫ: ύϥϝλΛड͚औΓద੾ͳϏδωεϩδοΫΛܦͯ JSONͳͲΛฦ٫͢Δ • Go͕Ұ൪׆༂ • ϋΠύϑΥʔϚϯεͳAPIΛ୹ظؒͰߏங͠΍͍͢ 13

Slide 14

Slide 14 text

API: GunosyͰͷ࿩ • ࣗࣾ੡WebFWͷKamiΛར༻ • ڞ௨ॲཧΛผϦϙδτϦͰ؅ཧ͠go get • nginx͔ΒϓϩΩγ͢Δ৔߹΋͋Δ • WebSocketར༻ͷ৔߹͸DNSϥ΢ϯυϩϏϯͰৼΓ෼͚͠ GoͰ௚ड͚͢Δ 14

Slide 15

Slide 15 text

ؓ࿩ٳ୊: GoͷORMʹ͍ͭͯ • GunosyͰ͸ORMΛ࢖͓ͬͯΓ·ͤΜ • GORM͕ओྲྀͳ໛༷ • ւ֎൛ͷAPIʹͯGorpΛར༻͍ͯ͠Δ 15

Slide 16

Slide 16 text

AdminApp ओλεΫ: ΞϓϦέʔγϣϯ؅ཧऀ͕DB্ͷσʔλ΍ɺKPIͳͲ ͷ؅ཧΛߦ͏ • GoͷදݱྗͰ͸ߏஙͷͨΊʹશͯͷϩδοΫΛهड़͢Δ͜ͱ ͕ଟ͍ • ͜ͷ΁Μ͸django-admin΍RailsAdminΛ࢖͏΄͏͕޾ͤ 16

Slide 17

Slide 17 text

AdminApp: GunosyͰͷ࿩ • ͓͓ΑͦDjango-admin͕ར༻͞Εͭͭ͋Γ·͢ • KPIμογϡϘʔυ౳ʹ͸GeckoBoard΍MackerelΛݕ౼ɾར ༻͠ӡ༻ίετ࡟ݮ • Go੡؅ཧը໘͕Ұ͚ͭͩ͋Γ·͕͢ɺ΄΅ෳࡶͳػೳͷΈʹ ಛԽʢνϟοτΛฦ͢ͳͲʣ 17

Slide 18

Slide 18 text

ूܭɾόονॲཧ ఆظతʹɺ࣌ʹ͸େن໛ͳσʔλॲཧΛߦ͏ • Goࣗମͷॲཧੑೳ͸ߴ͍͕ɺॊೈ͞ʹ͔͚Δ • ෳ਺HostͰεέʔϧͤ͞Α͏ͱ͢ΔͱGoʹ͸·ͩ͜ͳΕͨ࢓ ૊Έ͕ͳ͍ • ...gRPC? 18

Slide 19

Slide 19 text

ूܭɾόονॲཧ: GunosyͰͷ࿩ • ΄ͱΜͲ͸Python + CeleryͰॲཧ͍ͯ͠Δ • େ൒͸CeleryͰͷ෼ࢄ͕εέʔϧ͠΍͘͢Pythonࢿ࢈΋͋ ΔͷͰָ • Ұ෦ͷΩϟογϡΛࡌͤΔΑ͏ͳॲཧ͸APIͰ࢖༻ͨ͠Goͷ ϞσϧΛ࢖͏͜ͱ΋ 19

Slide 20

Slide 20 text

ؓ࿩ٳ୊: Goͱػցֶश • աڈminhashͱ͔࡞ͬͯΈͨ • ഑ྻॲཧ͕ͭΒ͍ • δΣωϦΫεແ͍ͷͰΧίΠΠmapͳ͍ • Golearnͱ͔͋Γ·͕͢… 20

Slide 21

Slide 21 text

Πϯϑϥ؅ཧɾ؂ࢹ • ߏ੒؅ཧ͸Chef/AnsibleͳͲΛ௒͑Δ΋ͷ͸ͳ͍ • Go੡Πϯϑϥπʔϧࣗମ͸૿͍͑ͯΔ • πʔϧΛ࢖͏͜ͱ͸͋ͬͯ΋ɺGoΛ࢖͏͜ͱ͸ׂͱগͳ͍ 21

Slide 22

Slide 22 text

Πϯϑϥ؅ཧɾ؂ࢹ: GunosyͰͷ࿩ • GoͰ಺੡ͨ͠πʔϧ౳͸ಛʹ͋Γ·ͤΜ • ࣾ಺࠾༻ͷGo੡πʔϧ܈ Mackerel-agent, Docker, ...etc 22

Slide 23

Slide 23 text

Ҏ্౿·͑ͯͷఏҊత·ͱΊ • ΞϓϦ։ൃ͸ͦΕͧΕͷSDK • Web͸SPAલఏͰ΍Δ৔߹ʹGo • APIΛGoɺϋΠύϑΥʔϚϯε͔ͭσϓϩΠ͠΍͍͢ • ؅ཧը໘͸django-adminͳͲϑϧελοΫFWָ͕ 23

Slide 24

Slide 24 text

Ҏ্౿·͑ͯͷఏҊత·ͱΊ(͖ͭͮ) • ूܭɾόον͸Python + CeleryͳͲطଘࢿ࢈Λ࢖͏΄͏͕Α ͍ • Πϯϑϥ͸Go੡πʔϧͷ׆༂͕૿͑Δ 24

Slide 25

Slide 25 text

࠷ޙʹ • খن໛ͳίʔυϕʔεʹ཈͑ΔͳΒɺύϑΥʔϚϯεͷ໘͔ Βݟͯ΋Go࠷ߴ 25