Webシステムアーキテクチャの地図を描く構想 / A map of web systems architecture

Webシステムアーキテクチャの地図を描く構想 / A map of web systems architecture

第5回WebSysmetArchitecture(WSA)研究会 https://websystemarchitecture.hatenablog.jp/entry/2019/07/30/172650

A658ec7f1badf73819dfa501165016c1?s=128

Yuuki Tsubouchi (yuuk1)

September 28, 2019
Tweet

Transcript

  1. ͘͞ΒΠϯλʔωοτ גࣜձࣾ (C) Copyright 1996-2019 SAKURA internet Inc ͘͞ΒΠϯλʔωοτ ݚڀॴ

    WebγεςϜΞʔΩςΫνϟͷ஍ਤ Λඳ͘ߏ૝ 2019/09/28 ݚڀһ ௶಺ ༎थ id:y_uuki / @yuuk1t ୈ5ճWebSystemArchitectureݚڀձ
  2. WSAݚڀձͷ໨తͷ1ͭʹ ௚઀Ξϓϩʔν͢Δ https://websystemarchitecture.hatenablog.jp/purpose WebαʔϏεʹඞཁͱͳΔ৘ใ௨৴ج൫γεςϜͷମܥԽ WebαʔϏεʹඞཁͱͳΔ৘ใ௨৴ج൫γεςϜʹ͍ͭͯɼݚڀऀɼٕज़ऀɼֶੜ Λ໰Θͣɼ޿͘஌ݟަ׵Λߦ͍ɼਂٞ͘࿦͢Δ͜ͱͰମܥԽΛ໨ࢦ͢ɽ
 ·ͨɼମܥԽΛ௨ͯ࣍͡ੈ୅ͷWebαʔϏεج൫ͷ͋Γํʹ͍ͭͯͷఏݴΛߦ͏ɽ

  3. 3 1. ͸͡Ίʹ 2. ؔ࿈ମܥ 3. ఏҊମܥ 4. ·ͱΊ ໨࣍

  4. 1. ͸͡Ίʹ

  5. 5 ɾWebαʔϏεͷγεςϜʹର͢Δཁٻ͸ɼεέʔϥϏϦςΟɼߴՄ༻ ੑɼߴ଎ͳԠ౴ੑೳɼ௕ظؒͷӡ༻ͳͲଟذʹΘͨΔ ɾଟ༷ͳཁٻʹରͯ͠ଟ༷ͳ஌ࣝͱٕज़͕ඞཁͱͳΔ ɾOS΍σʔλϕʔεɼωοτϫʔΫͳͲͷ޿ൣғͷجૅ஌ࣝ ɾϛυϧ΢ΣΞ΍ࣗಈԽπʔϧΛར༻͢ΔͨΊͷԠ༻஌ࣝ ɾ஌ࣝΛ૊Έ߹Θͤ1ͭͷγεςϜΛߏங͠ɼӡ༻͢ΔͨΊͷٕज़ എܠ

  6. 6 1. ैདྷͷ৘ใ޻ֶͷڭՊॻ͸ɼ఻౷తʹ෼ྨ͞Εͨ෼໺ʹ͓͚Δجૅ ஌ࣝͷΈ ɾجૅ஌ࣝΛͲͷΑ͏ʹWebαʔϏε։ൃʹద༻͢Δͷ͔͸Θ͔Β ͳ͍ 2. WebαʔϏε։ൃͱӡ༻ͷݱ৔Ͱ͸ɼະܦݧͰ΋ཧղͰ͖ΔΑ͏ͳ ܗͰݱ৔ͷܦݧ͕ݴޠԽ͞Ε͍ͯͳ͍ ໰୊ҙࣝ

    ৘ใ޻ֶͷجૅ஌ࣝͱɼWebγεςϜ΁ͷԠ༻஌ࣝΛ ૊Έ߹Θͤͨɼੜ͖ͨ஌ࣝͷ஍ਤΛͭ͘Δ͜ͱ͕ॏཁ
  7. 7 ྨࣅͷ໰୊ҙࣝʹର͢ΔΞϓϩʔν ίʔυͱͯ͠ΠϯϑϥετϥΫνϟΛ؅ཧ ͢Δͱ͍͏ߟ͑ํ͸ɺैདྷͷΠϯϑϥετ ϥΫνϟ؅ཧͱ͸େ͖͘ҟͳΔɻ ࢲ͸ɺ͜ͷస׵ΛͲͷΑ͏ʹਐΊͨΒΑ͍ ͔͕Θ͔Βͣۤ࿑͍ͯ͠ΔνʔϜΛͨ͘͞ Μݟ͖ͯͨɻ ͔͠͠ɺ͜ΕΒͷπʔϧΛޮՌతʹ࢖͏ͨ ΊͷΞΠσΞɺύλʔϯɺϓϥΫςΟε

    ͸ɺΧϯϑΝϨϯεͷߨԋɺϒϩάϙε τɺݸผͷ࿦จʹࢄΒ͹͍ͬͯΔɻ
  8. 8 طଘͷମܥͱͦͷ՝୊ 1. Ͳͷମܥ͕WebγεςϜΞʔΩςΫνϟʹඞཁ͔͕ࣗ໌Ͱͳ͍ 2. طଘͷମܥಉ࢜ͷؔ࿈ੑ͕ࣗ໌Ͱͳ͍ ɾجૅ஌ࣝͱԠ༻஌ࣝΛ͋Θͤͨମܥ͸͍͔ͭ͘ଘࡏ͢Δ ɾWebγεςϜΞʔΩςΫνϟʹඞཁͳٕज़ཁૉΛ໢ཏ͢ΔͨΊʹɼෳ ਺ͷମܥΛ૊Έ߹ΘͤΔඞཁ͕͋Δ

  9. 9 ݚڀ໨త ɾWebγεςϜΞʔΩςΫνϟͷॳֶऀ͕ɼܦݧʹΑΔؼೲతֶशʹ Ճ͑ͯɼମܥ͔Βͷԋ៷తֶश͕ՄೳͱͳΔ ɾWebγεςϜΞʔΩςΫνϟ෼໺Ͱ৽͍ٕ͠ज़Λݚڀ͢Δ৔߹ʹɼ ମܥ͔Βෳ਺ͷΞΠσΞͷ૊Έ߹ΘͤΛൃݟՄೳͱͳΔ

  10. 10 1. ஍ਤͷத৺఺ΛͱΔ => ࠓճ͸yuukiͷத৺఺Ͱ͋ΔSREΛબ୒ 2. طଘͷମܥ(جૅ஌ࣝମܥͱԠ༻஌ࣝମܥ)Λ஍ਤʹඳ͘ 3. ஍ਤͷத৺఺͔Βͷؔ࿈ੑ͕ෆ໌Ͱ͋ͬͨΓۭനͷྖ஍Λݟ͚ͭͯ ͦΕΒΛ໌Β͔ʹ͢Δ

    ஍ਤΛͭ͘Δͱ͸Ͳ͏͍͏͜ͱ͔ ɾγεςϜ෼໺͸༷ʑͳ෼໺ͷ஌ࣝΛ૊Έ߹ΘͤΔͨΊɺ ʓʓ෼໺͕ ೖΔ͔ೖΒͳ͍͔ͱ͍ͬͨείʔϓΛઃఆ͢Δٞ࿦ʹͳΓ͕ͪ ɾείʔϓΛઃఆ͢Δͱ͍͏ΑΓ͸ɺطଘͷ஍ਤͱͭͳ͗߹Θͤͯɺ Ͳͷํ޲ʹͲΕ͚ͩา͘ͱԿʹͨͲΓண͔͕͘෼͔Ε͹Α͍
  11. 2. ؔ࿈ମܥ

  12. Betsy Beyer et al.ฤ, ۄ઒ཽ࢘ ༁, ᖒా෢உ,et al. ؂༁, "SRE

    αΠτϦϥΠΞϏϦςΟΤϯδχΞϦϯάʕʕ Googleͷ৴པੑΛࢧ͑ΔΤϯδχΞϦϯάνʔϜ”, ΦϥΠϦʔɾδϟύϯ, 2017.
  13. 13 SRE ɾ৴པੑ(Reliability)͕ͦ͋͜ΒΏΔϓϩμΫτͷجຊతͳػೳͰ͋Δ ͱߟ͑ɼ৴པੑΛ࣠ʹ͜Ε·Ͱͷӡ༻ٕज़Λ1ͭͷ෼໺ͱཱͯ֬͠ ɾΤϥʔΛڐ༰͠ɼ৴པੑΛ੍ޚ͢Δ͜ͱͰมߋ଎౓Λ࠷େԽ͢Δ ɾମܥͱͯ͠ͷߩݙ͸ɼͦΕ·ͰͷWebγεςϜӡ༻ͷ͹Β͹Βͩͬ ͨཁૉٕज़͕৴པੑͷ੍ޚʹͭͳ͕Δ͜ͱΛࣔͨ͜͠ͱ

  14. 14 ৴པੑͷఆٛͱܭଌ ɾ“γεςϜ͕ٻΊΒΕΔػೳΛɼఆΊΒΕͨ৚݅ͷԼͰɼఆΊΒΕͨ ظؒʹΘͨΓɼো֐Λى͜͢͜ͱͳ࣮͘ߦ͢Δ֬཰”[26] ɾ৴པੑΛఆྔతʹSLO(αʔϏεϨϕϧ໨ඪ)ͱͯ͠ઃఆ͢Δ ɾSLOྫ) ϦΫΤετͷԠ౴࣌ؒͷ95%ile͕300msҎԼͷঢ়ଶ͕࢛൒ ظதͷ99.8%ͷظؒҡ࣋͞Ε͍ͯΔ͜ͱ ɾSLOΛա৒ୡ੒ͤͣʹϐολϦୡ੒͢Δ͜ͱΛ໨ࢦ͢ [26]

    Patrick O'Connor, Andre Kleyner, Practical Reliability Engineering, Wiley, 2011.
  15. 15 SREͷ੹೚ൣғ ɾϞχλϦϯά ɾΠϯγσϯτରԠ ɾมߋ؅ཧ ɾΩϟύγςΟϓϥϯχϯά ɾϓϩϏδϣχϯά ɾޮ཰ͱύϑΥʔϚϯε

  16. 16 ৴པੑͷ֊૚ ɾ৴པੑͷ֊૚͸ɼ৴པੑΛ੍ޚ͢ΔͨΊͷج൫ ɾϞχλϦϯά͕ͳ͚Ε͹ɼ৴པੑͷܭଌ͕ͦ΋ͦ ΋Ͱ͖ͳ͍ [1] Betsy Beyer et. al.ฤ,

    "SRE αΠτϦϥΠΞϏϦςΟΤϯδχΞϦϯά", ΦϥΠϦʔδϟύϯ, 2017. ਤIII -1αʔϏεͷ৴པੑͷ֊૚ ɾΠϯγσϯτରԠମ੍͕ͳ͚Ε͹ɼ৴པੑ ͕ଛͳΘΕͯ΋ճ෮Ͱ͖ͳ͍ ɾϙετϞʔςϜ͕ͳ͚Ε͹ಉ͡Πϯγσϯ τΛ܁Γฦ͠ɼ৴པੑ͕ଛͳΘΕ΍͘͢ͳ Δ ɾ…
  17. Brendan Gregg ஶ, ੢࿬༃ߛ ؂༁, ௕ඌߴ߂ ༁, “ৄղ γεςϜɾύϑΥʔϚϯε”, ΦϥΠϦʔɾδϟύϯ,

    2017.
  18. 18 ৄղγεςϜɾύϑΥʔϚϯε ɾର৅ͱͳΔγεςϜ͸ɼWebγεςϜͷ৔߹͸෼ࢄγεςϜ ɾWebγεςϜʹ͓͚Δ෼ࢄγεςϜ͸ɼҰൠʹ୯Ұϗετ্ͷϓϩ ηεΛجຊཁૉͱͯ͠ߏ੒͞ΕΔ ɾ୯Ұϗετ্ͷߏ੒Λཧղ͢Δʹ͸ɼOSͷݪཧͱOS্Ͱಈ࡞͢Δ ΞϓϦέʔγϣϯͷγεςϜϞσϧΛཧղ͢Δඞཁ͕͋Δ ɾॻ੶ʮৄղγεςϜɾύϑΥʔϚϯεʯͰ͸ɼOS͓ΑͼOSͷίϯ ςΩετʹ͓͚ΔΞϓϦέʔγϣϯͷੑೳϞσϧ͕ମܥԽ͞Ε͍ͯ Δ

  19. 19 ৄղγεςϜɾύϑΥʔϚϯε

  20. Martin Kleppmannஶ, ੪౻ଠ࿠ ؂༁, ۄ઒ཽ࢘ ༁, “σʔλࢦ޲ΞϓϦέʔγϣϯσβΠϯ ――৴པੑɺ֦ுੑɺอकੑͷߴ͍෼ࢄγεςϜઃܭͷݪཧ”, ΦϥΠϦʔɾδϟύϯ, 2019.

  21. 21 σʔλࢦ޲ΞϓϦέʔγϣϯσβΠϯ ɾιʔγϟϧωοτϫʔΫ΍IoTΞϓϦέʔγϣϯͰ͸ɼଟ਺ͷར༻ऀ ΍σόΠε͕ੜ੒͢ΔେྔͷσʔλΛѻ͏ ɾ෼ࢄγεςϜʹ͓͚Δॏཁͳ 3 ͭͷ՝୊ʹয఺ ɾ৴པੑɼεέʔϥϏϦςΟɼϝϯςφϯεੑ ɾσʔλࢦ޲ͷ෼ࢄγεςϜΛɺετϨʔδΤϯδϯɺσʔλΛ෼ࢄ ͢Δͱ͖ͷ഑ஔख๏ɺ෼ࢄͨ͠σʔλͷҰ؏ੑͷ୲อख๏ͳͲͷ؍

    ఺ͰମܥԽ͍ͯ͠Δ
  22. Kief Morris ஶ, ٶԼ߶ี ؂༁ɺ௕ඌߴ߂ ༁, “Infrastructure as Code ――Ϋϥ΢υʹ͓͚Δαʔό؅ཧͷݪଇͱϓϥΫςΟε”,

    ΦϥΠϦʔɾδϟύϯ 2017.
  23. 23 Infrastructure As Codeπʔϧͷ෼ྨ Dynamic Infrastructure Platform Dynamic Infrastructure Platform

    Dynamic Infrastructure Platform Infrastructure Definition Tool Server Configuration Tool Infrastructure Service ɾInfrastructure As Code͸ɺιϑτ΢ΣΞ։ൃͷ࣮ફ஌ΛITΠϯϑϥ ετϥΫνϟͷࣗಈԽʹ׆͔͢Ξϓϩʔν αʔόͳͲͷجຊϦιʔεͷ؅ཧ IaaSͳͲ Ϧιʔεͷઃఆ؅ཧ TerraformͳͲ αʔόͷࡉ෦ͷઃఆ؅ཧ ChefɼAnsibleͳͲ ؅ཧࢧԉπʔϧ΍αʔϏε ϞχλϦϯάɼσϓϩΠͳͲ
  24. 24 ؔ࿈ମܥͷ՝୊ ɾ͜ΕΒͷମܥΛ͢΂ͯ͋ΘͤΔͱɼ͍ͣΕ΋WebγεςϜΛߏ੒͢ ΔͨΊʹඞཁͳ஌ࣝͷଟ͘Λ໢ཏͰ͖Δ ɾ͔͠͠ɼ͜ͷମܥΛ૊Έ߹ΘͤΔख๏ʹ͸ɼ࣍ͷ2ͭͷ՝୊͕͋Δ ɾͲͷମܥ͕ඞཁ͔Λֶशऀ͸ࣗྗͰൃݟ͢Δඞཁ͕͋Δ ɾ֤ମܥ͸ಠཱͯ͠ߏ੒͞Ε͍ͯΔͨΊɼମܥಉ࢜ͷؔ࿈ੑΛֶशऀ ͕ࣗྗͰݟग़͢ඞཁ͕͋Δ ɾମܥͷҰ෦͕ଞͷମܥͷҰ෦ͱॏෳ͢Δ͜ͱ͕͋Δ ɾInfrastructure

    ServiceͷϞχλϦϯάͱSREͷϞχλϦϯάͳͲ
  25. 3. ఏҊମܥ

  26. 26 1. ৄղγεςϜύϑΥʔϚϯε => ୯Ұϗετ্ͷମܥ 2. σʔλࢦ޲ΞϓϦέʔγϣϯσβΠϯ => ෼ࢄγεςϜͷମܥ 3.

    Infrastructure As Code => ΞϓϦέʔγϣϯ࣮ߦ؀ڥͷମܥ 4. SRE => ৴པੑ੍ޚͷମܥ SREΛ࣠ʹطଘମܥΛ·ͱΊΔ SRE͸ɼ৴པੑΛ੍ޚ͠ɼมߋ଎౓Λ࠷େԽ͢Δͱ͍͏໨తΛ ༩͑ͯ͘ΕΔ
  27. 27 1. ΞϓϦέʔγϣϯͷ࣮ߦ؀ڥͷߏ੒ख๏ 2. ୯Ұϗετ্ͷΞϓϦέʔγϣϯͷߏ੒ख๏ 3. ෼ࢄγεςϜͱͯ͠ͷΞϓϦέʔγϣϯͷߏ੒ख๏ 4. ߏ੒͞ΕͨΞϓϦέʔγϣϯͷ৴པੑ੍ޚ ఏҊ͢Δମܥͷେ߲໨

    ৴པੑΛ੍ޚ͠ɼมߋ଎౓Λ࠷େԽ͢Δ͜ͱΛ໨తͱͯ͠ɼ γεςϜͷߏ੒ख๏Λ࣍ͷ1~4ʹ෼ྨ͢Δ
  28. 28 ෼ྨಉ࢜ͷؔ܎ੑ ৴པੑ੍ޚ ࣮ߦ؀ڥͷߏ੒ ୯Ұϗετ্ͷ ΞϓϦέʔγϣϯߏ੒ ෼ࢄγεςϜ ΞϓϦέʔγϣϯߏ੒ αʔόɼωοτϫʔΫ؀ڥΛ ͍͔ʹߏ੒͢Δ͔

    ߴ଎࡞੒ɾมߋ εέʔϥϏϦςΟ OS্ͷΞϓϦέʔγϣϯ ʹ͍͔ʹޮ཰తʹ ϦιʔεΛར༻ͤ͞Δ͔ ϞχλϦϯά ࣮ߦޮ཰ ϞχλϦϯά εέʔϥϏϦςΟ ߴՄ༻ੑ ෼ࢄϗετ্Ͱ͍͔ʹ ΞϓϦέʔγϣϯΛ ߏ੒͢Δ͔
  29. 29 ৴པੑ੍ޚ ࣮ߦ؀ڥͷߏ੒ ୯Ұϗετ্ͷ ΞϓϦέʔγϣϯߏ੒ ෼ࢄγεςϜ ΞϓϦέʔγϣϯߏ੒ WSAݚ#5ͷ֤ݚڀΛద༻ matsumotory “ίϯςφ࣮ߦج൫"

    hirolovesbeer “؂ࢹγεςϜ” k1Low “ҟৗՕॴಛఆख๏” monochromegane “Kaburaya” osako_ricc “ॲཧܥੑೳධՁ” zacky1972 “Pelemay”
  30. 30 ૊৫จԽͱͷؔ࿈ੑ ৴པੑ੍ޚ ࣮ߦ؀ڥͷߏ੒ ୯Ұϗετ্ͷ ΞϓϦέʔγϣϯߏ੒ ෼ࢄγεςϜ ΞϓϦέʔγϣϯߏ੒ DevOps ίϥϘϨʔγϣϯ

    ΞϑΟχςΟ πʔϧ εέʔϦϯά ΠϯγσϯτରԠ ϙετϞʔςϜ ϚΠΫϩαʔϏε
  31. 4. ·ͱΊ

  32. 32 ·ͱΊ ɾWebγεςϜΞʔΩςΫνϟʹ͍ͭͯɼମܥ͔Βͷԋ៷తֶशͱΞΠ σΞͷ૊Έ߹ΘͤͷଅਐΛ໨తͱ͢Δ ɾఏҊମܥ͸ɼ৴པੑΛ੍ޚ͠ɼมߋ଎౓Λ࠷େԽ͢Δ͜ͱΛ໨తͱ͠ ͯɼ4ͭͷ෼ྨΛఏҊ͍ͯ͠Δ

  33. 33 ࠓޙͷ՝୊ ɾఏҊ͢ΔମܥΛར༻ͨ͠ͱ͖ʹɼֶशՄೳͳൣғΛ໌Β͔ʹ͢Δ ɾ։ൃ͢ΔγεςϜ͕ߴ౓Խ͢Ε͹͢Δ΄Ͳɼඞཁͳ஌ࣝ͸޿͘·ͨ ͸ਂ͘ͳΓɼ୯ҰͷମܥͰΧόʔ͢Δ͜ͱ͸೉͘͠ͳΔ ɾWebγεςϜΞʔΩςΫνϟͷ෼໺ͷڥքΛ໌Β͔ʹ͢Δ ɾྫ͑͹ɼσʔλϕʔεͷεΩʔϚઃܭ͸ɼ࣮ߦޮ཰ੑͱϏδωεϩ δοΫͷઃܭͷ྆ऀʹؔΘΔ ɾϑϩϯτΤϯυ૚ͱόοΫΤϯυ૚ͷ۠ผͱؔ࿈ੑΛ໌Β͔ʹ͢Δ ɾΧϧνϟʔ΍૊৫ମܥͱͷؔ࿈ੑΛ໌Β͔ʹ͢Δ