Slide 1

Slide 1 text

GunosyͰͷ Microservisesͷݱঢ়ͱ Goͷ࢖͍Ͳ͜Ζ @y_matsuwitter

Slide 2

Slide 2 text

ࣗݾ঺հ • ։ൃຊ෦ࣥߦ໾һࡶ༻໾ • iOS, Android, Infrastructure, Web • Golang෍ڭ໾ • ਖ਼࠲ • ࠷ۙؾʹͳΔ΋ͷ: MQTT

Slide 3

Slide 3 text

࠷ۙίʔυॻ͚ͯ·ͤΜ…

Slide 4

Slide 4 text

ࠓ೔ͷ࿩ • GunosyͰӡ༻͍ͯ͠ΔMicroservicesͷ࿩ • ͦͷதͰGoΛͲ͏࢖͍ͬͯΔ͔

Slide 5

Slide 5 text

Microservices = খ͞ͳαʔϏεͷ૊Έ߹Θͤ

Slide 6

Slide 6 text

What is microservices? • <=> Monolithic • ద੾ͳن໛ͷϏδωευϝΠϯ͝ͱʹ಺෦αʔϏεΛ෼ׂ • ΞϓϦέʔγϣϯଆ͔Β֤छAPIΛݺͼग़͢ • αʔϏεʹ߹Θٕͤͨज़બఆΛ࣮ࢪ • SOAͷম͖௚͠

Slide 7

Slide 7 text

Why microservices? • Ϗδωεʹ߹ΘͤͨνʔϜͷ෼ׂɾฤ੒ • খ͞ͳαʔϏεʹΑΔଐਓੑͷرബԽ • Ϗδωεཁٻʹର͢ΔॊೈͳରԠ • ͍Βͳ͍΋ͷΛࣺͯΒΕΔ ϞϊϦγοΫͳγεςϜͰ͸ɺϏδωε͕੒௕͢Δʹै͍վम ίετ͕૿Ճ͍ͯ͘͠

Slide 8

Slide 8 text

ࣄྫ: Soundcloud • طଘͷϞϊϦγοΫ͕͋ͬͨ • ϦϑΝΫλϦϯάͷஈ֊ͰαʔϏεΛ෼ੳ • ϏδωευϝΠϯ͝ͱʹMicroserviceΛߏங • FinagleϕʔεͷRPCͰେྔͷJVM্ͷΞϓϦΛ݁߹ • ͦͷ্Ͱ༷ʑͳݴޠΛӡ༻ ࢀߟ: Building Products at SoundCloud

Slide 9

Slide 9 text

MicroservicesͷதͰੜ ͖ΔGo

Slide 10

Slide 10 text

ͳͥGoͳͷ͔ • ֎෦ґଘͷͳ͍όΠφϦ • ܰྔ͔ͭϋΠύϑΥʔϚϯε • ڞ௨ϥΠϒϥϦ੾Γग़ָ͕͠

Slide 11

Slide 11 text

GunosyͰͷ࿩

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

• άϊγʔͱ͍͏୯ҰͷχϡʔεΞϓϦ • ಺෦͸ϏδωευϝΠϯ͝ͱʹ෼ׂ • Platformߏ૝ʹΑΓ಺෦ͷϏδωευϝΠϯ͸ຖ݄̎ͭ΄Ͳ ૿͍͑ͯΔ

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

ࣾ಺Microserviceͷߏ੒ཁૉ • API༻HTTPαʔό • όονॲཧܥαʔό • ؅ཧը໘ • Πϯϑϥߏ੒ɾ؅ཧπʔϧ

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

APIαʔό • ༻ҙ͞ΕͨσʔλΛద੾ͳυϝΠϯϩδοΫʹͯฦ٫ • େ൒ͷAPI͕Golang੡

Slide 18

Slide 18 text

APIαʔόɺ࢖͍ͬͯΔ΋ͷ • Kami ... WebFramework • mogi ... SQL stub Ϟσϧ૚ͳͲΛڞ༗ύοέʔδʹ੾Γग़͠ɺ࢖͍·Θ͢

