Share
Embed
Webサービスにおけるインフラアーキテクチャの体系化と選択自動化の研究/study on web system architecture #1
第一回WSA研の発表資料
masayoshi
December 27, 2017
Transcript
35 slides
-
ݚڀςʔϚ ~ΠϯϑϥΞʔΩςΫνϟͷମܥԽ~ ྨЋ ΞʔΩςΫνϟ" ཁૉ ཁૉ ཁૉ ཁૉ ཁૉ ཁૉ
ΞʔΩςΫνϟ# ཁૉ ཁૉ ཁૉ ཁૉ ཁૉ ཁૉ ྨЌ ΞʔΩςΫνϟ$ ཁૉ ཁૉ ཁૉ ཁૉ ཁૉ ཁૉ ΞʔΩςΫνϟ% ཁૉ ཁૉ ཁૉ ཁૉ ཁૉ ཁૉ -
ݚڀςʔϚ ~ΠϯϑϥΞʔΩςΫνϟͷબࣗಈԽ~ Πϯϑϥ ΞʔΩςΫνϟ" Πϯϑϥ ΞʔΩςΫνϟ# Πϯϑϥ ΞʔΩςΫνϟ$ Πϯϑϥ ΞʔΩςΫνϟ
ܾఆ܅ 8FCαʔϏε Πϯϑϥ ΞʔΩςΫνϟ% -
ݚڀഎܠ ~WebαʔϏεͷߴԽ~ 8FCαʔϏε Λࢧ͑ΔͨΊͷ ߴͳΠϯϑϥཁٻ ࣮ݱ͢ΔͨΊͷ ϛυϧΣΞɺ γεςϜͷ։ൃ 044αʔϏε ͱͯ͠ެ։
͑͘ΔΑ͏ʹ Πϯϑϥ͕ڧ͘ͳΓ ΑΓߴͳ8FCαʔϏε͕ ߏஙՄೳʹ -
ݚڀഎܠ ~Πϯϑϥߏͷબࢶͷ૿Ճ~ • աڈ(2000ॳ಄) • σʔληϯλͰ • ཧαʔόΛͬͯ • Web,
App, DBߏΛLAMPͰ࡞Δ • ࠓ • σʔληϯλ or Ϋϥυ Ͱ • ཧαʔό or Ծαʔό or ίϯςφ or X as a Service ্Ͱ • Web, App, DB, Batch, CacheߏΛ, ༷ʑͳϛυϧΣΞͱαʔϏεͱ࿈ܞ͠࡞Δ -
ݚڀഎܠ ~ΠϯϑϥΞʔΩςΫνϟͷύλʔϯԽ~ • աڈ • ઃܭͷબࢶ͕গͳ͍ • ࣮ݱ͢ΔͨΊͷϛυϧΣΞ͕ͳ͍ͨΊ࣮͕ඞཁ • ߏஙʹ͕͔͔࣌ؒΔ
• ࠓ • ઃܭͷબࢶඇৗʹଟ͘ɺۛຯ͕ඞཁ • ػೳΛ࣮ݱͰ͖ΔϛυϧΣΞɺαʔϏε͕ଟଘࡏ • ΑΓগͳ͍࣌ؒͰߏங͕Մೳʹͳͬͨ ߏங࣌ؒ͘ɺઃܭʹ͔͚Δ(ΒΕΔ)͕࣌ؒ૿େ -
ݚڀഎܠ ~Πϯϑϥઃܭͷ҉~ • Πϯϑϥઃܭઃܭऀͷ҉ʹΑΔͱ͜Ζ͕େ͖͍ • ߏங͍ͨ͠αʔϏε͔ΒΠϯϑϥཁ݅ͷѲ • ྨࣅͨ͠αʔϏεͷߏஙܦݧɺࣄྫΛݟͨ͜ͱ͕͋Δ • Πϯϑϥཁ݅Λຬͨͨ͢Ίͷ࣮ɺαʔϏεͷѲ
• ͦΕhogehogeͱ͍͏ϛυϧΣΞͰग़དྷΔ • ͋ͷαʔϏεΞϨ͕͋Δ • ϝϦοτɺσϝϦοτͷஅ(ಛʹӡ༻ίετͳͲ) • hogehogeػೳ͕ศར͚ͩͲɺӡ༻͕େม • ͋ͷαʔϏε͕͔͔ۚΔ͚Ͳɺӡ༻ָ͕ -
ݚڀഎܠ ~Πϯϑϥઃܭͷ҉~ ϒϩάαʔϏεΛ࡞Δ ϒϩάαʔϏεϢʔβͰ͋Δਓ͕ؒॻ͖ࠐΉͷͰDBͷॻ͖ ࠐΈΑΓɺಡΈࠐΈͷํ͕ଟ͍ɻ͋ΔಛఆͷΤϯτϦ͕όζͬͯ τϥϑΟοΫ͕όʔετ͢ΔՄೳੑ͕͋Δɻจࣈ͕த৺ͳͷͰɺ ಈըը૾͕ͳ͚ΕτϥϑΟοΫྔগͳ͍ɻίϯςϯπϦ ϦʔεޙʹϢʔβ͕ߘ͠૿͍͑ͯ͘ͷͰɺσʔλྔͱτϥϑΟο Ϋྔঃʑʹ૿͍͑ͯ͘ɻҎ্ͷ͜ͱΛ౿·͑ΔͱɺΩϟογϡ ઓུ͕༗ޮͦ͏ͩɻॻ͖ࠐΈ͕ൺֱతগͳ͍ͷͰΩϟογϡͷѻ
ָ͍͕ͦ͏ͩ͠ɺΤϯτϦ͕όζͬͨͱ͖ΩϟογϡͰฦ͢͜ ͱ͕ग़དྷΔɻಛʹը૾ͱಈըτϥϑΟοΫ͕ؾʹͳΔͷͰɺ CDN͔Βฦ͢ɻϦϦʔεॳظෛՙ͕গͳͦ͏ͳͷͰɺӡ༻ɺඅ ༻Λߟ͑ɺεϞʔϧͳߏɺ͔Βʹ߹Θͤͯ૿͢ɻ -
ݚڀഎܠ ~Πϯϑϥઃܭͷ҉~ ͋ΔηϯαʔใΛूͯ͠ՄࢹԽ͢ΔαʔϏε ηϯαʔϊʔυͷૹ৴σʔλΛอଘ͢ΔͨΊɺDBͷॻ͖ࠐΈ ͕ଟ͍ɻσʔλͷॻ͖ࠐΈͷྔɺτϥϑΟοΫྔηϯαʔϊʔ υ͔Β༧ଌ͕ग़དྷΔɻσʔλྔͲΜͲΜ૿Ճ͢Δɻσʔλ ߏԽ͠қ͍ɻఆظతʹσʔλΛूܭ͢Δඞཁ͕͋ΔɻҎ্ͷ͜ ͱΛ౿·͑ΔͱɺDBͷબॏཁͰ͋ΔɻηϯαʔσʔλΛѻ ͍͍࣌͢ܥྻσʔλϕʔεΛબ͠ूܭΛ༰қʹ͢Δɻ༰ྔͷ ૿Ճͱॻ͖ࠐΈͷεϧʔϓοτΛ্͍͛͢ࢄετϨʔδ্ʹ
ߏங͢Δͷ͕ྑͦ͞͏Ͱ͋Δ͕ɺࢄετϨʔδӡ༻͕େมͱ Α͘ฉ͘ɻඅ༻͕ڐ͢ͳΒϚωʔδυDBαʔϏεΛϕʔεʹ Ή͜ͱͰɺӡ༻ίετΛԼ͛ɺεέʔϧ͠ɺ༰ྔ͕૿͑ΔΑ͏ʹ ͍ͨ͠ɻඅ༻ݟੵΓσʔλྔ͕༧ଌՄೳͳͨΊՄೳɻ -
ΤϯδχΞͱͯ͠ͷࢥ͍ • ӡ༻,ߏஙࣗಈԽαʔϏε,ϛυϧΣΞͷॆ࣮Ͱָʹ • ͚ͩͲઃܭָʹͳͬͨͩΖ͏͔ • ઃܭͷࣗಈԽ? (͍ͬ͢͝େมͦ͏ʂʂʂ) • ԶୡܦݧΓ߹͍ΤϯδχΞͷΛͱʹงғؾͰઃܭ͠
͍ͯΔʂ • ٯʹબࢶ૿͑ͯେมʹͳ͍ͬͯΔ?(બΛશͯࢼ͢ͷେม) • (͍ΘΏΔ)ΠϯϑϥΤϯδχΞΞʔΩςΫτ • ຊ࣭ੲ͔ΒมΘ͍ͬͯͳ͍ͷͰͳ͍͔ (2ΤϯδχΞ͍ͯ͠ͳ͍ͷͰਪଌ) -
ΠϯϑϥΞʔΩςΫνϟબࣗಈԽ (࠶ܝ) Πϯϑϥ ΞʔΩςΫνϟ" Πϯϑϥ ΞʔΩςΫνϟ# Πϯϑϥ ΞʔΩςΫνϟ$ Πϯϑϥ ΞʔΩςΫνϟ
ܾఆ܅ 8FCαʔϏε Πϯϑϥ ΞʔΩςΫνϟ% -
αʔϏεͱΠϯϑϥͷϞσϧԽͱཁૉͷඥ͚ • αʔϏεɺΠϯϑϥڞʹϞσϧԽ͕ඞཁ • ཁૉΛઃఆ͠ɺͦΕʹԠͯ͡ಛੑ͕͋Γɺ͍ۙͷΛબ 8FCαʔϏε ཁૉ ཁૉ ཁૉ ཁૉ
ΞʔΩςΫνϟ" ཁૉ ཁૉ ཁૉ ཁૉ ΞʔΩςΫνϟ# ཁૉ ཁ ૉ ཁૉ ཁૉ -
ཁૉͱಛੑ • ཁૉ • αʔϏεΠϯϑϥͷߏཁૉͷ͜ͱ • ྫ͑ɺσΟεΫॻ͖ࠐΈɺநతͳͷͩͱอक ͷ͠͞(ఆྔԽ͕ඞཁ)ͳͲ • ಛੑ
• ཁૉʹରͯ͠ॏΈ͚Λͯ͠ಘΒΕΔͷ • nݸཁૉͷn࣍ϕΫτϧʹॏΈΛ͚ͭͯಘΒΕͨϕΫτϧ -
MicroserviceͱServerless • બΜͩཧ༝୯७ʹ࠷ۙྲྀߦ͍ͬͯΔͷͰྫͱͨ͠ • ࠓͷൃදͰͱ্͕ͯ͠ΔͩΖ͏ͱࢥͬͨ • ʮϚΠΫϩαʔϏεΞʔΩςΫνϟͷͨΊͷṷత࣮ ߦج൫ߏʯ • ʮαʔϏεͷύϑΥʔϚϯεͱґଘؔΛ༻͍
ͨαʔϏεಉ࢜ͷڠௐεέʔϧߏʯ • ʮ࣮ߦڥͷมԽʹૉૣ͘దԠͰ͖Δ߃ৗੑΛ࣋ ͭγεςϜΞʔΩςΫνϟʯ -
Microservice • ϞϊϦγοΫͰͳ͘ɺෳͷαʔϏεʹ͚ͯͦΕΒΛڠௐͤ͞ɺ ҰͭͷαʔϏεΛߏ͢Δ • ಛʹɺෳࡶͰߴͳWebαʔϏεͰ༗ޮͱ͞ΕΔ • ػೳΛہॴԽ͠։ൃϦϦʔεΛ༰қʹ͢Δ • ӡ༻༰қʹͳΔ෦͋ΕෳࡶԽ͢Δͱ͜Ζ͋Δ
• ྫ͑αʔϏε૿ՃʹΑΔαʔόӡ༻ίετͷ૿Ճ • γϯϓϧͳαʔϏεʹద༻͢ΔʹɺෳࡶͳΞʔΩςΫνϟ • ແବʹෳࡶͳߏɺΦʔόʔεϖοΫͱͳΔՄೳੑ • Developers must deal with the additional complexity of creating a distributed system. (http://microservices.io/patterns/microservices.htmlΑΓ ) • ؔ࿈ൃදʮαʔϏεͷύϑΥʔϚϯεͱґଘؔΛ༻͍ͨαʔϏεಉ࢜ͷڠௐεέʔϧߏʯ • ؔ࿈ൃදʮϚΠΫϩαʔϏεΞʔΩςΫνϟͷͨΊͷṷత࣮ߦج൫ߏʯ • ؔ࿈ൃදʮ࠶ར༻ੑͷߴ͍ Test Drive Intrastructure ࣮ߦڥʹؔ͢ΔऔΓΈʯ -
Serverless • AWS lambda ʹද͞ΕΔFaaS (Function as a Service)Λར༻͠ɺ αʔόΛҙࣝͤͣΞϓϦέʔγϣϯΛ࣮ߦ
• αʔόӡ༻ίετ͕Լ͛ΒΕΔɺεέʔϧ͠қ͍ͳͲͷϝϦοτ • Microserviceͷӡ༻ίετͷͷղܾํ๏ͷҰͭ • Microservice Architectureͱڞʹ༻͍ΒΕΔ • ੍͕ଟ͍σϝϦοτ • ࣮ߦڥͳͲʹڧ੍͍͕ଘࡏ͢Δ • Significant limitation and constraints - A serverless deployment environment typically has far more constraints that a VM-based or Container-based infrastructure. (http://microservices.io/patterns/deployment/serverless- deployment.htmlΑΓ) • ؔ࿈ൃදʮ࣮ߦڥͷมԽʹૉૣ͘దԠͰ͖Δ߃ৗੑΛ࣋ͭγεςϜΞʔΩςΫνϟʯ -
MicroserviceͱServerless • Microservice͔ͭServerlessͰ͋ΔΠϯϑϥߏՄೳ • ͦΕͧΕͷΞʔΩςΫνϟഉଞతͰͳ͍ɽ • ୯७ʹMicroserviceͱServerlessΛൺΔͳͲग़དྷͳ͍ • ServerlessͷΑ͏ʹ੍͕͋ΔΞʔΩςΫνϟ͕͋Δɽ •
ServerlessϞϊϦγοΫͳαʔϏεߏͩͱ࠾༻͍͠ • ServerlessͷલʹMicroService͕͋Δͱ͍ͬͨґଘؔ ɼ֊ߏ͕ଘࡏ͢Δɽ -
ྨͱཁૉ • microservices.ioͰҎԼͷΑ͏ʹ͚ΒΕ͍ͯΔ • Core Patterns (Monolithic, Microservice) • Deployment
patterns (Serverless deployment, etc…) • Web3ߏͱMicroserviceൺΒΕΔ͔ • ػೳຖʹߟ͑ΒΕͨΞʔΩςΫνϟൺΒΕΔ͔ • http://microservices.io/patterns/index.htmlΑΓ • ؔ࿈ൃදʮϚΠΫϩαʔϏεΞʔΩςΫνϟͷͨΊͷṷత࣮ߦج൫ߏʯ • ؔ࿈ൃදʮTimeFuzeΞʔΩςΫνϟߏ - ॲཧͱσʔλͱλΠϚʔΛҰମԽͨ͠ఆظσʔλύΠϓϥΠϯʯ -
ྨͱཁૉ • ΞʔΩςΫνϟͷϝϦοτɺσϝϦοτ • ΞʔΩςΫνϟͷ࣮͕༩͑Δཁૉ • ಉ͡ΞʔΩςΫνϟΛ࠾༻࣮ͯ͠ʹΑͬͯཁૉͷ ॏΈ͕มΘΔՄೳੑ͕͋Γͦ͏? • ࣮ͷΞʔΩςΫνϟߟྀ͢Δ͔?
• ͋Δಛఆͷ༻్ʹযΛ࣮͕ͯͨ͋Δ߹ߟྀ͕ ͋Δͱྑͦ͞͏? • ؔ࿈ൃදʮࢄΞϓϦέʔγϣϯʹ͓͚Δෳར༻Λߟྀͨ͠ϓϥΠϕʔτσʔλͷཧʯ • ؔ࿈ൃදʮߴͳϩάݕࡧΤϯδϯHayabusaʹ͍ͭͯʯ -
ௐࠪํ๏ • ؔ࿈ݚڀͷௐࠪ • จௐࠪ • microservice.ioͳͲͷWebαΠτ • ࣄྫͷݕূ •
ٕज़ษڧձͷൃදࢿྉ • ΤϯδχΞಉ࢜ͷަྲྀ • ݚڀऀͱͷަྲྀ • WebSystemArchitectureݚڀձΛ׆༻ -
·ͱΊ • WebαʔϏεʹ͓͚ΔΠϯϑϥΞʔΩςΫνϟͷମܥԽͱ ΠϯϑϥΞʔΩςΫνϟͷબࣗಈԽΛࢦ͢ • WebαʔϏεͱɺΠϯϑϥΞʔΩςΫνϟͷϞσϧԽ͕ඞ ཁ • ·ͣطଘΠϯϑϥΞʔΩςΫνϟͷௐࠪͱྨ͕ඞཁ •
จͷௐࠪͪΖΜͷ͜ͱɺٕज़ษڧձͷൃදࢿྉʹ͋ ΔࣄྫͷൺֱɺWSAݚͰఏҊ͞Εͨ৽ͨͳΞʔΩςΫ νϟͷٞΛߦ͍ɺΠϯϑϥΞʔΩςΫνϟͷྨΛݕ౼ ͢Δ