When to use golang in production

When to use golang in production

白ヤギ勉強会発表資料

05e8adce66be4e80390a29ace0075161?s=128

y_matsuwitter

March 11, 2015
Tweet

Transcript

  1. When to use golang in production @y_matsuwitter 1

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

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

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

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

  6. Α͋͘ΔWeb/Appͷߏ੒ 6

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

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

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

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

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

  12. Web Appʹ͍ͭͯ: GunosyͰͷ࿩ ฐࣾͷWebApp։ൃͰ͸ • ϖʔδϋϯυϥ͸Go • ϑϩϯτΤϯυʢHTML, JS, CSSʣ͸શͯgulpͰ։ൃ

    • σʔλ͸جຊతʹAPIܦ༝Ͱͷऔಘ ͱ͍͏ܗࣜʹ͍ͯ͠·͢ɻ APIܦ༝ʹ౷Ұ͢Δ͜ͱͰωΠςΟϒΞϓϦͱWebͷ࢓༷Λڞ௨ 12
  13. API ओλεΫ: ύϥϝλΛड͚औΓద੾ͳϏδωεϩδοΫΛܦͯ JSONͳͲΛฦ٫͢Δ • Go͕Ұ൪׆༂ • ϋΠύϑΥʔϚϯεͳAPIΛ୹ظؒͰߏங͠΍͍͢ 13

  14. API: GunosyͰͷ࿩ • ࣗࣾ੡WebFWͷKamiΛར༻ • ڞ௨ॲཧΛผϦϙδτϦͰ؅ཧ͠go get • nginx͔ΒϓϩΩγ͢Δ৔߹΋͋Δ •

    WebSocketར༻ͷ৔߹͸DNSϥ΢ϯυϩϏϯͰৼΓ෼͚͠ GoͰ௚ड͚͢Δ 14
  15. ؓ࿩ٳ୊: GoͷORMʹ͍ͭͯ • GunosyͰ͸ORMΛ࢖͓ͬͯΓ·ͤΜ • GORM͕ओྲྀͳ໛༷ • ւ֎൛ͷAPIʹͯGorpΛར༻͍ͯ͠Δ 15

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

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

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

  19. ूܭɾόονॲཧ: GunosyͰͷ࿩ • ΄ͱΜͲ͸Python + CeleryͰॲཧ͍ͯ͠Δ • େ൒͸CeleryͰͷ෼ࢄ͕εέʔϧ͠΍͘͢Pythonࢿ࢈΋͋ ΔͷͰָ •

    Ұ෦ͷΩϟογϡΛࡌͤΔΑ͏ͳॲཧ͸APIͰ࢖༻ͨ͠Goͷ ϞσϧΛ࢖͏͜ͱ΋ 19
  20. ؓ࿩ٳ୊: Goͱػցֶश • աڈminhashͱ͔࡞ͬͯΈͨ • ഑ྻॲཧ͕ͭΒ͍ • δΣωϦΫεແ͍ͷͰΧίΠΠmapͳ͍ • Golearnͱ͔͋Γ·͕͢…

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

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

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

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

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