Java Day Tokyo 2016 2016/05/24
࣮ફ͔ͯͬͨ͠JavaϚΠΫϩαʔϏε։ൃ - What I learned about Microservices - #jdt2016_4E୩ຊ ৺ Acroquest Technologyגࣜձࣾ
View Slide
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Who am I?2• ୩ຊ ৺ (Shin Tanimoto)- Acroquest Technology גࣜձࣾ- Javaτϥϒϧγϡʔλʔ- ຊJavaϢʔβάϧʔϓװࣄ Twitter : @cero_t- Facebook : shin.tainmoto
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.࣭3
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.։ൃऀͷํʁ4
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.ϚΠΫϩαʔϏε ͲΕ͙Β͍ฉ͍ͨ͜ͱ͕͋Δʁ5
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.1. ໊લΛฉ͍ͨ͜ͱ͋Δ2. ֓ཁ͙Β͍͍ͬͯΔ3. ։ൃͨ͜͠ͱ͕͋Δ4. ӡ༻͍ͯ͠Δ5. શʹϚελʔͨ͠6
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.No.5ʁؼ͍ͬͯͩ͘͞ʂʂ7
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.ϚΠΫϩαʔϏεͱʁ8
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.ϚΠΫϩαʔϏε খ͞ͳαʔϏεͷू߹ମͱͯ͠ ߏங͞ΕͨγεςϜͰ͋Δ9
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.ϚΠΫϩαʔϏε ࢦ͢ͷͰͳ͘ ݁ՌͰ͋Δ10
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.ϚΠΫϩαʔϏε ϓϩάϥϛϯάͷख๏Ͱͳ͍11
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.ϚΠΫϩαʔϏε ઃܭɺ࣮ɺσϓϩΠɺӡ༻ͳͲ ଟذʹΘͨΔ֓೦Ͱ͋Δ12
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.ΦϥΠϦʔͷ ϚΠΫϩαʔϏε ΞʔΩςΫνϟ13
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.1ষ ϚΠΫϩαʔϏε2ষ ਐԽతΞʔΩςΫτ3ষ αʔϏεͷ ɹɹϞσϧԽํ๏4ষ ౷߹5ষ ϞϊϦεͷׂ6ষ σϓϩΠ147ষ ςετ8ষ ࢹ9ষ ηΩϡϦςΟ10ষ ίϯΣΠͷ๏ଇͱ ɹɹ γεςϜઃܭ11ষ େنͳ ɹɹ ϚΠΫϩαʔϏε12ষ ·ͱΊ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.1.1 ϚΠΫϩαʔϏεͱ1.1.1 খ͘͞ɺ͔ͭ1ͭͷׂʹઐ೦1.1.2 ࣗੑ1.2 ओͳར1.2.1 ٕज़ҟ࣭ੑ1.2.2 ճ෮ੑ1.2.3 εέʔϦϯά1.2.4 σϓϩΠͷ༰қੑ1.2.5 ৫໘ͷҰக1.2.6 ߹Մೳੑ1.2.7 ަՄೳʹ͢ΔͨΊͷ࠷దԽ15
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.ϚΠΫϩαʔϏε ৫จԽʹ·ͰࢸΔ֓೦16
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.1. ϚΠΫϩαʔϏεԽͷऔΓΈ2. ·ͣAPIԽ3. ϚΠΫϩαʔϏετϥΠΞϧୈҰ4. ϚΠΫϩαʔϏετϥΠΞϧୈೋ5. ϚΠΫϩαʔϏετϥΠΞϧୈࡾ6. ࠓޙɺऔΓΈ͍ͨ͜ͱ7. ຊʹϚΠΫϩαʔϏε࠷ద͔ʁ17Table of contents
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.18#1ϚΠΫϩαʔϏεԽ ͷऔΓΈ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.1. ϚΠΫϩαʔϏεԽͷऔΓΈରͷγεςϜECαΠτߪೖϖʔδόοΫΤϯυͷγεςϜߏJava SE 6JBoss AS 6Struts2Hibernate3MySQL 5.119
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.Start simple, not small20
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.ঃʑʹߏมߋ1. αʔόαΠυϨϯμϦϯάܥͷγεςϜ ɹɹˣ2. ߪೖαΠτΛHTML5 + WebAPIʹׂ ɹɹˣ3. όοΫΤϯυγεςϜΛϚΠΫϩαʔϏεԽ ɹɹˣ4. ཧը໘ΛϚΠΫϩαʔϏεԽ ɹɹˣ5. ߪೖαΠτΛϚΠΫϩαʔϏεԽ211. ϚΠΫϩαʔϏεԽͷऔΓΈ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.22#2·ͣAPIԽ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.2. ·ͣAPIԽͬͨ͜ͱ1. Struts2 + Hibernateͷ αʔόαΠυϨϯμϦϯάܥγεςϜΛɺ Angular1 + SpringMVCͰWeb APIԽ2. AWS্Ͱ։ൃ/ߏங3. యܕతͳτϥϯβΫγϣϯεΫϦϓτ• Controller• Service• Dao23
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.2. ·ͣAPIԽྑ͔ͬͨ͜ͱ1. ը໘ͱAPIͰɺશͳۀ͕Ͱ͖ͨ2. Ұ෦ͷ͍ॲཧʹɺը໘શମͷඳը͕ Ҿ͖ͣΒΕΔ͜ͱ͕ͳ͘ͳͬͨ3. ݕࡧAPIΛ࠶ར༻ͯ͠ɺ ผͷը໘Λ࡞͢Δ͜ͱ͕Ͱ͖ͨɻ24
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.2. ·ͣAPIԽࣦഊͨ͜͠ͱ1. APIΛը໘ʹಛԽ͗ͨ͢͠ʢ࠶ར༻ͮ͠Β͍ʣ• ใɺࡏݿɺྉۚΛɺ·ͱΊͯฦ͢API• ͨͿΜ͜ΕAPIԽ͋Δ͋Δͩͱࢥ͏2. ങ͍͔͝ΛηογϣϯʹೖΕͨ• εςΟοΩʔηογϣϯʹͤ͟ΔΛಘͣɺ ࠶σϓϩΠɺεέʔϧΞτɺεέʔϧΠϯ͕ ͮ͠Β͍ߏʹͳͬͯ͠·ͬͨɻ25
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.2. ·ͣAPIԽࠔͬͨ͜ͱ1. APIαʔόͷεέʔϧΞτ• APIαʔόΛ૿ͨ͢ͼʹɺ• Webαʔό (nginx) ͷઃఆΛ• ॻ͖͑ͳ͍͚ͯ͘ͳ͍ɻ ɹˠ WebαʔόlocalhostͷAPIαʔόͷΈʹ ɹɹసૹ͢ΔܗͰɺWeb + APIͷηοτͰ૿͢ɻ26
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.2. ·ͣAPIԽࠔͬͨ͜ͱ2. ٸʹʮॲཧΛඇಉظʹ͢Δʯͱ͍͏ཁ͕݅ු্• ඇಉظʹ͢ΔͨΊͷΞϨίϨ༻ҙͯ͠ͳ͍Αʁ ɹˠ γϦΞϥΠζͯ͠ϑΝΠϧʹॻ͖ग़ͯ͠ɺ ɹɹͦΕΛඇಉظଆͷॲཧͰఆظಡΈࠐΈ͢Δ ɹɹͱ͍͏ݪ࢝తͳํ๏Λར༻ɻ27
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.2. ·ͣAPIԽ࣍ʹ͚ͯ1. APIΛը໘ʹಛԽ͗ͨ͢͠• ϚΠΫϩαʔϏεͱ͍͏ݴ༿͕͋ΔΒ͍͠ɻಋೖ͍ͨ͠ɻ2. ങ͍͔͝ΛηογϣϯʹೖΕͨ• εςʔτϨεߏʹ͍ͨ͠3. APIαʔόͷεέʔϧΞτ• ϩʔυόϥϯγϯάͷपΓΛࣗಈԽ͍ͨ͠4. ٸʹʮॲཧΛඇಉظʹ͢Δʯͱ͍͏ཁ͕݅ු্• ඇಉظॲཧͷΈΛඪ४Խ͍ͨ͠28
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.29#3ϚΠΫϩαʔϏε τϥΠΞϧୈҰ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͬͨ͜ͱ1. όοΫΤϯυͷॲཧΛϚΠΫϩαʔϏεͰ࡞• ใαʔϏεɺࡏݿαʔϏεɺྉۚαʔϏεͳͲʹׂ2. ٕज़ελοΫ• Spring Bootʢ1.2ܥʣ• Spring Cloudʢޙड़ʣ30
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͬͨ͜ͱ1. όοΫΤϯυͷॲཧΛϚΠΫϩαʔϏεͰ࡞• ใαʔϏεɺࡏݿαʔϏεɺྉۚαʔϏεͳͲʹׂ2. ॲཧͷڞ௨Խ• ಉظ HTTPʢΓ͋Γʣ• ඇಉظ AMQPʢΓͳ͠ʣ• RabbitMQΛ࠾༻• ඇಉظ AMQPʢΓ or ίʔϧόοΫؔʣ• ඇಉظ HTTPʢΓ or ίʔϧόοΫؔʣ• ͜ΕΒར༻͠ͳ͍31
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͨ͜͠ͱ1. ಉظॲཧɺඇಉظॲཧͱʹɺ ґଘΛ໌֬Խ͢Δ32ItemAccessor (Client)ItemController (Server)HTTP AMQP
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͨ͜͠ͱ1. ಉظॲཧɺඇಉظॲཧͱʹɺ ґଘΛ໌֬Խ͢Δ33ItemService (interface)ItemAccessor (Client)ItemController (Server)HTTP AMQPimplementsimplements
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͨ͜͠ͱ1. ಉظॲཧɺඇಉظॲཧͱʹɺ ґଘΛ໌֬Խ͢Δ• ΫϥΠΞϯτଆɺαʔόଆͷίϯτϩʔϥ͕ ಉ͡ΠϯλϑΣʔεΛ࣮͢Δ͜ͱͰɺ IDEͷOpen Call HierarchyʹΑΔ ݺͼग़͠ͷτϨʔε͕Ͱ͖Δ34
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͨ͜͠ͱ2. αʔϏεσΟεΧόϦʢEurekaʣͷಋೖ• Netflix͕ࣾOSSͰఏڙ͍ͯ͠Δ αʔϏεσΟεΧόϦͷΈ• ಈతʹ͑ΔDNSతͳͷ35
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͨ͜͠ͱ2. αʔϏεσΟεΧόϦʢEurekaʣͷಋೖ36Eureka ServerItemAccessor (Client)ItemController (Server)ᶃىಈ࣌ʹࣗͷ ɹϗετ໊ͱ ɹϙʔτ൪߸Λొ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͨ͜͠ͱ2. αʔϏεσΟεΧόϦʢEurekaʣͷಋೖ37Eureka ServerItemAccessor (Client)ItemController (Server)ᶄhttp://item-service/ ɹΛ͍ձΘͤ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͨ͜͠ͱ2. αʔϏεσΟεΧόϦʢEurekaʣͷಋೖ38Eureka ServerItemAccessor (Client)ItemController (Server)ᶅItemServiceͷ ɹϗετ໊ͱ ɹϙʔτ൪߸Λ ɹฦ͢ʢෳՄʣ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͨ͜͠ͱ2. αʔϏεσΟεΧόϦʢEurekaʣͷಋೖ39Eureka ServerItemAccessor (Client)ItemController (Server)ᶆड͚औͬͨใͰ ɹΞΫηε
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͨ͜͠ͱ2. αʔϏεσΟεΧόϦʢEurekaʣͷಋೖ• αʔϏεΛʮԿʯʮͲͷαʔόͰʯ ʮͲͷϙʔτͰʯىಈͯ͠ྑ͍ ɹˠ εέʔϧͷࣗ༝Խ• Spring Boot + Spring CloudΛ͏͜ͱͰ ߦͷઃఆ͚ͩͰར༻Մʢʂʣ40
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͨ͜͠ͱ3. JUnitͷൣғΛ໌֬Խ• ControllerҎ߱ͷςετʢJUnitʣ• αʔϏεͷػೳ୯ମςετ• αʔϏε୯ମͰͷend-to-endͷςετʢJUnit)• Spring BootͳΒJUnitͰ؆୯ʹͰ͖Δ• ओʹมͱόϦσʔγϣϯͷࢼݧ• ֎෦αʔϏεݺͼग़͠෦ϞοΫԽ41
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͨ͜͠ͱ3. JUnitͷൣғΛ໌֬Խ• ෳαʔϏεͷςετʢJUnitʣ• ֎෦αʔϏεݺͼग़͢42
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰ43ItemService (interface)ItemAccessor (Client)ItemController (Server)HTTP AMQPimplementsimplementsLogicΫϥε
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰ44TestCaseItemController (Server)LogicΫϥεᶃΠϯελϯε ɹ࡞ᶄItemServiceͷϞοΫͱͯ͠DI
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰ45TestCaseItemController (Server)LogicΫϥε ᶅݺͼग़͢
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰͨ͜͠ͱ4. σϓϩΠͷࣗಈԽ• ܰ͘࡞͚ͬͨͩͰɺेͷαʔϏε͕͋ΔͷͰ σϓϩΠͷࣗಈԽඞਢ• ansibleΛར༻ʢchef࠳ંɾɾɾʣ• AWSͰ͍ͬͯΔҎ্docker ͦΜͳʹϝϦοτ͕ͳ͍ͱࢥ͍ͬͯΔ46
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰྑ͔ͬͨ͜ͱ1. ࣗ༝ͳεέʔϧΠϯɺεέʔϧΞτ͕Ͱ͖ɺ ϩʔυόϥϯγϯά·ͰͰ͖ΔΑ͏ʹͳͬͨɻ2. αʔϏεͷϗετ໊ϙʔτ൪߸Λ શ͘ཧ͠ͳͯ͘ྑ͘ͳͬͨ3. ಉظɺඇಉظͷ։ൃͱςετͷ ඪ४తͳΓํ͕ܾ·ͬͨ47
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰࣦഊͨ͜͠ͱ48
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰࣦഊͨ͜͠ͱಛʹͳ͠ → શʹϚΠΫϩαʔϏεΛϚελʔͨ͠ײ☺️49
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.3. ϚΠΫϩαʔϏετϥΠΞϧୈҰࣦഊͨ͜͠ͱಛʹͳ͠ → શʹϚΠΫϩαʔϏεΛϚελʔͨ͠ײ☺️ ɾɾɾͱࢥͬͨΒɺ࣍ͷ։ൃͷ࣌ʹ ࠓճ࡞ͬͨϚΠΫϩαʔϏε͕ Ζ͘ʹ࠶ར༻Ͱ͖ͳ͔ͬͨ50
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.51#4ϚΠΫϩαʔϏε τϥΠΞϧୈೋ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.4. ϚΠΫϩαʔϏετϥΠΞϧୈೋͬͨ͜ͱ1. ཧը໘ͷϚΠΫϩαʔϏεԽ• ใαʔϏεɺࡏݿαʔϏεɺ ྉۚαʔϏεͳͲΛ࠶։ൃ2. ٕज़ελοΫ• Spring Bootʢ1.3ܥʣ• Spring Cloud52
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.4. ϚΠΫϩαʔϏετϥΠΞϧୈೋࠔͬͨ͜ͱ1. ୈҰͰ͍ٕͬͯͨज़ελοΫͱͷޓੑ• ୈҰ : Spring Boot 1.2 + Spring Cloud Angel• ୈೋ : Spring Boot 1.3 + Spring Cloud Brixton ɹˠ AngelͷEurekaʹ ɹɹBrixtonͷαʔϏεΛొͰ͖ͳ͍ ɹˠ BrixtonͷEurekaʹ ɹɹAngelͷαʔϏεొͰ͖ͨ53
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.4. ϚΠΫϩαʔϏετϥΠΞϧୈೋࠔͬͨ͜ͱ1. ୈҰͰ͍ٕͬͯͨज़ελοΫͱͷޓੑ• pom.xmlͷੈ͚• pom.xmlʢʣ• pom_sb12.xml• pom_sb13.xml– ϙϦάϩοτͷߟ͑ํແࢹ54
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.4. ϚΠΫϩαʔϏετϥΠΞϧୈೋͨ͜͠ͱ1. ϞχλϦϯάͱΞϥʔτ• αʔόͷϓϩηε͕૿͑ΔͷͰ ࢹ͕ෆՄܽ• ͬͯͳ͔ͬͨΒຊ൪ڥͰো͕ɾɾɾ55
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.4. ϚΠΫϩαʔϏετϥΠΞϧୈೋͨ͜͠ͱ1. ϞχλϦϯάͱΞϥʔτ• CloudWatch + ΧελϜϝτϦΫεͰऩू• ϦιʔεใʢCPUɺϝϞϦɺσΟεΫʣ• ϓϩηεใʢࢮ׆ʣ• ϩάCloudWatch LogsͱElasticsearchʹू• ϩάࢹCloudWatchͰ࣮ࢪ• ϩάੳΛElasticsearchͰ࣮ࢪ56
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.57#5ϚΠΫϩαʔϏε τϥΠΞϧୈࡾ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.5. ϚΠΫϩαʔϏετϥΠΞϧୈࡾͬͨ͜ͱ1. ߪೖը໘ͷϚΠΫϩαʔϏεԽ• ใαʔϏεɺࡏݿαʔϏεɺ ྉۚαʔϏεͳͲΛՃ։ൃ2. ٕज़ελοΫ• Spring Bootʢ1.3ܥʣ• Spring CloudʢBrixtonܥʣ• Spring Session + Hazelcastʢηογϣϯڞ༗ʣ58
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.5. ϚΠΫϩαʔϏετϥΠΞϧୈࡾࠔͬͨ͜ͱ1. վΊͯɺը໘ʹAPI͕Ҿ͖ͮΒΕΔ• ϚΠΫϩαʔϏε : ϦετAPI• ཉ͍͠αʔϏε : ൢചՄೳͳϦετAPI• αʔϏε = Repository?• ͜ͷลΓͰυϝΠϯׂͷॏཁੑʹؾͮ͘59
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.5. ϚΠΫϩαʔϏετϥΠΞϧୈࡾࠔͬͨ͜ͱ1. վΊͯɺը໘ʹAPI͕Ҿ͖ͮΒΕΔ• ϑϩϯταʔϏεʢίϯτϩʔϥαʔϏεʣͱ υϝΠϯαʔϏεͷ• ϑϩϯταʔϏε͕ɺඞཁʹԠͯ͡ɺ υϝΠϯαʔϏεΛݺͼग़͢60
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.5. ϚΠΫϩαʔϏετϥΠΞϧୈࡾࠔͬͨ͜ͱ1. վΊͯɺը໘ʹAPI͕Ҿ͖ͮΒΕΔ• υϝΠϯαʔϏεͷAPIɺݪଇͱͯ͠ɺ ʮཧը໘Ͱ͑Δʯ͙Β͍ͷ࠶ར༻ੑΛ࣋ͭ61
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.5. ϚΠΫϩαʔϏετϥΠΞϧୈࡾࠔͬͨ͜ͱ2. طଘॲཧʹ͋ΔڊେͳSQLׂ͕Ͱ͖ͳ͍• ɺࡏݿɺྉۚͷςʔϒϧͱɺ ͦΕͧͷؔ࿈ςʔϒϧΛ͕ͬͭΓjoinͨ͠SQL62
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.5. ϚΠΫϩαʔϏετϥΠΞϧୈࡾࠔͬͨ͜ͱ2. طଘॲཧʹ͋ΔڊେͳSQLׂ͕Ͱ͖ͳ͍• গͳ͘ͱɺɺࡏݿɺྉۚͷɺ υϝΠϯ͙Β͍ʹ͢Δ͕ɺ ؔ࿈ςʔϒϧͷΓ֎͍ͬͨ͠ΜఘΊͨ ɹˠ ͜ͷลΓղܾࡦ͕ݟ͍͑ͯͳ͍63
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.64#6ࠓޙ औΓΈ͍ͨ͜ͱ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.6. ࠓޙऔΓΈ͍ͨ͜ͱোୈҰઃܭ1. ো͕ى͖ΔલఏͰॲཧΛೖΕΔ• Circuit Breakerͱ͍͏֓೦• ୯Ґ࣌ؒ͋ͨΓͷΤϥʔճ͕ᮢΛ͑ͨΒ ৗʹସॲཧΛߦ͏ʢҰఆ࣌ؒͰ෮ؼʣ• NetflixͷHystrixͰ༰қʹ࣮ݱͰ͖Δ2. ͱݴ͑ɺো͕ى͖ͨΒͲ͏͢Δͷʁ• ௨͢Δ• ௨৴ΤϥʔΛฦ͢• ઐ༻ΤϥʔΛฦ͢• ΩϟογϡΛฦ͢65
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.6. ࠓޙऔΓΈ͍ͨ͜ͱΩϟογϡ1. υϝΠϯ͝ͱʹαʔϏεΛ͚Ε υϝΠϯͷಛੑ͝ͱͷΩϟογϡΛ࡞Ͱ͖Δ• ใྉۚසൟʹมΘΒͳ͍͔Β Ωϟογϡ͕ޮ͘• ࡏݿมಈ͢Δ͔ΒΩϟογϡ͕ޮ͔ͳ͍͠ τϥϯβΫγϣϯݫີʹ͠ͳ͍͚ͯ͘ͳ͍66
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.6. ࠓޙऔΓΈ͍ͨ͜ͱϙϦάϩοτ1. GoͷΑ͏ͳϝϞϦϑοτϓϦϯτͷখ͞ͳݴޠΛ͍͍ͨ2. ෳݴޠͰهࡌ͢Δͱ͖ͷোนϛυϧΣΞ• EurekaΛଞͷݴޠͰ͍͍ͨ3. ੜ࢈ੑͷӨڹ• Spring Boot + Spring Cloud΄Ͳͷ ੜ࢈ੑΛग़ͤΔΈ߹Θͤগͳ͍• IDEͷOpen Call HierarchyͰ͍ͬͯͨࣄ͕ Ͱ͖ͳ͘ͳΔ67
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.6. ࠓޙऔΓΈ͍ͨ͜ͱΠϕϯτυϦϒϯ1. ϦΫΤετΛΠϕϯτͱଊ͑ͯॲཧ͢Δ2. ঢ়ଶભҠΛΠϕϯτͱଊ͑ͯॲཧ͢Δ3. όονͳ͠ɺͯ͢ϦΞϧλΠϜͰॲཧ͢Δ68
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.69#7ຊʹ ϚΠΫϩαʔϏε ࠷ద͔ʁ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.7. ຊʹϚΠΫϩαʔϏε࠷ద͔ʁຊͱԤถͷจԽͷҧ͍1. νʔϜϫʔΫͷҧ͍• ถ : APIΛܖʹ͢ΔɻAPI͕Ͱ͖ͨΒؼɻ• : ΈΜͳͰ্ख͘ߦ͘Α͏ʹؤுΔɻ ɹɹશମͷͨΊʹAPIΛม͑Δ͜ͱΛ ɹɹ͋·ΓԀΘͳ͍ɻ70
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.7. ຊʹϚΠΫϩαʔϏε࠷ద͔ʁຊͱԤถͷจԽͷҧ͍2. DBΞΫηεͷҧ͍• ถ : JPAɺHibernateɺඞવతʹjoinগͳ͍• : MyBatisɺDomaɺʢS2Daoʣ ɹɹେͳSQL͕͋ͬͯjoinଟ͍ → ͜ͷ͍ͤͰطଘͷϞϊϦε͔Β ɹɹϚΠΫϩαʔϏεͷҠߦ͕͘͠ͳΔɻ71
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.7. ຊʹϚΠΫϩαʔϏε࠷ద͔ʁຊͱԤถͷจԽͷҧ͍3. ϚΠΫϩαʔϏεʮ݁Ռʯ• ࣗͷձࣾɺάϧʔϓɺϓϩδΣΫτʹͱͬͯ దͳΞʔΩςΫνϟʹͳΔΑ͏ ࠷దԽ͢Δඞཁ͕͋Δɻ ڭՊॻͷ·ͶΛͯ͠μϝ72
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.73·ͱΊ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.Copyright © Acroquest Technology Co., Ltd. All rights reserved.·ͱΊϚΠΫϩαʔϏε݁ՌಉظɺඇಉظɺςετΛؚΊٕͨज़ղΛ໌֬Խ͢ΔSpring Boot + RabbitMQͰ͍·ͷͱ͜Ζͳ͠ඞਢٕज़ΛѲ͢ΔαʔϏεσΟεΧόϦʢEurekaʣεέʔϧΠϯɺΞτɺLBɺσϓϩΠσϓϩΠͷࣗಈԽʢChef / AnsibleʣϞχλϦϯάʢCloudWatch / ElasticsearchʣׂཻͰΜͩΒʮཧը໘Λ࡞ΕΔAPIʯ͕Ұͭͷ҆ࣗͨͪͷ৫ʹ߹Θͤͨ࠷దԽ͕ඞਢ74
Copyright © Acroquest Technology Co., Ltd. All rights reserved.75Enjoy your own microservicesarchitecture!