Slide 1

Slide 1 text

ΤϯδχΞϦϯά૊৫ΞʔΩςΫνϟͷ ௐࠪͱઃܭཁ఺ʹର͢Δߟ࡯ גࣜձࣾϋʔτϏʔπ VP of Engineering ߴଜ ੒ಓʢ@nari_exʣ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 1

Slide 2

Slide 2 text

ࣗݾ঺հ • Takamura Narimchi / ߴଜ ੒ಓ • @nari_ex • גࣜձࣾϋʔτϏʔπ औక໾ VP of Engineering • ిؾ௨৴େֶ • ৘ใཧ޻ֶ෦৘ใɾ௨৴޻ֶՊ ֶ࢜ • άϩʔϏεܦӦେֶӃ • ܦӦݚڀՊܦӦઐ߈ म࢜ʢMBAʣ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 2

Slide 3

Slide 3 text

໨࣍ • എܠͱ՝୊ • ୅දతͳ૊৫ߏ଄ͱ։ൃख๏ͷௐࠪ • ૊৫ͱ͸ɺ૊৫ͷڥքͱ͸ • ·ͱΊ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 3

Slide 4

Slide 4 text

എܠͱ՝୊ • Web γεςϜͷ੒௕ʹ൐͍ɺෳࡶ͕͞૿Ճ • ૊৫ؒͷ࿈ܞෆ଍ʹىҼ༷ͯ͠ʑͳ໰୊͕ൃੜ • Web γεςϜͷ੒௕ϑΣʔζʹ͓͍ͯɺΤϯδχΞϦϯά૊৫ ͷύϑΥʔϚϯεͱεέʔϥϏϦςΟ͕ϘτϧωοΫʹ • ΤϯδχΞϦϯά૊৫ͷઃܭʹ͓͍ͯମܥԽ͞Εͨ஌ݟ͕๡͠ ͍ͨΊɺख୳ΓͰߦ͏͜ͱ͕ଟ͍ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 4

Slide 5

Slide 5 text

୅දతͳ૊৫ߏ଄ͱ։ൃख๏ͷௐࠪ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 5

Slide 6

Slide 6 text

ܦӦֶʹొ৔͢Δ୅දతͳ૊৫ߏ଄ • ػೳผ૊৫ • ࣄۀ෦੍૊৫ • ϓϩδΣΫτνʔϜܕ૊৫ => ΤϯδχΞϦϯά૊৫ͱ͍͏จ຺͕ͳ͍఺͕ෆे෼ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 6

Slide 7

Slide 7 text

୅දతͳ Web γεςϜΞʔΩςΫνϟͱ૊৫ߏ଄ • ϞϊϦε • ϚΠΫϩαʔϏε ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 7

Slide 8

Slide 8 text

ϞϊϦεͷ૊৫ߏ଄ • యܕతͳڞ༗DBϞσϧ • ϑϩϯτΤϯυ։ൃɺόοΫΤϯυ։ൃɺ DBAɺOps ͱ͍͏Α͏ʹػೳผ૊৫Ͱߏ ੒͞Ε͍ͯΔ৔߹ʹ࠾༻͞ΕΔ͜ͱ͕ଟ͍ • ٕज़՝୊: DB पΓͷॲཧੑೳ΍มߋίε τ͕։ൃͷϘτϧωοΫʹͳΔ • ૊৫՝୊: ෦໳ؒͷαΠϩԽ͕ൃੜ͠΍͢ ͍ɺڞ༗ϦιʔεΛ࣋ͭ૊৫ʢDBAɺ Opsʣʹෛՙ͕ूத͢Δ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 8

Slide 9

Slide 9 text

ิ଍: ίϯ΢ΣΠͷ๏ଇʢConway’s Lawʣ ʮγεςϜΛઃܭ͢Δ૊৫͸ɺͦͷߏ଄Λͦͬ͘Γ·Ͷͨߏ଄ͷ ઃܭΛੜΈग़ͯ͠͠·͏ʯ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 9

Slide 10

Slide 10 text

ϚΠΫϩαʔϏεͷ૊৫ߏ଄ • ٯίϯ΢ΣΠઓུʹΑΓɺαʔϏε͝ͱʹνʔ ϜΛߏ੒͢Δ • ٕज़՝୊: αʔϏεؒ௨৴ࣦഊͷέΞ΍τϥϯ βΫγϣϯͷෳࡶԽͳͲɺαʔϏε͕෼ࢄͨ͠ ͜ͱʹΑΔσϝϦοτ͕ੜ͡Δ • ૊৫՝୊: • ੹೚ൣғ͕αʔϏεશମʹͳΔͨΊɺཁٻ͞ ΕΔٕज़ྖҬ͕֦େ͢Δ • ୲౰αʔϏεΛෳ਺࣋ͭ৔߹ʹ͸ɺաෛՙʹ ͳΔνʔϜ΍ϝϯόʔ͕ੜ͡ΔՄೳੑ͕͋Δ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 10

