dots summit 2015にて。
GunosyͷࢪࡦΛࢧ͑Δٕज़@y_matsuwitter
View Slide
About@y_matsuwitter» ։ൃຊ෦ࣥߦһ» iOS, Android,Infrastructure, Web» Golang!! Docker!!» ਖ਼࠲
Gunosyͱ» χϡʔεΩϡϨʔγϣϯΞϓϦ» ݱࡏ800ສDL» ػցֶश + ΞϓϦ։ൃ + ࠂ৴» ΤϯδχΞνʔϜ 25໊
Gunosy։ൃͷ໘ന͞» ߴAPIαʔό ʢPeak࣌ϨΠςΠϯγ 30msʣ» ߴੑೳADαʔό» Ұઍສ݅Λࢧ͑ΔPush৴ج൫» ৽ٕज़Λͻͨ͢ΒProduction» ...etc
ࠓͷ» GunosyͰͷࡉ͔͍ϦϦʔεΛࢧ͍͑ͯΔऔΓΈʹ͍ͭͯ» େ·͔ͳ͕ଟ͍ͷͰɺࡉ͔͍෦ޙͰ࣭͝Լ͍͞
We have...Too many problemsToo too many ideas
Try, try, try...with limited time andresources.
There is no silver bullets!
Grow your app
Grow your appGrow your team!!
Team = Your service» ֤ࣗͷઓ͕ٕज़ྗͷ» ٕज़ྗͷ͕νʔϜͷ» νʔϜͷ͕ΞϓϦͷظతͳ
Gunosy's rule» ৽ٕज़ͷੵۃ࠾༻» ࣈਆΑΓਖ਼͍͠» 㙽ʹ֯ʹࢪࡦɾϦϦʔε
৫ͷ֦େ͕ݸਓͷઓΛ͛ͳ͍Έͮ͘Γ
But, How did it?
MicroserviceDisposability
Microservices= খ͞ͳαʔϏεͷΈ߹Θͤ
What is microservices?» దͳنͷϏδωεϩδοΫͷմ͝ͱʹ෦αʔϏεΛׂ» ΞϓϦέʔγϣϯଆ͔Β֤छAPIΛݺͼग़͢» αʔϏεʹ߹Θٕͤͨज़બఆ
Why microservices?» Ϗδωεʹ߹ΘͤͨνʔϜͷׂɾฤ» খ͞ͳαʔϏεʹΑΔଐਓੑͷرബԽ» Ϗδωεཁٻʹର͢ΔॊೈͳରԠϞϊϦγοΫͳγεςϜͰɺϏδωε͕͢Δʹै͍վमίετ͕૿Ճ͍ͯ͘͠
Disposability= ࣺͯ͢͞
What is disposability?» γεςϜؒͷ݁߹Λখ͘͞อͪɺഇغΛ༰қʹ͢Δ» ϦϑΝΫλϦϯάͰͳ͘γεςϜͷஔ͖͑ʹΑΔରॲ» ֤αʔϏεͷґଘͷ͍ΞϓϦέʔγϣϯ
Why disposability?» ͦͷ࣌ͷ৽ٕज़ͷ࠾༻ʹΑΔஔ͑Λ༰қʹ͢Δ» ෛ࠴ͱͳͬͨ࣌ʹʮࣺͯΔʯͱ͍͏அΛऔΕΔ༨» খ͞ͳνʔϜͰଟ͘ͷ࣮ݧ݁Ռͱͯ͠ଟ͘ͷࢼߦɾ৽ٕज़ͷTry͕ੜ·ΕΔ
But...How?
Golang, ABTestingOpsworks, Docker
Golang» ΞϓϦέʔγϣϯͷஔ͕༰қ» ฒྻॲཧͷهड़͕༰қ» APIͷຆͲ͕Golang» ࠃ࠷େͷGolang։ൃνʔϜʢࣗশʣ
Golangӡ༻ϧʔϧ» ֤αʔϏεͰΘΕΔڞ௨ϞδϡʔϧΛࣾύοέʔδͱͯ͠ఏڙ» ΤϯυϙΠϯτύεϕʔεͰසൟʹReplace
Golang։ൃ࣌ͷߏ» WebϑϨʔϜϫʔΫ: guregu/kami» ͦͷଞ΄΅ύοέʔδͷΈͰӡ༻» CircleCIʹΑΔCI
ABTesting» ଟ͘ͷࢪࡦΛABςετʹͯޮՌܭଌ» σβΠφͱͯ͠ͷઓΛࡉ͔͘ө͢ΔΈ
ABTesting࣮ࡍͷӡ༻» APIΑΓͲͷUIΛग़੍͔͢ޚʢը໘ભҠɾϨΠΞτͳͲʣ» RedshiftɾBigQueryͰՌूܭ» KPIશͯμογϡϘʔυʹΑΓ֬ೝ
ABTesting࡞͍ͬͯΔͷ» ஈ৭ͳͲશͯͷଐੑΛϦϞʔτ੍ޚՄೳͳςΩετඳըΤϯδϯ
ABTesting࡞͍ͬͯΔͷ» JSONϕʔεͷHTML likeͳಠࣗఆٛϏϡʔ
Opsworks» ͩΕͰඞཁͳΠϯϑϥΛGUIͷΈͰߏங» ॊೈͳεέʔϦϯάରԠ
OpsworksϥʔϝϯτοϐϯάΠϯϑϥ» ը໘Λϙνϙν͍͚ͯͩ͘͠ͰඞཁͳΫϥελ͕࡞Մೳ
Docker» ϓϩηε࣮ߦڥΛ࣮ࡍͷαʔό͔Β» શͯͷγεςϜʹϙʔλϏϦςΟ
DockerҰྫ: ࢄόονॲཧ
·ͱΊ» MicroservicesͱDisposability» ઓΛ͛ͳ͍։ൃମ੍Λ࡞Γଓ͚Δ» ΞϓϦͷͦ͜ʹ͍ͭͯ͘Δʂ
We're hiring!!͢ΔڥͰ࠷ߴͷ։ൃΛ
࣭ @y_matsuwitter ·Ͱ