Upgrade to Pro — share decks privately, control downloads, hide ads and more …

マイクロサービスと設計原則 / Microservices and Design Princi...

Avatar for qsona qsona
November 08, 2018

マイクロサービスと設計原則 / Microservices and Design Principles

Avatar for qsona

qsona

November 08, 2018
Tweet

More Decks by qsona

Other Decks in Technology

Transcript

  1. XIPBNJ !2 • !RTPOB 5XJUUFS(JU)VC  • 4PGUXBSF&OHJOFFS • ݱࡏ͸43&5FBNʹॴଐ

    • 'J/$5FDIOPMPHJFT • .JDSPTFSWJDFT.FFUVQओ࠵
  2. "HFOEB !5 • ϚΠΫϩαʔϏεͷઃܭ • ͦ΋ͦ΋ϚΠΫϩαʔϏεͬͯ • ϚΠΫϩαʔϏεΛ࣮ફ͍ͯ͠Δͱ͖ʹ
 ͲΜͳઃܭ൑அΛ͢Δ͜ͱʹͳΔͷ͔ •

    ϚΠΫϩαʔϏεͱઃܭݪଇ • ϚΠΫϩαʔϏεͰͷઃܭ൑அͷ۩ମྫΛ΋ͱʹɺ
 ઃܭݪଇΛద༻ͯ͠ΈΔ
  3. ϚΠΫϩαʔϏεͷྑ͞ !8 • ٕज़ҟ࣭ੑ • ͦΕͧΕ࠷దͳݴޠɾϥΠϒϥϦɾσʔλετΞ౳Λར༻Ͱ͖Δ • ٕज़తෛ࠴ΛҾ͖ͣΓʹ͍͘ • ճ෮ੑ

    3FTJMJFODF  • αʔϏεʹো֐͕ى͖ͯ΋શମ΁ͷӨڹ͸গͳ͍ • σϓϩΠͷಠཱ • ΞδϟΠϧͳՁ஋ఏڙ • খࣗ͘͞཯ɾಠཱͨ͠૊৫ • ίϛϡχέʔγϣϯύεΛݮΒ͠ɺҙࢥܾఆΛૉૣ͘
  4. αʔϏεͷڥքΛఆΊΔ !13 • ϚΠΫϩαʔϏεͰ࠷΋ॏཁͳҙࢥܾఆ • ڥքΛఆΊΔج४ • Ϗδωε • ਓɾ૊৫

    • τϥϯβΫγϣϯ • αʔϏεΛ·͕ͨͬͨ෼ࢄτϥϯβΫγϣϯ͸ෆՄೳͱࢥ͏΂͠ • ٕज़
  5. αʔϏεͷ౷߹ !19 • ෳ਺ͷαʔϏεΛ࿈ܞͤ͞Δ • "1*࿈ܞ • 3&45GVM 31$ •

    ඇಉظΠϕϯτϕʔεͷ࿈ܞ • ϝοηʔδΩϡʔΛ࢖͏͜ͱ͕ଟ͍ • ͲͷΑ͏ʹ࿈ܞ͢Δ͔ɺͲΜͳٕज़Λར༻͢Δ͔ɺ
 "1*ͷཻ౓ͳͲ͕ઃܭ൑அͷϙΠϯτ
  6. 431 ୯Ұ੹೚ݪଇ !26 • มߋ͢Δཧ༝͕ಉ͡΋ͷ͸ूΊΔɺ
 มߋ͢Δཧ༝͕ҧ͏΋ͷ͸෼͚Δ Gather together the things

    that change for the same reasons.
 Separate those things that 
 change for different reasons.
  7. 431 ୯Ұ੹೚ݪଇ !27 • มߋ͢Δཧ༝͕ಉ͡΋ͷ͸ूΊΔɺ
 มߋ͢Δཧ༝͕ҧ͏΋ͷ͸෼͚Δ • ҎԼͷݪଇΛ಺แ͍ͯ͠Δ • ߴڽू

    ૄ݁߹ • ؔ৺͝ͱͷ෼཭ ग़య: The Single Responsibility Principle (Robert C, Martin 2014) https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html
  8. 431 ୯Ұ੹೚ݪଇ !28 • มߋ͢Δཧ༝͕ಉ͡΋ͷ͸ूΊΔɺ
 มߋ͢Δཧ༝͕ҧ͏΋ͷ͸෼͚Δ • มߋ͢Δཧ༝ͱ͸ɺ۩ମతʹԿͳͷ͔ʁ • ఏএऀ͍Θ͘ɺมߋ͢Δཧ༝ͱ͸ʮਓʯͰ͋Δ

    • 5IJTQSJODJQMFJTBCPVUQFPQMF ग़య: The Single Responsibility Principle (Robert C, Martin 2014) https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html
  9. 1%4

  10. %3:

  11. ػೳԣஅϏδωεͷྫ !37 • 'J/$Ͱͷྫಛ஡εϚʔτΞϓϦ • 'J/$ΞϓϦͷҰܗଶ • ಛఆͷܦ࿏͔ΒΞϓϦΛΠϯετʔϧ͢Δͱ
 ಛ஡ϢʔβʔʹͳΓɺ
 ಛ஡ઐ༻ΦϯϘʔσΟϯά͕࢝·Δ

    • ಛ஡ઐ༻ϛογϣϯ͕ղ์͞ΕΔ • ಛ஡Ϣʔβʔ༻ʹΧελϚΠζ͞Εͨ
 QVTI௨஌͕഑৴͞ΕΔ • 6TFS5BHαʔϏε • 0OCPBSEJOHαʔϏε • .JTTJPOαʔϏε • 1VTI௨஌αʔϏε ͦΕͧΕ͕ ϚΠΫϩαʔϏεʹରԠ
  12. ػೳԣஅϏδωεͷྫ !38 • 'J/$Ͱͷྫಛ஡εϚʔτΞϓϦ • 'J/$ΞϓϦͷҰܗଶ • ಛఆͷܦ࿏͔ΒΞϓϦΛΠϯετʔϧ͢Δͱ
 ಛ஡ϢʔβʔʹͳΓɺ
 ಛ஡ઐ༻ΦϯϘʔσΟϯά͕࢝·Δ

    • ಛ஡ઐ༻ϛογϣϯ͕ղ์͞ΕΔ • ಛ஡Ϣʔβʔ༻ʹΧελϚΠζ͞Εͨ
 QVTI௨஌͕഑৴͞ΕΔ • 6TFS5BHαʔϏε • 0OCPBSEJOHαʔϏε • .JTTJPOαʔϏε • 1VTI௨஌αʔϏε ͦΕͧΕ͕ ϚΠΫϩαʔϏεʹରԠ ͜ͷྫͩͱ ͪΐͬͱઆ໌͠ʹ͍͘ ผͷྫΛग़͍ͤͯͩ͘͞͞
  13. ՍۭͷʮڭҭʯαʔϏε !39 • αʔϏεߏ੒ • ࢦಋऀ ઌੜ ޲͚αʔϏε • ඃࢦಋऀ

    ੜె ޲͚αʔϏε • อޢऀ޲͚αʔϏε • FUD • Ϣʔβʔ͸্ͷΑ͏ͳ୯ҐͰʮαʔϏεʯΛଊ͍͑ͯΔ • ཪʹ͸༷ʑͳػೳ͕͋Δ • ྫ॓୊ ࿈བྷ FUD • ػೳ͸ෳ਺ͷαʔϏε͔Β࢖ΘΕΔ
  14. ઃܭύλʔϯػೳͰͷϚΠΫϩαʔϏε !41 • ୯Ұ੹೚ݪଇͰΈͯΈΔ • ػೳ໘Ͱ͸Αͦ͞͏ • ػೳ͕αʔϏεʹू·Δߴڽू • ֤ػೳ͸ಠཱʹ։ൃɾσϓϩΠՄೳૄ݁߹

    • ʮਓɾ૊৫ʯͷ໘Ͱ͸Ͳ͏ͩΖ͏͔ʁ • Ϗδωεతͳ૊৫ͷ෼͚ํ͸ʮઌੜνʔϜʯʮੜెνʔϜʯ͔΋͠Εͳ͍ • ͭ·Γɺෳ਺ͷνʔϜ͕ͭͷػೳʹखΛೖΕΔ • ୯Ұ੹೚Ͱͳ͍ʁ
  15. ઃܭύλʔϯϏδωεͰͷαʔϏεͱڞ༗%# !42 • ઌੜαʔϏε ੜెαʔϏε อޢऀαʔϏε • ͍ΘΏΔʮ෼அ͞ΕͨϞϊϦεʯ˞ ॓୊DB ࿈བྷDB

    อޢऀ ઌੜ ੜె อޢऀνʔϜ ੜెνʔϜ Services ઌੜνʔϜ ※ग़య: Rails Developers Meetup 2018: Day 1 Ͱ ʰQuipperʹ͓͚Δʮؔ৺ͷ෼཭ʯͷྺ࢙ʱͱ͍͏ൃදΛ͠ ·ͨ͠ - @kyanny's blog https://blog.kyanny.me/entry/2018/03/24/230459
  16. ઃܭύλʔϯϏδωεͰͷαʔϏεͱڞ༗%# !43 • ୯Ұ੹೚ݪଇͰΈͯΈΔ • ڞ༗%#͸ີ݁߹ • %#͸࣮૷Ͱ͋ΓɺΠϯλʔϑΣΠεͱଊ͑Δ΂͖Ͱ͸ຊདྷͳ͍ • ϚΠΫϩαʔϏεͷจ຺Ͱ͸໌֬ʹΞϯνύλʔϯ

    • ʮਓɾ૊৫ʯͷ໘Ͱ͸ߴڽूɾૄ݁߹ʹͳ͍ͬͯΔͱ΋͍͑Δ • Ϗδωεͷ࣮ଶʹ߹ͬͨαʔϏεߏ੒ • ಛʹ։ൃॳظϑΣʔζͰ͸σϝϦοτ͕࣮͸খ͘͞ɺ
 ։ൃεϐʔυΛ࠷େԽ͢Δઓज़ͱ΋͍͑Δ • ٕज़తෛ࠴ͷલआΓ
  17. 1%4Λ࣋ͪग़͢ !44 • 1SFTFOUBUJPOϏδωεͱ%PNBJOϏδωε͕͋ΔͷͰ͸ʁʁ • ઌੜ޲͚ੜె޲͚อޢऀ޲͚αʔϏεΛ
 1SFTFOUBUJPOϏδωεͱଊ͑ͯΈΔ • 1SFTFOUBUJPO୲౰αʔϏε͸ɺΤϯυϢʔβʔʹ޲͚ͨू໿Λ୲౰͢Δ •

    ઌੜαʔϏε ੜెαʔϏε อޢऀαʔϏε • #'' #BDLFOETGPS'SPOUFOET ʹ͍ۙΠϝʔδ • %PNBJO୲౰αʔϏε͸ɺػೳΛ୲౰͢Δ • ॓୊αʔϏε ࿈བྷαʔϏε • ֤1SFTFOUBUJPOϏδωεͷཁٻΛௐఀ͢Δ
  18. 1%ͷڥք͋΍;΍໰୊ !48 • 1SFTFOUBUJPOͩͱࢥ͍ͬͯͨ΋ͷ͕࣮͸%PNBJOͩͬͨΓ͢Δ • ରࡦ • ͔ͬ͠Γٞ࿦ͯ͠ɺͳΔ΂͘%PNBJOʹدͤΔ • ͦΕͰ΋෼͔Βͳ͔ͬͨΒ1SFTFOUBUJPOʹدͤΔ

    • ؔ࿈͢Δ͔΋ • ෼அ͞ΕͨϞϊϦε͸։ൃॳظʹ͓͍ͯඞͣ͠΋ΞϯνύλʔϯͰ͸ͳ͍ • ڥքΛݟޡͬͯϚΠΫϩαʔϏεԽ͢Δͱ஍ࠈΛݟΔɺ
 υϝΠϯΛཧղ͔ͯ͠ΒαʔϏε෼ׂͤΑ • ू໿ϨΠϠʔͷଠΓա͗ʹ஫ҙ
  19. αʔϏεؒͷओैؔ܎ !51 • αʔϏε"Ͱͷσʔλ΍ग़དྷࣄΛɺαʔϏε#Ͱ΋࢖͍͍ͨͱ͖ • ͭ·Γɺ"ͱ#Λ࿈ܞͤ͞Δ • ֓Ͷ௨Γ͋Δ • 

    "͕#ʹ1045͢Δ •  #͕"͔Β(&5͢Δ •  "͕ΠϕϯτΛ౤͛ɺ
 #͕TVCTDSJCFͯ͠ॲཧ A B A B A B POST GET
  20. αʔϏεؒͷओैؔ܎ !52 •  ͱ ͸࣮࣭ಉ͡ •  ͸"͕ओɺ#͕ै •

      ͸#͕ओɺ"͕ै • ͭ·Γɺ͜ͷػೳʹରͯ͠
 ͲͪΒ͕ओମతʹͳΔ΂͖͔ʁ
 ͱ͍͏࿩ A B A B A B POST GET
  21. ओैؔ܎Λߟ͑Δ !54 • ͭͷαʔϏε • -JGFMPHαʔϏε • า਺ͳͲͷϔϧεέΞσʔλΛѻ͏ • 1VTI௨஌

    • ϢʔβʹQVTI௨஌ΛૹΔͨΊͷ৘ใ Λ࣋ͪɺ࣮ࡍʹQVTI௨஌ΛૹΔ • ͲͪΒ͕ओͰ͋Δ΂͖͔ʁ • ओʹͳΔ΄͏͕ࠓճͷػೳ 1VTI ௨஌ͷ࣮ࡍͷจݴͳͲ Λ࣋ͭ Lifelog Push௨஌ Lifelog Push௨஌ POST
  22. ୯Ұ੹೚ݪଇ !55 • -JGFMPH͕ओͱ͢Δͱ • -JGFMPH͸ɺϔϧεσʔλΛه࿥͢Δ੹຿ͱ
 ׂͱ৭Μͳจݴ͕͋ΔϦονͳ 1VTI௨஌ΛૹΔ੹຿Λ྆ํ΋ͭ • ͜Ε͸୯Ұ੹೚ݪଇʹ൓͢Δ

    ௿ڽू  • 1VTI௨஌͕ओͱ͢Δͱ • 1VTI௨஌αʔϏε͸ɺ-JGFMPHҎ֎ͷ৭ΜͳαʔϏε͔Β΋
 ΠϕϯτΛड͚औΔ • ΋͠1VTI௨஌ΛશͯϚωδϝϯτ͢ΔਓνʔϜ͕͍ΔͳΒ͹
 ୯Ұ੹೚ݪଇΛຬͨ͢ • ͦ͏Ͱͳ͚Ε͹୯Ұ੹೚ݪଇʹ൓͢Δ ີ݁߹
  23. ѱ͍%3:ͷྫ !61 • ֤࡞඼͕ɺଞͷ࡞඼ͱಠཱͯ͠ฤूͰ͖ͳ͘ͳ͍ͬͯΔ • ʮੲʑɺ͋Δͱ͜Ζʹɾɾɾʯͷจʹ
 ੹೚Λ͍࣋ͬͯΔͷ͸໌Β͔ʹ֤࡞ՈͰ͋Δ͸ͣ • ୯Ұ੹೚ݪଇʹ൓͠ɺີ݁߹ʹͳ͍ͬͯΔ •

    ҰํɺϝϦοτ΋গͳ͍ • จ͕୹͍ͷͰɺΘ͟Θ͟ϥΠϒϥϦԽ͢Δҙຯ͕ • Ծʹݟͨ໨্ಉ͡Ͱ΋ ڞ௨Խ͢΂͖Ͱͳ͍΋ͷ͸
 ͨ͘͞Μ͋Δ
  24. ྑ͍%3:ɾѱ͍%3:ʁ !62 • ྑ͠ѱ͠ͷίϯτϥετ͕͋Δ • ʮ࡞඼ʯʹ͸ʮ࡞Ոʯ͕੹೚Λ࣋ͭͷ͸ࣗ໌ • ࡞඼ͱ͸ͦ͏͍͏΋ͷͩͱΈΜͳೝ͍ࣝͯ͠Δ • Ͱ΋ɺฤूऀࢹ఺ͩͱ·ͨҧͬͯݟ͑Δ

    • දهΏΕ͕ؾʹͳΔ • UZQPΛݮΒ͍ͨ͠ • %3:ͷσϝϦοτΛ؇࿨͢Δྫ • ڞ௨ϥΠϒϥϦ͸༻ҙ͢Δ • ϥΠϒϥϦ͸ద੾ʹ֦ுͷޱ͕ۭ͍͍ͯΔ • ผʹ࢖Θͳͯ͘΋͍͍
  25. Ͳ͏͢Δ͔ʁ !66 • ҊαʔϏεςϯϓϨʔτΛڧ੍ͤ͞Δʁ • શαʔϏε͕ڞ௨ͷϥΠϒϥϦ΍ઃఆΛ࢖͏Πϝʔδ • ֤αʔϏε͕ີ݁߹ʹͳΓɺٕज़ҟ࣭ੑͳͲ͕ࣦΘΕΔ • جຊతʹ͸σϝϦοτͷ͕ଟ͍ͱࢥ͏

    • ੹೚ͱ੹೚͕ަΘΓ͍͋ͬͯΔͷͰɺ
 ୯Ұ੹೚ݪଇͰ؆୯ʹ౴͑Λग़͢͜ͱ͸Ͱ͖ͳ͍ • ϝϦοτɾσϝϦοτʹάϥσʔγϣϯ͕͋Δ • ϝϦοτΛͳΔ΂͘࢒ͭͭ͠ɺσϝϦοτΛ࠷খԽ͢Δ
  26. Αͦ͞͏ͳҊ !67 • جຊతʹ͸ϚΠΫϩαʔϏεͷࣗ཯ੑΛॏࢹ͢΂͖ • σϓϩΠ΍ηΩϡϦςΟ΋ɺୈҰٛతʹ͸֤αʔϏεͷ੹຿ͱ͢Δ • 43&͸ͦΕΛαϙʔτͨ͠Γɺ࠷ޙͷࡆͱͳΔ • ࣮૷ͷ%3:Ͱ͸ͳ͘ɺ࡞ۀͷ%3:Λ໨ࢦ͢

    • ࣮૷ʹ͸֤αʔϏε͕ୈҰٛతʹ੹೚Λ΋͍ͬͯΔ • ͔ͩΒ֤αʔϏεʹίϛοτ͞Ε͍ͯΔɻ࣮૷ࣗମ͸%3:͡Όͳ͍ • 43&͸ԣஅతʹมߋͷఏҊ͕ग़དྷΔ • ࣅͨΑ͏ͳมߋͷఏҊΛ·ͱΊͯͰ͖Ε͹͍͍ • ෳ਺ͷ(JU)VC3FQPTJUPSZʹରͯ͠ࣅͨΑ͏ͳมߋΛ
 ·ͱΊͯ1VMM3FRVFTUΛग़ͤΔํ๏͕͋ͬͨΒڭ͑ͯ΄͍͠