Slide 11

Slide 11 text

ิ଍: ٯίϯ΢ΣΠઓུʢInverse Conway Maneuverʣ ιϑτ΢ΣΞͷߏ଄͕૊৫ͷߏ଄ʹ൓ө͢Δ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 11

Slide 12

Slide 12 text

DevOpsʁ SREʁ • DevOps: ૊৫αΠϩͷղফΛ໨తͱͨ͠ந৅֓೦ • ந৅౓͕ߴ͘૊৫ΞʔΩςΫνϟͷઃܭ·Ͱམͱ͠ࠐΉ͜ͱ ͕೉͍͠ • SRE: ૊৫αΠϩͱӡ༻ٕज़ऀͷઢܗ૿ՃΛղফ͢ΔͨΊͷٕज़ ख๏ • ΤϯδχΞϦϯά૊৫ͱ͍͏είʔϓ͸ෆద౰ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 12

Slide 13

Slide 13 text

͜͜·Ͱͷ·ͱΊ • ϞϊϦεͱϚΠΫϩαʔϏεΛ࠾༻ͨ͠৔߹ͷ૊৫ߏ଄͸ཧղ Ͱ͖Δ͕ɺҰํͰର৅ΞʔΩςΫνϟΛ࠾༻͠ͳ͍૊৫ͷઃܭ ʹ͏·͘Ԡ༻Ͱ͖ͳ͍ • => ͳʹ͕ॏཁͳͷ͔ΛೝࣝͰ͖͍ͯͳ͍ • DevOps ΍ SRE Λݩʹ૊৫ઃܭΛߦ͏͜ͱ͸೉͍͠ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 13

Slide 14

Slide 14 text

ΰʔϧ • Web γεςϜͷ։ൃΛߦ͏ΤϯδχΞϦϯά૊৫ͷΞʔΩςΫ νϟઃܭʹඞཁͳཁ఺Λମܥతʹ·ͱΊΔ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 14

Slide 15

Slide 15 text

ิ଍: ૊৫Ϛωδϝϯτʹ͓͚Δ૊৫ߏ଄ͷҐஔؔ܎ จԽ΍ਓࣄ੍౓ͳͲ͸είʔϓʹؚ·Εͳ͍͜ͱʹ஫ҙɻ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 15

Slide 16

Slide 16 text

૊৫ΞʔΩςΫνϟͷઃܭͱ͸... ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 16

Slide 17

Slide 17 text

૊৫ͱ͸... 2ਓҎ্ͷਓʑͷɺҙࣝతʹௐ੔͞Εͨॾ׆ಈɺॾྗͷମܥ1 όʔφʔυͷ૊৫࿦ʹ͓͚Δ૊৫ͷఆ͔ٛΒಘΒΕͨॏཁͳؚҙ͸ҎԼͷ௨Γɻ • ૊৫Λߏ੒͢Δཁૉ͸ɺਓؒͦͷ΋ͷͰ͸ͳ͘ɺਓ͕ؒఏڙ͢Δ׆ಈ΍ྗͰ ͋Δ͜ͱ • ૊৫Λߏ੒͢Δॾ׆ಈɾॾྗ͸ɺମܥʢγεςϜʣͱͯ͠ޓ͍ʹ૬ޓ࡞ ༻Λ΋ͭ͜ͱ 1 [Barnard, ܦӦऀͷ໾ׂ, 1938] ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 17

Slide 18

Slide 18 text

૊৫ͷڥքͷछྨ Ұൠతͳ૊৫ਤͷఆٛҎ֎ʹ΋׆ಈൣғ͝ͱʹఆٛ͞ΕΔ2ͭͷڥք͕͋Δ2 ૊৫ͷू߹ମͷύϑΥʔϚϯε͸ୈೋɺୈࡾͷڥքΛ͍͔ʹίϯτϩʔϧ͢Δ͔͕ॏ ཁͱͳΔ3 1. ୈҰڥք: ݫີͳʮ૊৫ʯ֓೦ʹ΋ͱͮ͘ڥք 2. ୈೋڥք: υϝΠϯͱͯ͠ͷڥք 3. ୈࡾڥք: ҙࣝతௐ੔ͷٴͿൣғͱͯ͠ͷڥք 3 Niels Pflaeging, Organize for Complexity, 2014 2 ܂ాߞଠ࿠ɾాඌխ෉, "૊৫࿦", 2010 ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 18