Slide 19

Slide 19 text

ύοέʔδߏ੒ • ϏδωευϝΠϯ͝ͱʹ1ϦϙδτϦ • ಺෦͸ߋʹࡉ͔͘෼͚ͨυϝΠϯ͝ͱʹύοέʔδΛ੾Δ example-service-1 ├── domain-1 ├── domain-2 ├── main.go └── routes.go common-package ├── domain-1 ├── domain-2 └── main.go

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

όονॲཧ • ࣌ʹେྔͷσʔλΛɺAPIར༻΍KPIूܭͷͨΊʹར༻ • ෳ਺αʔόͰͷฒྻॲཧ͕ඞཁͳ৔໘΋ଟʑ

Slide 22

Slide 22 text

όονॲཧ w/ Go • Go͸ฐࣾͷόονॲཧʹ͸ࠓͷͱ͜Ζ΄΅ར༻͞Εͣ • େ൒͸Python • ෳ਺αʔόʹ·͕ͨΔ΋ͷ͸Python + Celery • APIͱͷڞ௨ॲཧ͕͋Γɺ1ΠϯελϯεͰࡁΉॲཧͷΈGo • ʢCacheσʔλͷੜ੒ͳͲʣ

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

؅ཧը໘ • σʔλεΩʔϚʹԠͯ͡ॊೈʹϑΥʔϜɾϦετΛੜ੒ɺॲ ཧ • ༷ʑͳόονॲཧΛΩοΫ͢Δ

Slide 25

Slide 25 text

؅ཧը໘ w/ Golang • ݴޠͷੑ࣭Ώ͑ɺॊೈͳϑΥʔϜੜ੒ɾӡ༻ʹ޲͍ͨπʔϧ ͸গͳ͍ • ࣾ಺ͷ؅ཧܥ͸Django͔Rails͕ओ • APIܦ༝ͰGoAPIΛؒ઀తʹར༻͢Δ͜ͱ͕ଟ͍ • νϟοτͷॲཧͳͲ

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Πϯϑϥ؅ཧܥ • ֤छΞϓϦέʔγϣϯͷσϓϩΠ • ϞχλϦϯά

Slide 28

Slide 28 text

Πϯϑϥ w/ Go • ؅ཧܥπʔϧͰGo੡ͷ΋ͷ͸ଟ͍ • GoΛॻ͘͜ͱ͸গͳ͍ • શମͷߏ੒؅ཧ͸OpsworksͰ࣮ࢪ

Slide 29

Slide 29 text

σϓϩΠ w/ Go • go build͠ɺOpsworksʹΑΓඞཁͳϑΝΠϧ܈ΛS3ܦ༝Ͱ ͹Β·͘ • Capistranoͷ΍Γํʹ͍ۙσϓϩΠϑϩʔ /path/to/service ├── shared │ ├── logs │ ├── tmp │ └── config ├── 20150306085540 │ ├── bin │ ├── public │ └── etc... ├── 20150306090324 └── current -> /path/to/service/releases/20150306090324

Slide 30

Slide 30 text

·ͱΊ • ϏδωευϝΠϯ͝ͱʹҰͭͷαʔϏε܈Λ࡞੒ • GoʹͯύϑΥʔϚϯεΛ֬อͭͭ͠υϝΠϯؒɾϨΠϠʔؒ Ͱ࿈ܞ • ݱঢ়Ͱ͸αʔϏεͷ௥Ճʹ΋༨༟͕ग़ͯ͘Δఔ౓ʹ

Slide 31

Slide 31 text

Go + MicroservicesͰ αΫαΫαʔϏε֦େ

Slide 32

Slide 32 text

Future works... • gRPCͷར༻ʹΑΔαʔόؒ݁߹ • ΠϕϯτۦಈܕMicroservices(Reactive Microservices) • ৽͍͠هࣄ͕௥Ճ͞Εͨ => ֤αʔϏε͝ͱʹউखʹඞཁ ͳॲཧ։࢝