第5回WebSysmetArchitecture(WSA)研究会 https://websystemarchitecture.hatenablog.jp/entry/2019/07/30/172650
͘͞ΒΠϯλʔωοτגࣜձࣾ(C) Copyright 1996-2019 SAKURA internet Inc͘͞ΒΠϯλʔωοτݚڀॴWebγεςϜΞʔΩςΫνϟͷਤΛඳ͘ߏ2019/09/28 ݚڀһ ௶ ༎थid:y_uuki / @yuuk1tୈ5ճWebSystemArchitectureݚڀձ
View Slide
WSAݚڀձͷతͷ1ͭʹΞϓϩʔν͢Δhttps://websystemarchitecture.hatenablog.jp/purposeWebαʔϏεʹඞཁͱͳΔใ௨৴ج൫γεςϜͷମܥԽWebαʔϏεʹඞཁͱͳΔใ௨৴ج൫γεςϜʹ͍ͭͯɼݚڀऀɼٕज़ऀɼֶੜΛΘͣɼ͘ݟަΛߦ͍ɼਂٞ͘͢Δ͜ͱͰମܥԽΛࢦ͢ɽ ·ͨɼମܥԽΛ௨ͯ࣍͡ੈͷWebαʔϏεج൫ͷ͋Γํʹ͍ͭͯͷఏݴΛߦ͏ɽ
31. ͡Ίʹ2. ؔ࿈ମܥ3. ఏҊମܥ4. ·ͱΊ࣍
1.͡Ίʹ
5ɾWebαʔϏεͷγεςϜʹର͢ΔཁٻɼεέʔϥϏϦςΟɼߴՄ༻ੑɼߴͳԠੑೳɼظؒͷӡ༻ͳͲଟذʹΘͨΔɾଟ༷ͳཁٻʹରͯ͠ଟ༷ͳࣝͱٕज़͕ඞཁͱͳΔɾOSσʔλϕʔεɼωοτϫʔΫͳͲͷൣғͷجૅࣝɾϛυϧΣΞࣗಈԽπʔϧΛར༻͢ΔͨΊͷԠ༻ࣝɾࣝΛΈ߹Θͤ1ͭͷγεςϜΛߏங͠ɼӡ༻͢ΔͨΊͷٕज़എܠ
61. ैདྷͷใֶͷڭՊॻɼ౷తʹྨ͞Εͨʹ͓͚ΔجૅࣝͷΈɾجૅࣝΛͲͷΑ͏ʹWebαʔϏε։ൃʹద༻͢Δͷ͔Θ͔Βͳ͍2. WebαʔϏε։ൃͱӡ༻ͷݱͰɼະܦݧͰཧղͰ͖ΔΑ͏ͳܗͰݱͷܦݧ͕ݴޠԽ͞Ε͍ͯͳ͍ҙࣝใֶͷجૅࣝͱɼWebγεςϜͷԠ༻ࣝΛΈ߹Θͤͨɼੜ͖ͨࣝͷਤΛͭ͘Δ͜ͱ͕ॏཁ
7ྨࣅͷҙࣝʹର͢ΔΞϓϩʔνίʔυͱͯ͠ΠϯϑϥετϥΫνϟΛཧ͢Δͱ͍͏ߟ͑ํɺैདྷͷΠϯϑϥετϥΫνϟཧͱେ͖͘ҟͳΔɻࢲɺ͜ͷసΛͲͷΑ͏ʹਐΊͨΒΑ͍͔͕Θ͔Βͣۤ࿑͍ͯ͠ΔνʔϜΛͨ͘͞Μݟ͖ͯͨɻ͔͠͠ɺ͜ΕΒͷπʔϧΛޮՌతʹ͏ͨΊͷΞΠσΞɺύλʔϯɺϓϥΫςΟεɺΧϯϑΝϨϯεͷߨԋɺϒϩάϙετɺݸผͷจʹࢄΒ͍ͬͯΔɻ
8طଘͷମܥͱͦͷ՝1. Ͳͷମܥ͕WebγεςϜΞʔΩςΫνϟʹඞཁ͔͕ࣗ໌Ͱͳ͍2. طଘͷମܥಉ࢜ͷؔ࿈ੑ͕ࣗ໌Ͱͳ͍ɾجૅࣝͱԠ༻ࣝΛ͋Θͤͨମܥ͍͔ͭ͘ଘࡏ͢ΔɾWebγεςϜΞʔΩςΫνϟʹඞཁͳٕज़ཁૉΛཏ͢ΔͨΊʹɼෳͷମܥΛΈ߹ΘͤΔඞཁ͕͋Δ
9ݚڀతɾWebγεςϜΞʔΩςΫνϟͷॳֶऀ͕ɼܦݧʹΑΔؼೲతֶशʹՃ͑ͯɼମܥ͔Βͷԋ៷తֶश͕ՄೳͱͳΔɾWebγεςϜΞʔΩςΫνϟͰ৽͍ٕ͠ज़Λݚڀ͢Δ߹ʹɼମܥ͔ΒෳͷΞΠσΞͷΈ߹ΘͤΛൃݟՄೳͱͳΔ
101. ਤͷத৺ΛͱΔ => ࠓճyuukiͷத৺Ͱ͋ΔSREΛબ2. طଘͷମܥ(جૅࣝମܥͱԠ༻ࣝମܥ)Λਤʹඳ͘3. ਤͷத৺͔Βͷؔ࿈ੑ͕ෆ໌Ͱ͋ͬͨΓۭനͷྖΛݟ͚ͭͯͦΕΒΛ໌Β͔ʹ͢ΔਤΛͭ͘ΔͱͲ͏͍͏͜ͱ͔ɾγεςϜ༷ʑͳͷࣝΛΈ߹ΘͤΔͨΊɺ ʓʓ͕ೖΔ͔ೖΒͳ͍͔ͱ͍ͬͨείʔϓΛઃఆ͢ΔٞʹͳΓ͕ͪɾείʔϓΛઃఆ͢Δͱ͍͏ΑΓɺطଘͷਤͱͭͳ͗߹ΘͤͯɺͲͷํʹͲΕ͚ͩา͘ͱԿʹͨͲΓண͔͕͔͘ΕΑ͍
2.ؔ࿈ମܥ
Betsy Beyer et al.ฤ, ۄཽ࢘ ༁, ᖒాஉ,et al. ༁,"SRE αΠτϦϥΠΞϏϦςΟΤϯδχΞϦϯάʕʕGoogleͷ৴པੑΛࢧ͑ΔΤϯδχΞϦϯάνʔϜ”,ΦϥΠϦʔɾδϟύϯ,2017.
13SREɾ৴པੑ(Reliability)͕ͦ͋͜ΒΏΔϓϩμΫτͷجຊతͳػೳͰ͋Δͱߟ͑ɼ৴པੑΛ࣠ʹ͜Ε·Ͱͷӡ༻ٕज़Λ1ͭͷͱཱͯ֬͠ɾΤϥʔΛڐ༰͠ɼ৴པੑΛ੍ޚ͢Δ͜ͱͰมߋΛ࠷େԽ͢Δɾମܥͱͯ͠ͷߩݙɼͦΕ·ͰͷWebγεςϜӡ༻ͷΒΒͩͬͨཁૉٕज़͕৴པੑͷ੍ޚʹͭͳ͕Δ͜ͱΛࣔͨ͜͠ͱ
14৴པੑͷఆٛͱܭଌɾ“γεςϜ͕ٻΊΒΕΔػೳΛɼఆΊΒΕͨ݅ͷԼͰɼఆΊΒΕͨظؒʹΘͨΓɼোΛى͜͢͜ͱͳ࣮͘ߦ͢Δ֬”[26]ɾ৴པੑΛఆྔతʹSLO(αʔϏεϨϕϧඪ)ͱͯ͠ઃఆ͢ΔɾSLOྫ) ϦΫΤετͷԠ࣌ؒͷ95%ile͕300msҎԼͷঢ়ଶ͕࢛ظதͷ99.8%ͷظؒҡ࣋͞Ε͍ͯΔ͜ͱɾSLOΛաୡͤͣʹϐολϦୡ͢Δ͜ͱΛࢦ͢[26] Patrick O'Connor, Andre Kleyner, Practical Reliability Engineering, Wiley, 2011.
15SREͷൣғɾϞχλϦϯάɾΠϯγσϯτରԠɾมߋཧɾΩϟύγςΟϓϥϯχϯάɾϓϩϏδϣχϯάɾޮͱύϑΥʔϚϯε
16৴པੑͷ֊ɾ৴པੑͷ֊ɼ৴པੑΛ੍ޚ͢ΔͨΊͷج൫ɾϞχλϦϯά͕ͳ͚Εɼ৴པੑͷܭଌ͕ͦͦͰ͖ͳ͍[1] Betsy Beyer et. al.ฤ, "SRE αΠτϦϥΠΞϏϦςΟΤϯδχΞϦϯά", ΦϥΠϦʔδϟύϯ, 2017. ਤIII -1αʔϏεͷ৴པੑͷ֊ɾΠϯγσϯτରԠମ੍͕ͳ͚Εɼ৴པੑ͕ଛͳΘΕͯճ෮Ͱ͖ͳ͍ɾϙετϞʔςϜ͕ͳ͚Εಉ͡ΠϯγσϯτΛ܁Γฦ͠ɼ৴པੑ͕ଛͳΘΕ͘͢ͳΔɾ…
Brendan Gregg ஶ, ༃ߛ ༁, ඌߴ߂ ༁,“ৄղ γεςϜɾύϑΥʔϚϯε”,ΦϥΠϦʔɾδϟύϯ,2017.
18ৄղγεςϜɾύϑΥʔϚϯεɾରͱͳΔγεςϜɼWebγεςϜͷ߹ࢄγεςϜɾWebγεςϜʹ͓͚ΔࢄγεςϜɼҰൠʹ୯Ұϗετ্ͷϓϩηεΛجຊཁૉͱͯ͠ߏ͞ΕΔɾ୯Ұϗετ্ͷߏΛཧղ͢ΔʹɼOSͷݪཧͱOS্Ͱಈ࡞͢ΔΞϓϦέʔγϣϯͷγεςϜϞσϧΛཧղ͢Δඞཁ͕͋Δɾॻ੶ʮৄղγεςϜɾύϑΥʔϚϯεʯͰɼOS͓ΑͼOSͷίϯςΩετʹ͓͚ΔΞϓϦέʔγϣϯͷੑೳϞσϧ͕ମܥԽ͞Ε͍ͯΔ
19ৄղγεςϜɾύϑΥʔϚϯε
Martin Kleppmannஶ, ੪౻ଠ ༁, ۄཽ࢘ ༁,“σʔλࢦΞϓϦέʔγϣϯσβΠϯ――৴པੑɺ֦ுੑɺอकੑͷߴ͍ࢄγεςϜઃܭͷݪཧ”,ΦϥΠϦʔɾδϟύϯ,2019.
21σʔλࢦΞϓϦέʔγϣϯσβΠϯɾιʔγϟϧωοτϫʔΫIoTΞϓϦέʔγϣϯͰɼଟͷར༻ऀσόΠε͕ੜ͢ΔେྔͷσʔλΛѻ͏ɾࢄγεςϜʹ͓͚Δॏཁͳ 3 ͭͷ՝ʹযɾ৴པੑɼεέʔϥϏϦςΟɼϝϯςφϯεੑɾσʔλࢦͷࢄγεςϜΛɺετϨʔδΤϯδϯɺσʔλΛࢄ͢Δͱ͖ͷஔख๏ɺࢄͨ͠σʔλͷҰ؏ੑͷ୲อख๏ͳͲͷ؍ͰମܥԽ͍ͯ͠Δ
Kief Morris ஶ, ٶԼ߶ี ༁ɺඌߴ߂ ༁,“Infrastructure as Code――Ϋϥυʹ͓͚ΔαʔόཧͷݪଇͱϓϥΫςΟε”,ΦϥΠϦʔɾδϟύϯ2017.
23Infrastructure As CodeπʔϧͷྨDynamicInfrastructurePlatformDynamicInfrastructurePlatformDynamicInfrastructurePlatformInfrastructure Definition ToolServer Configuration ToolInfrastructure ServiceɾInfrastructure As CodeɺιϑτΣΞ։ൃͷ࣮ફΛITΠϯϑϥετϥΫνϟͷࣗಈԽʹ׆͔͢ΞϓϩʔναʔόͳͲͷجຊϦιʔεͷཧIaaSͳͲϦιʔεͷઃఆཧTerraformͳͲαʔόͷࡉ෦ͷઃఆཧChefɼAnsibleͳͲཧࢧԉπʔϧαʔϏεϞχλϦϯάɼσϓϩΠͳͲ
24ؔ࿈ମܥͷ՝ɾ͜ΕΒͷମܥΛͯ͋͢ΘͤΔͱɼ͍ͣΕWebγεςϜΛߏ͢ΔͨΊʹඞཁͳࣝͷଟ͘ΛཏͰ͖Δɾ͔͠͠ɼ͜ͷମܥΛΈ߹ΘͤΔख๏ʹɼ࣍ͷ2ͭͷ՝͕͋ΔɾͲͷମܥ͕ඞཁ͔ΛֶशऀࣗྗͰൃݟ͢Δඞཁ͕͋Δɾ֤ମܥಠཱͯ͠ߏ͞Ε͍ͯΔͨΊɼମܥಉ࢜ͷؔ࿈ੑΛֶशऀ͕ࣗྗͰݟग़͢ඞཁ͕͋ΔɾମܥͷҰ෦͕ଞͷମܥͷҰ෦ͱॏෳ͢Δ͜ͱ͕͋ΔɾInfrastructure ServiceͷϞχλϦϯάͱSREͷϞχλϦϯάͳͲ
3.ఏҊମܥ
261. ৄղγεςϜύϑΥʔϚϯε => ୯Ұϗετ্ͷମܥ2. σʔλࢦΞϓϦέʔγϣϯσβΠϯ => ࢄγεςϜͷମܥ3. Infrastructure As Code => ΞϓϦέʔγϣϯ࣮ߦڥͷମܥ4. SRE => ৴པੑ੍ޚͷମܥSREΛ࣠ʹطଘମܥΛ·ͱΊΔSREɼ৴པੑΛ੍ޚ͠ɼมߋΛ࠷େԽ͢Δͱ͍͏తΛ༩͑ͯ͘ΕΔ
271. ΞϓϦέʔγϣϯͷ࣮ߦڥͷߏख๏2. ୯Ұϗετ্ͷΞϓϦέʔγϣϯͷߏख๏3. ࢄγεςϜͱͯ͠ͷΞϓϦέʔγϣϯͷߏख๏4. ߏ͞ΕͨΞϓϦέʔγϣϯͷ৴པੑ੍ޚఏҊ͢Δମܥͷେ߲৴པੑΛ੍ޚ͠ɼมߋΛ࠷େԽ͢Δ͜ͱΛతͱͯ͠ɼγεςϜͷߏख๏Λ࣍ͷ1~4ʹྨ͢Δ
28ྨಉ࢜ͷؔੑ৴པੑ੍ޚ࣮ߦڥͷߏ୯Ұϗετ্ͷΞϓϦέʔγϣϯߏࢄγεςϜΞϓϦέʔγϣϯߏαʔόɼωοτϫʔΫڥΛ͍͔ʹߏ͢Δ͔ߴ࡞ɾมߋεέʔϥϏϦςΟOS্ͷΞϓϦέʔγϣϯʹ͍͔ʹޮతʹϦιʔεΛར༻ͤ͞Δ͔ϞχλϦϯά࣮ߦޮϞχλϦϯάεέʔϥϏϦςΟߴՄ༻ੑࢄϗετ্Ͱ͍͔ʹΞϓϦέʔγϣϯΛߏ͢Δ͔
29৴པੑ੍ޚ࣮ߦڥͷߏ୯Ұϗετ্ͷΞϓϦέʔγϣϯߏࢄγεςϜΞϓϦέʔγϣϯߏWSAݚ#5ͷ֤ݚڀΛద༻matsumotory“ίϯςφ࣮ߦج൫"hirolovesbeer“ࢹγεςϜ”k1Low“ҟৗՕॴಛఆख๏”monochromegane“Kaburaya”osako_ricc“ॲཧܥੑೳධՁ”zacky1972 “Pelemay”
30৫จԽͱͷؔ࿈ੑ৴པੑ੍ޚ࣮ߦڥͷߏ୯Ұϗετ্ͷΞϓϦέʔγϣϯߏࢄγεςϜΞϓϦέʔγϣϯߏDevOpsίϥϘϨʔγϣϯΞϑΟχςΟπʔϧεέʔϦϯάΠϯγσϯτରԠϙετϞʔςϜϚΠΫϩαʔϏε
4.·ͱΊ
32·ͱΊɾWebγεςϜΞʔΩςΫνϟʹ͍ͭͯɼମܥ͔Βͷԋ៷తֶशͱΞΠσΞͷΈ߹ΘͤͷଅਐΛతͱ͢ΔɾఏҊମܥɼ৴པੑΛ੍ޚ͠ɼมߋΛ࠷େԽ͢Δ͜ͱΛతͱͯ͠ɼ4ͭͷྨΛఏҊ͍ͯ͠Δ
33ࠓޙͷ՝ɾఏҊ͢ΔମܥΛར༻ͨ͠ͱ͖ʹɼֶशՄೳͳൣғΛ໌Β͔ʹ͢Δɾ։ൃ͢ΔγεςϜ͕ߴԽ͢Ε͢Δ΄Ͳɼඞཁͳࣝ͘·ͨਂ͘ͳΓɼ୯ҰͷମܥͰΧόʔ͢Δ͜ͱ͘͠ͳΔɾWebγεςϜΞʔΩςΫνϟͷͷڥքΛ໌Β͔ʹ͢Δɾྫ͑ɼσʔλϕʔεͷεΩʔϚઃܭɼ࣮ߦޮੑͱϏδωεϩδοΫͷઃܭͷ྆ऀʹؔΘΔɾϑϩϯτΤϯυͱόοΫΤϯυͷ۠ผͱؔ࿈ੑΛ໌Β͔ʹ͢ΔɾΧϧνϟʔ৫ମܥͱͷؔ࿈ੑΛ໌Β͔ʹ͢Δ