Slide 19

Slide 19 text

૊৫ͷڥք4 4 Team Topology, Ma.hew SkeltonɾManuel Pais, 2019 ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 19

Slide 20

Slide 20 text

ίϯ΢ΣΠͷ๏ଇɺٯίϯ΢ΣΠઓུ͔Βͷֶͼ • ૊৫ͷߏ଄ʹ͸Ұఆͷنଇ͕ඞཁʹͳΔ • ͢΂ͯͷίϛϡχέʔγϣϯͱίϥϘϨʔγϣϯ͕ྑ͍ͱ͸ݶΒͳ͍ • ෳࡶͳ໰୊Λղܾ͢Δ͏͑Ͱ࠷ߴͷूஂύϑΥʔϚϯεΛ࣮ݱ͢Δʹ ͸ɺٕज़ͱ૊৫Λ࠶ઃܭͯ͠ɺਓʑΛޓ͍ͷ࡞ۀ͔Βஅଓతʹ෼཭͢Δ ඞཁ͕͋Δ • => ૊৫಺ɾ֎ͷίϛϡχέʔγϣϯύεͷॏཁੑ • ͋Δ૊৫ؒ͸ີʹɺ͋Δ૊৫ؒ͸ૄʹ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 20

Slide 21

Slide 21 text

૊৫ؒͷ૬ޓ࡞༻ͷଳҬ4 4 Team Topology, Ma.hew SkeltonɾManuel Pais, 2019 ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 21

Slide 22

Slide 22 text

ΤϯδχΞϦϯά૊৫ΞʔΩςΫνϟઃܭͷཁ఺ • ૊৫ʢਓͷ׆ಈʣͷڥքʢൣғʣΛ۩ମԽ͢Δ͜ͱ • ૊৫ؒͷ૬ޓ࡞༻ͷྲྀΕΛ۩ମԽ͢Δ͜ͱ => ͜ͷཻ౓Ͱ͸·࣮ͩફతͰ͸ͳ͍ͨΊɺ͞Βʹ۩ମԽΛࢼΈΔ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 22

Slide 23

Slide 23 text

team-sized architecture4 • Monoliths vs Microservices is Missing the Point • Start with Team Cogni7ve Load • 2019/09/17 ʹग़൛͞Εͨຊ 4 Team Topology, Ma.hew SkeltonɾManuel Pais, 2019 ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 23

Slide 24

Slide 24 text

team-sized architecture • νʔϜΛ୯ʹಉ͡ϚωʔδϟʔΛ࣋ͭݸਓͷू·ΓͰ͸ͳ͘ɺಠࣗͷֶशɺ໨ඪɺϛογϣ ϯɺ͓Αͼ߹ཧతͳࣗ཯ੑΛ࣋ͭΤϯςΟςΟͷू·Γͱఆٛ • 7ʙ9໊ఔ౓ͷνʔϜΛ૊৫ͷجຊ୯Ґͱ͢Δ • νʔϜͷ੹೚ʹΑͬͯڥքΛ໌֬ʹ͢Δ • ૊৫ͷਐԽΛײ஌ͯ͠׆ಈΛमਖ਼͢Δ • νʔϜͷೝ஌ෛՙʢCogni&ve LoadʣͷΩϟύγςΟʹ߹ΘͤͯνʔϜͷ੹೚Λ੍ݶ͢Δ • 4ͭͷνʔϜλΠϓ • 3ͭͷ૬ޓ࡞༻λΠϓ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 24

Slide 25

Slide 25 text

team-sized architecture: 4ͭͷνʔϜλΠϓ Stream-aligned νʔϜ͸૊৫ͷओཁͳνʔϜλΠϓͰ͋ΓɺଞͷνʔϜ͸ɺStream-aligned νʔϜͷෛ୲Λܰݮ͢Δ͜ͱͰ͢ɻ • Stream-aligned νʔϜ • ୯Ұͷ੡඼·ͨ͸αʔϏεɺ୯Ұͷػೳηοτɺ୯ҰͷϢʔβʔδϟʔχʔɺ·ͨ͸୯ҰͷϢʔβʔϖϧιφͷ࡞ۀϑϩʔ Λ୲౰͢Δ • Enabling νʔϜ • υϝΠϯ஌͕ࣝඞཁͳ࡞ۀϑϩʔͷࢧԉΛ୲౰͢Δ • Complicated-subsystem νʔϜ • ෳࡶͳαϒγεςϜͷࢧԉΛ୲౰͢Δ • Pla9orm νʔϜ • ηϧϑαʔϏεAPIɺπʔϧɺαʔϏεɺ஌ࣝɺαϙʔτͷج൫Λ୲౰͢Δ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 25

Slide 26

Slide 26 text

team-sized architecture: 3ͭͷ૬ޓ࡞༻ͷλΠϓ • Collabora(on • ผͷνʔϜͱۓີʹ࿈ܞ͢Δ • X-as-a-Service • ࠷খݶͷίϥϘϨʔγϣϯͰԿ͔Λফඅ·ͨ͸ఏڙ͢Δ • Facilita(ng • ଞͷνʔϜΛࢧԉʢ·ͨ͸ࢧԉʣͯ͠ো֐Λղফ͢Δ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 26

Slide 27

Slide 27 text

team-sized architetcture: ࣮૷ྫ 4 4 Team Topology, Ma.hew SkeltonɾManuel Pais, 2019 ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 27

Slide 28

Slide 28 text

team-sized architecture ͷݒ೦఺ • ҎԼͷΑ͏ͳݒ೦͕ڍ͛ΒΕΔ • ೝ஌ෛՙͷ૝ఆ͕ࣄલʹ૝ఆ͠ʹ͍͘ • ೝ஌ෛՙʹରͯ͠े෼ͳਓతϦιʔεͷڙڅ͕Ͱ͖ͳ͍৔߹ ʹࠞཚ͕ൃੜ͢Δ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 28

Slide 29

Slide 29 text

ΤϯδχΞϦϯά૊৫ΞʔΩςΫνϟઃܭͷجຊࢥ૝ • νʔϜΛ࠷খͷ୯Ґͱͯ͠ઃܭ͢Δ • υϝΠϯ΍αʔϏεͳͲɺϏδωεϩδοΫΛى఺ͱͨ͠ൣғ ΛνʔϜͷ੹೚ൣғͱҰகͤ͞Δ • ͜ΕʹΑΓػೳαΠϩΛආ͚Δ • ωοτϫʔΫ௨৴ͱಉ༷ʹ૊৫ؒͷίϛϡχέʔγϣϯܦ࿏ͷ ଳҬΛҙࣝ͢Δ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 29

Slide 30

Slide 30 text

ΤϯδχΞϦϯά૊৫ΞʔΩςΫνϟͷઃܭͷཁ఺ νʔϜ୯ҐͰۀ຿Λߦ͏͜ͱΛલఏʹͨ͠৔߹ɺҎԼͷཁ఺͕૊৫ΞʔΩςΫνϟઃܭʹ໾ཱͭ 1. ૊৫ʢਓͷ׆ಈʣͷڥքʢൣғʣΛ۩ମԽ͢Δ • 3ͭͷڥքΛઃܭ͢Δ • νʔϜͷڥքʢ੹೚ൣғʣ • υϝΠϯͷڥք • νʔϜؒɺݸਓؒͷڥքΛ۩ମԽ͢Δ 2. ૊৫ؒͷ૬ޓ࡞༻ͷྲྀΕΛܾΊΔ͜ͱ • ૊৫ؒ͝ͱʹظ଴͢Δ૬ޓ࡞༻ͷγʔϯ΍ස౓Λఆٛ͢Δ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 30

Slide 31

Slide 31 text

ิ଍: ࣮ڥքͷௐ੔ ֤ڥքͷ࣮ڥք͸ҎԼͷΑ͏ͳઃఆʹΑͬͯߦΘΕɺνʔϜɾݸਓͷ׆ಈʹ େ͖ͳӨڹΛ༩͑ΔͨΊɺߟྀʹ͍ΕΔͱΑ͍ • ΦϑΟεϨΠΞ΢τ • σδλϧεϖʔε • νϟοτͷνϟϯωϧ • Wiki • ϒϩά ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 31

Slide 32

Slide 32 text

·ͱΊ • Ұൠతͳ૊৫ߏ଄ͱओཁͳιϑτ΢ΣΞ։ൃख๏ͷௐࠪΛ͠· ͨ͠ • ૊৫ઃܭΛߦ͏ࡍʹॏཁͱͳΔجຊతͳࢥ૝ͱઃܭͷཁ఺Λ· ͱΊ·ͨ͠ ୈ 5 ճ Web System Architecture ݚڀձ (2019/09/28) | Takamura Narimichi (@nari_ex) 32