Slide 1

Slide 1 text

͘͞ΒΠϯλʔωοτגࣜձࣾ (C) Copyright 1996-2019 SAKURA Internet Inc ͘͞ΒΠϯλʔωοτݚڀॴ Ϋϥ΢υɾWebϗεςΟϯάαʔϏεͷ ηΩϡϦςΟͱӡ༻ٕज़ͷݚڀ 2019/03/03 ্ڃݚڀһ দຊ ྄հ ηΩϡϦςΟɾϛχΩϟϯϓ2019@෱Ԭ

Slide 2

Slide 2 text

2 ɾ͘͞ΒΠϯλʔωοτݚڀॴ ্ڃݚڀһ ɾגࣜձࣾGrooves Forkewll ٕज़ސ໰ ɾϖύϘݚڀॴ ٬һݚڀһ ݚڀސ໰ ɾηΩϡϦςΟɾΩϟϯϓߨࢣ ɾ৘ใॲཧֶձ Πϯλʔωοτͱӡ༻ٕज़ݚڀձ ֤छҕһ ɾژ౎େֶത࢜ʢ৘ใֶʣ দຊ྄հ / ·ͭ΋ͱΓʔ / @matsumotory

Slide 3

Slide 3 text

1. ͸͡Ίʹ 2. WebαʔόͷηΩϡϦςΟͱӡ༻ٕज़ͷഎܠ 3. WebαʔόͱWebϗεςΟϯάγεςϜͷجૅ஌ࣝ 4. ηΩϡϦςΟͱϦιʔε෼཭ 5. ηΩϡϦςΟͱੑೳ 3 ໨࣍

Slide 4

Slide 4 text

6. ηΩϡϦςΟͱӡ༻ٕज़ 7. େن໛WebαʔόͷTLSূ໌ॻ؅ཧ 8. ͓ΘΓʹ ext. ߃ৗੑͷ͋ΔγεςϜΞʔΩςΫνϟʹؔ͢Δݚڀಈ޲ 4 ໨࣍

Slide 5

Slide 5 text

1. ͸͡Ίʹ

Slide 6

Slide 6 text

ߨٛ֓ཁ

Slide 7

Slide 7 text

• େن໛Ϋϥ΢υɾϗεςΟϯάαʔϏεͷઃܭʹج͍࣮ͮͯફతͳηΩϡϦ ςΟɾԾ૝ԽɾϦιʔε؅ཧɾӡ༻ٕज़ΛֶͿ͜ͱ͕Ͱ͖Δ • ౰֘෼໺Λઐ໳ͱͨ͠ΤϯδχΞͰ͋ΓݚڀऀͰ΋͋Δদຊ͕ɺؔ࿈ݚڀ΍ج ૅ֓೦Λ௨ͯؔ͡࿈ٕज़Λ੔ཧͯ͠ղઆ͠ɺ࠷৽ͷݚڀಈ޲ʹ͍ͭͯ΋ड़΂Δ • ࣮ࡍͷαʔϏε΍ݱ৔ʹ͍ۙ࠷৽ͷݚڀಈ޲Λ஌Δ͜ͱͰɺཧ࿦ͱ࣮ફΛཱ྆ ͠ɺࡢࠓͷഎܠΛ൓өͨ͠ମܥతͰ࣮ޮੑͷ͋Δ஌ࣝΛֶͿ͜ͱ͕Ͱ͖Δ • ಛʹOS΍ϛυϧ΢ΣΞʹؔ͢Δ஌ࣝΛशಘ͢ΔͨΊʹେن໛ϗεςΟϯά αʔϏεͷΞʔΩςΫνϟʹண໨͢Δ 7 ࣮ફతͳηΩϡϦςΟͱӡ༻ٕज़ΛֶͿ

Slide 8

Slide 8 text

• ӡ༻ٕज़΍౰֘෼໺ʹ͓͍ͯɼ޿ൣғʹ౉ͬͨجૅ஌ࣝͷத͔Βٕज़ॻ੶౳Ͱ ॏཁͳϙΠϯτ΍࣮ફతͳྖҬΛબ୒ͯ͠ूதతʹֶश͢Δ͜ͱ͸೉͍͠ • ຊߨٛΛ௨ͯ͡ʮ࣮ࡍʹαʔϏε΍γεςϜΛӡ༻͍ͯ͠ͳ͍͔Βࣗ৴Λ࣋ͯ ͳ͍ʯͱ͍͏ؾ࣋ͪΛͰ͖Δ͚ͩݮΒ͢Α͏ʹ͍ͨ͠ • ຊߨ͔ٛΒ࣮ફతͳٕज़ͱඞཁʹԠͨ͡جૅ஌ࣝͷֶशʹΑͬͯɺຊ͔ΒֶͿ ཧ࿦ͱɼݱ৔Ͱ஌Δ࣮ફతͳ஌ࣝΛͰ͖Δཱ͚ͩ྆ͯ͠शಘͰ͖ΔΑ͏ʹ͢Δ • ຊߨٛޙʹෆ҆ͳ࣮͘ફతͳྖҬΛ࣠ʹɺࣗ৴Λ΋ͬͯߋͳΔਂ͍஌ࣝ΍෯޿ ͍ཧ࿦ͷशಘʹؾ࣋ͪΑ͘ઐ೦Ͱ͖ΔΑ͏ʹͳΔͱ޾͍Ͱ͋Δ 8 ࢀߟॻ΍ٕज़ॻ੶Ͱ͸ֶͼʹ͍͘ྖҬΛղઆ

Slide 9

Slide 9 text

• দຊͷത࢜࿦จ • WebαʔόͷߴूੵϚϧνςφϯτΞʔΩςΫνϟʹؔ͢Δݚڀ • ࿦จʹམͱ͠ࠐΉ͜ͱͰɺਖ਼͠͞ͷٞ࿦͕࣌ͱͯ͠ෆ໌ྎʹͳΔ։ൃɾӡ༻ ٕज़Λਖ਼͘͠ɺఆྔత͔ͭܧଓతʹֶձͱݕূՄೳʹͳΔ • ࿦จΛಡΊ͹ݕূՄೳͳঢ়ଶʹݴޠԽ͢Δ͜ͱ͕ඇৗʹॏཁ • ݴޠԽͱ͍͏ํ๏࿦ʹΑͬͯ޻ֶ͸ൃల͖ͯͨ͠ͱ΋͍͑Δ • ʮӡ༻ʯͱ͍͏ݴ༿Λ۩ମԽ͠ਖ਼͠͞ͱ޿͕ΓΛݕূ͠վળ͠ଓ͚Δ 9 ։ൃɾӡ༻ٕज़͸ݚڀʹͳΔɿݴޠԽͷॏཁੑ

Slide 10

Slide 10 text

ٕज़ͷݴޠԽΛ৴པ͠׆༻ͨ͠ݕূͱվળͷαΠΫϧ 10 ݕূલͷ։ൃӡ༻ٕज़ w ݕূ͕ᐆດͳঢ়ଶ w ಛఆ؀ڥͰͷᐆດͳఆੑධՁ w ಛఆ؀ڥґଘͰมԽ΍޿͕Γʹऑ͍ w ίετʹରͯ͠ͷޮՌ͕ݟ͑ͣਖ਼͠͞ ΋ෆ໌ྎ ࿦จԽ w ਖ਼͘͠ݕূՄೳͳঢ়ଶ΁ w ៛ີͰਖ਼֬ͳݴޠԽ͕ඞਢ w લఏͷҰகɾαʔϕΠɾఆྔධ Ձɾ༗ޮੑ ֶձʹΑΔݕূ w ҉໧ͷલఏΛ࣋ͨͳ͍ୈࡾऀػؔ ʹΑͬͯݕূͱϑΟʔυόοΫ w ࠪಡऀʹΑΔࠪಡ݁Ռ΋࿦จͱಉ ༷Ҏ্ͷݴޠԽ͕લఏ w ࿦จࣥචऀʹΑͬͯݕূ ݕূޙͷ։ൃӡ༻ٕज़ w ਖ਼͠͞ͱ޿͕Γ͕ݕূࡁΈ w ීวԽɾந৅Խ͕ਐΜͩ૊Έ ߹Θͤ΍͍ٕ͢ज़΁ w มԽʹڧ͘ਐԽͤ͞΍͍ٕ͢ ज़΁ ٕज़ͷݴޠԽʹج͍ͮͯ Կ౓΋ݕূͱվળΛճ͢ τοϓΧϯϑΝϨϯεͷΑ͏ͳ ੈքج४ͰͷϨϕϧͷߴ͍ݕূ Ͱ͋Δ΄͏͕ͳ͓ྑ͍ ࣗ෼͚ͨͪͩͰ৽ٕज़Λݕূ͢ Δͷ͸Կ΋ແ͍େւʹ์Γग़͞ Εͯ৽छͷڕΛ୳͢Α͏ͳ΋ͷ ݴޠԽ ٕज़Խ ٕज़ͷݕূՄೳͳݴޠԽ͸܇࿅ ͕ඞཁ

Slide 11

Slide 11 text

• ։ൃӡ༻ٕज़΍γεςϜ։ൃͷ৽نੑɾ༗ޮੑɾ৴པੑͷࣔ͠ํ΋஌Δ • ٕज़ͷ࿦จԽͱֶձൃදͷαΠΫϧΛճ͠ͳ͕Βٕज़ΛҭͯΔํ๏Λ஌Δ • ੈʹଘࡏ͠ͳ͍ٕज़Ͱ͋ͬͯ΋ࣗΒಓΛ੾Γ։͖ղܾ͢Δࣗ৴Λ࣋ͭ • ղܾ͠ଓ͚ΔͨΊʹ΋ɺֶज़ͱຽؒͱͰ্खʹ࿈ܞٕͯ͠ज़ΛҭͯΔ • ৽ٕज़ͷਖ਼͠͞ͱ޿͕ΓΛੈքج४Ͱݕূ͠ීวతͳٕज़ʹҭ͍ͯͯ͘ • ͦͷͨΊʹ΋࿦จͱτοϓΧϯϑΝϨϯεͷΑ͏ͳࠃࡍձٞʹ௅ઓ͢Δ • ීวతͳٕज़͸૊Έ߹ΘͤʹΑͬͯมԽʹڧ͘ਐԽͤ͞΍͍͢ 11 ຊߨٛΛ௨ͯ͜͡ͷ෼໺ͷݚڀ։ൃͷํ๏࿦΋஌Δ

Slide 12

Slide 12 text

• ։ൃɾӡ༻ٕज़ΛݴޠԽ͠ମܥԽͯ͠੔ཧ͢Δ͜ͱͰ౔୆͕Ͱ͖Δ • ᐆດʹ͍ٕͯͨ͠ज़ྖҬΛ࠶౓ݕ౼͢Δख͕ؒඇৗʹগͳ͘ͳΔ • ͦͷ౔୆ͷ্ʹཱͭ͜ͱͰɼ৽ͨͳྖҬ΁ͷࢹ࠲͕ߴ͘ͳΔ • ୔ࢁͷ੔ཧ͞Εͨ৘ใ͔Βɼ͋Δ࣌૑ൃతʹݟ͑ͳ͔ͬͨΞΠσΞ͕ੜ·ΕΔ • ͦͷΞΠσΞ͕࣭ͱͳΔ 12 ྔ͔Β࣭΁

Slide 13

Slide 13 text

ߨٛͷਐΊํ

Slide 14

Slide 14 text

1. ͸͡Ίʹ 2. WebαʔόͷηΩϡϦςΟͱӡ༻ٕज़ͷഎܠ 3. WebαʔόͱWebϗεςΟϯάγεςϜͷجૅ஌ࣝ 4. ηΩϡϦςΟͱϦιʔε෼཭ 5. ηΩϡϦςΟͱੑೳ 14 ߨٛͷྲྀΕ

Slide 15

Slide 15 text

6. ηΩϡϦςΟͱӡ༻ٕज़ 7. େن໛WebαʔόͷTLSূ໌ॻ؅ཧ 8. ͓ΘΓʹ ext. ߃ৗੑͷ͋ΔγεςϜΞʔΩςΫνϟʹؔ͢Δݚڀಈ޲ 15 ໨࣍ ֤ষͰ͸ՄೳͳݶΓ࠷৽ͷݚڀಈ޲ΛؚΊͯݱ࣌఺ ೥ ͷ࠷৽ٕज़Λ঺հ

Slide 16

Slide 16 text

ࣗݾ঺հ

Slide 17

Slide 17 text

• ݚڀ։ൃྖҬɿΠϯλʔωοταʔϏεͷج൫ٕज़෼໺ • OSɾϛυϧ΢ΣΞɾγεςϜΞʔΩςΫνϟɾγεςϜϓϩάϥϛϯά • ӡ༻ٕज़ɾϦιʔε؅ཧɾηΩϡϦςΟɾύϑΥʔϚϯεɾ෼ࢄ • ΤϯδχΞ͕ѻ͍΍͍͢γεςϜιϑτ΢ΣΞͷ࣮૷ • ϓϩμΫτԽΛڧ͘ҙ࣮ࣝͨ͠ޮੑͷߴ͍ݚڀ։ൃͷࠃࡍԽʹऔΓ૊Ή • ژ౎େֶେֶӃ ৘ใֶݚڀՊ ത࢜࿦จ • WebαʔόͷߴूੵϚϧνςφϯτΞʔΩςΫνϟʹؔ͢Δݚڀ 17 দຊ྄հ / ·ͭ΋ͱΓʔ / @matsumotory

Slide 18

Slide 18 text

18

Slide 19

Slide 19 text

19

Slide 20

Slide 20 text

• ~2008: τϥϑΟοΫಛ௃ྔͷ૬ؔؔ܎͔Βͷҟৗݕ஌ʢଔ࿦ʣ • 2008~2012: ϗεςΟϯάαʔϏεձࣾͰΠϯϑϥӡ༻ɾӡ༻ઃܭɾ։ൃ • 2012~2015: WebαʔόͷߴूੵϚϧνςφϯτΞʔΩςΫνϟͷݚڀʢത࿦ʣ • 2015~2016: ࣄۀΛࠩผԽ͢Δٕज़։ൃɾPM/POɾاըɾαʔϏε։ൃӡ༻ • 2016~: ݚڀ։ൃɾڞಉݚڀɾݚڀऀҭ੒ɾݚڀ࣮੷ڧԽɾ׭ֶͱͷ࿈ܞʹઐ೦ • 2018~: ٕज़ސ໰ɾݚڀސ໰ʹΑΔΤϯδχΞɾݚڀऀͷ੒௕ࢧԉͳͲ 20 ͜Ε·Ͱͷུྺ

Slide 21

Slide 21 text

• ίϯϐϡʔλ΍Πϯλʔωοτʹؔ͢Δٕज़͸ൃల͕ͨ͠… • ࠓ΋೔ৗతʹ৮ΕΔγεςϜ͸༷ʑͳোนʹຬͪᷓΕ͍ͯΔ • োน(ΰπΰπ)ͷऔΓআ͔ΕͨະདྷͷγεςϜΛ࣮ݱ͍ͨ͠ • ͳΊΒ͔ͳγεςϜ • ௒ݸମܕσʔληϯλʔ 21 দຊͷݚڀςʔϚ: ίϯϐϡʔλͷൃలͱোน

Slide 22

Slide 22 text

• Ϟοτʔ • ໘ന͍ͱࢥ͏ςʔϚʹͲ͠Ͳ͠औΓ૊ΜͰ͍͘ • ੱީతʹݚڀ։ൃΛઌճΓ͍ͯ͘͠ • ʮ͘͞ΒΒ͠͞ʯ͕͋Ε͹ԿͰ΋OK • ίϯηϓτɾϏδϣϯ • ௒ݸମܕσʔληϯλʔ͓ΑͼOS 22 ͘͞ΒΠϯλʔωοτݚڀॴ

Slide 23

Slide 23 text

1. ݱࡏ͸σʔληϯλʔʹڊେͳίϯϐϡʔςΟϯάϦιʔε͕ଘࡏ͍ͯ͠·͕͢ɺ ࠓޙ͸ϨΠςϯγʗηΩϡϦςΟʗίετ౳ͷཁ͔݅Βɺ͋ΒΏΔ৔ॴ΍ࣾձɺ ૊৫ʹίϯϐϡʔςΟϯάϦιʔε༹͕͚ࠐΜͰ͍͘͜ͱʹͳΓ·͢ɻ 2. ͦΕΒ෼ࢄͨ͠ίϯϐϡʔςΟϯάϦιʔε͸ɺ୯ಠͰίϯϐϡʔςΟϯάύϫʔ Λఏڙ͢Δʹཹ·Βͣɺͦͷ৔ॴ΍ࣾձͷཁٻʹԠͯ͡ɺࣗ཯తʹɺ෼ࢄ͋Δ͍ ͸༗ػతʹ݁߹͠ɺݱ৔ɾΫϥ΢υͦΕͧΕ͕ॎԣʹ݁ͼ͍ͭͨϋΠϒϦουߏ ଄Λ࠾ΔΑ͏ʹػೳ͠·͢ɻ 3. ͜ͷΑ͏ͳγεςϜʹΑΓ࣮ݱ͞ΕΔ΋ͷ͸ɺਓʑͷ਎ۙʹଘࡏ͠ɺϦΞϧλΠϜ ͔ͭΠϯςϦδΣϯεʹϢʔβΛࢧ͑ͳ͕Βɺ͔͠͠ಉ࣌ʹόοΫΤϯυଆ͕༗ ػతʹ݁߹͢Δ͜ͱʹΑΓɺ͔ͭͯͳ͍ϚγϯύϫʔͱϦιʔεྔΛಈһ͢Δ͜ ͱͰݱ৔࠷ద͔ͭશମ࠷దΛ΋࣮ݱ͢ΔSuper Organized WorldͰ͢ɻ 23 ௒ݸମܕσʔληϯλʔ͓ΑͼOS

Slide 24

Slide 24 text

લఏɿ࣮ݱ͍ͨ͠ϓϩμΫτ͕ٕज़త՝୊ʹΑΓ࣮ݱͰ͖ͳ͍ঢ়گΛແ͘͢ • ࣄۀΛࠩผԽ͢Δٕज़ͱͦͷબ୒ࢶ΍ଟ༷ੑΛ༻ҙ͢ΔͨΊʹ࿦จࣥච • ۀքͷٕज़Λ٬؍తʹධՁͯ͠੔ཧ͠ɺମܥతͳਖ਼͠͞ΛੵΈॏͶΔ • ۀքͷٕज़ΛͰ͖Δ͚ͩந৅Խ͠ɺ࠶ར༻Մೳͳ޿͕ΓΛҡ࣋͢Δ • ۀքͷٕज़Λάϩʔόϧͳج४ͰܧଓతʹධՁ͠ɺٕज़Λεέʔϧͤ͞Δ → ࿦จ͑͞ॻ͚͹͜ͷ࿮૊͕ར༻Մೳ (OSS͸࢖ΘΕͳ͍ͱ্هվળ͕೉͍͠) → ࿦จ΍ίʔυɼΞ΢τϓοτΛखஈʹձࣾ΍ࣾձʹՁ஋Λؐݩ͍ͯ͘͠ 24 اۀʹ͓͚Δݚڀ։ൃͱ࿦จԽʹΑΔීวతͳߩݙ

Slide 25

Slide 25 text

• ਓؒͷϓϩμΫτ΁ͷൃ૝Λࢧ͑ΒΕΔΠϯλʔωοταʔϏεج൫͕ඞཁ • ͜Ε·Ͱ͸֤छྖҬΛਓखͰΧόʔ͢Δ͜ͱ͕ଟ͔ͬͨ • ੑೳɾηΩϡϦςΟɾϦιʔε؅ཧɾӡ༻ٕज़ͳͲ • ΠϯλʔωοταʔϏεج൫ΛػցͰࢧ͑ࣗಈԽ͠αʔϏεͷݶքΛ௒͑Δ • ਓؒͷൃ૝ͷݶքͱج൫ͷݶքͱͷউෛͷੈքͱ͍͑Δ 25 ج൫ٕज़ͷݶք͸αʔϏεͷݶք

Slide 26

Slide 26 text

ਓؒͷൃ૝ vs ج൫ٕज़(ػց)ͱদຊͷݚڀ 26 ج൫ٕज़ ػց ϓϩμΫτ ਓؒͷൃ૝ ਓͷମྗɾਫ਼ਆͷݶք ਓͷମྗɾਫ਼ਆͷݶք ਓྗͰࢧ͑ଓ͚Δ ਓྗͰ޿͛ଓ͚Δ ਓྗͰࢧ͑ଓ͚Δ ϓϩμΫτͷݶքͷ෯ ج൫ٕज़ ػց ϓϩμΫτ ਓؒͷൃ૝ ػցͰࢧ͑ଓ͚Δ ϓϩμΫτͷݶքͷ෯ • ॎ࣠͸ϓϩμΫτ։ൃɾӡ༻ͷίετͱ΋ݴ͑Δ • ج൫ٕज़ͷݶքΛ௒͑Δ΂͘ਓͰΧόʔ͍ͯ͠Δ • ॎ࣠ͷίετΛ୹͘ɺԣ࣠ͷݶքͷ෯Λ޿͛Δͨ Ίͷݚڀ։ൃΛߦ͍ͬͯΔ দຊͷݚڀ

Slide 27

Slide 27 text

• WebαʔϏεར༻ऀͷϢʔβʔମײ(User Sensation)ͷվળ • WebαʔϏεར༻ऀͷແҙࣝԼʹ͓͚Δշదͳײ֮ͷఏڙ • ౰ͨΓલʹී௨ʹҧ࿨ײͳ͘࢖͍ଓ͚ΒΕΔ͜ͱͷշద͞ • WebαʔϏεఏڙଆͷٕज़ऀମײ(Engineer Sensation)ͷվળ • ౰ͨΓલʹγεςϜͷ҆ఆੑΛอͪɺਓͷڧ੍հೖΛ௿ݮ 27 দຊͷݚڀςʔϚ

Slide 28

Slide 28 text

2. Ϋϥ΢υɾWebϗεςΟϯάٕज़ͷ ηΩϡϦςΟͱӡ༻ٕज़ͷഎܠ

Slide 29

Slide 29 text

ηΫγϣϯͷ֓ཁ

Slide 30

Slide 30 text

1. Ϋϥ΢υαʔϏεͱWebϗεςΟϯάͷ֓ཁ 2. WebαʔόͷϚϧνςφϯτํࣜ 3. ηΩϡϦςΟͱϦιʔε෼཭ͱӡ༻ٕज़ͷॏཁੑ 30 Ϋϥ΢υɾϗεςΟϯάͷηΩϡϦςΟͱӡ༻ٕज़

Slide 31

Slide 31 text

Ϋϥ΢υͱWebϗεςΟϯάͷ֓ཁ

Slide 32

Slide 32 text

• Ϋϥ΢υαʔϏε΍WebϗεςΟϯάαʔϏεͷීٴͱݸਓͷར༻ • WebϗεςΟϯάαʔϏεʢϨϯλϧαʔόʣͷ௿Ձ֨Խͱ඼࣭ͷڝ૪ • Ϋϥ΢υαʔϏεͷࣗ༝౓ͷߴ͞ͱITϦςϥγʔͷߴ·Γ • ϗεςΟϯάαʔϏεΑΓ΋ࣗ༝౓ͷߴ͍αʔϏε΁ͷཁٻ • ͱ͸͍͑ࣗ༝౓͕ߴ͘ͳΔͱݸਓͰͷӡ༻อक͕େม • ηΩϡϦςΟΠϯγσϯτͳͲʹ΋ͭͳ͕͍ͬͯ͘ 32 Ϋϥ΢υɾWebϗεςΟϯάͷݸਓར༻

Slide 33

Slide 33 text

• αʔϏεͷ௿Ձ֨Խͱ඼࣭ͷڝ૪ • γεςϜͷج൫ٕज़΍ӡ༻ٕज़ͷݚڀ։ൃ΍҆ఆԽ͕՝୊ • ࣗ༝౓ͱར༻ऀʹखؒΛ͔͚ͳ͍αʔϏεͷཱ͕྆໨ඪ • WebαʔόͷߴूੵϚϧνςφϯτํࣜʹ஫໨ • ηΩϡϦςΟͷ୲อͱऩ༰ϗετͷओཁޮ཰޲্͕ॏཁ • ௿Ձ֨ͱӡ༻୅ߦΛ࣮ݱ҆͠ఆੑͷ͋ΔαʔϏεΛ໨ࢦ͢ • ୅දతͳαʔϏεͱͯ͠ߴूੵWebϗεςΟϯάαʔϏε 33 Ϋϥ΢υɾWebϗεςΟϯάࣄۀऀͱͯ͠

Slide 34

Slide 34 text

• ֤ϢʔβྖҬʹࣗ༝ʹར༻ऀ͕WebίϯςϯπΛ഑ஔՄೳ • ϗεςΟϯάαʔϏεࣄۀऀ͸OS΍ϛυϧ΢ΣΞͷج൫ٕज़ͷཧղ͕ඞཁ • Ϛϧνςφϯτ؀ڥʹ͓͚ΔηΩϡϦςΟ΍҆ఆੑͷ୲อ • Ϋϥ΢υαʔϏε΄Ͳࣗ༝౓͸ߴ͘ͳ͍ • ϚωʔδυΫϥ΢υͱݺ͹ΕΔΫϥ΢υαʔϏεͱϗεςΟϯάͷྑ͍ͱ͜Ζ Λཱ྆͢ΔαʔϏε΋ϦϦʔε͞Ε࢝Ί͍ͯΔ • ๛෋ͳϛυϧ΢ΣΞ΍ݴޠͷબ୒ɾϦιʔεͷεέʔϦϯάͳͲ 34 WebϗεςΟϯάαʔϏεͷ֓ཁͱํ޲ੑ

Slide 35

Slide 35 text

• Ϋϥ΢υαʔϏε΍ࣗ༝౓ͷߴ͍IaaSʹඞཁͳӡ༻ٕज़΍ηΩϡϦςΟΛαʔ Ϗεͱͯ͠ఏڙ͍ͯ͠ΔWebϗεςΟϯάαʔϏεͷΞʔΩςΫνϟΛ࣠ʹ࣮ ફతͳηΩϡϦςΟͱԾ૝ԽɺϦιʔε؅ཧ΍ӡ༻ٕज़ʹ͍ͭͯड़΂Δ • Ϋϥ΢υαʔϏεΑΓ΋ΑΓOS΍ϛυϧ΢ΣΞͷιϑτ΢ΣΞ։ൃӡ༻ʹۙ ͍ϗεςΟϯάαʔϏεͷٕज़Λৄࡉʹ஌Δ͜ͱͰશྖҬʹ׆༻Ͱ͖Δମܥత ͳ஌ࣝΛ࣮ફతͳٕज़৘ใ͔Βशಘ͢Δ • ಛʹWebαʔόͷϚϧνςφϯτํࣜʹண໨ͯؔ͠࿈ٕज़ʹ͍ͭͯड़΂Δ 35 WebϗεςΟϯάαʔϏε͔ΒֶͿٕज़͸໘ന͍

Slide 36

Slide 36 text

WebαʔόͷߴूੵϚϧνςφϯτํࣜ

Slide 37

Slide 37 text

• ௿Ձ֨WebϗεςΟϯάαʔϏεͰඞཁͱ͞ΕΔํࣜʢΞʔΩςΫνϟʣ • ߴूੵͳϚϧνςφϯτํࣜΛ໨ࢦ͢͜ͱͰ௿Ձ֨ԽΛ࣮ݱ • WebαʔόͷઃఆΛऩ༰ϗετ਺ͷ૿Ճʹґଘ͠ͳ͍Α͏ʹ͢Δ • ϋʔυ΢ΣΞίετͷߋͳΔޮ཰Խͱӡ༻ޮ཰ͷվળΛ໨ࢦ͢ • ߴूੵϚϧνςφϯτํࣜͷ৴པੑʹॏཁͳϙΠϯτ • ηΩϡϦςΟɾϦιʔε෼཭ɾӡ༻ٕज़ͷվળɾେྔͷυϝΠϯͷѻ͍ 37 WebαʔόͷߴूੵϚϧνςφϯτํࣜ [8] <>দຊ྄հɼ8FCαʔόͷߴूੵϚϧνςφϯτΞʔΩςΫνϟʹؔ͢Δݚڀɼതֶ࢜Ґ࿦จIUUQT SFQPTJUPSZLVMJCLZPUPVBDKQETQBDFIBOEMF ژ౎େֶɼ.BZ

Slide 38

Slide 38 text

• ηΩϡϦςΟ • ӡ༻ٕज़͕௿ݮ͗ͯ͢͠΋ɺੑೳ͕௿Լ͗ͯ͢͠΋͍͚ͳ͍ • Ϧιʔε؅ཧ • ςφϯτؒͰϦιʔεׯবʹΑͬͯϢʔβମݧ͕௿Լͯ͠͸͍͚ͳ͍ • ӡ༻ٕज़ • Ϧιʔεׯবͷӡ༻ίετ͕ߴ·Γ݁Ռతʹίετ͕ߴ͘ͳͬͯ͸͍͚ͳ͍ • ͦͷଞϛυϧ΢ΣΞͷฏқͳ֦ு΍େྔTLSূ໌ॻ΍υϝΠϯͷ؅ཧͳͲ 38 ߴूੵϚϧνςφϯτํࣜͷॏཁͳ؍఺

Slide 39

Slide 39 text

• ϓϩηεͷηΩϡϦςΟ΍ੑೳɺϦιʔε؅ཧ΍ӡ༻ٕज़ͷๅݿ • OS΍ϛυϧ΢ΣΞɺγεςϜϓϩάϥϛϯάͷ஌͕ࣝඞཁ • WebΞϓϦέʔγϣϯΑΓ΋ൺֱత௿ϨΠϠʔͷ஌͕ࣝඞཁ • γεςϜίʔϧͷ؍఺ͰੑೳͷධՁ΍νϡʔχϯάΛߦ͏͜ͱ΋͋Δ • ࣮ફతͳ؍఺͔ΒLinuxͷηΩϡϦςΟ΍ӡ༻ٕज़ΛֶͿʹ͸౎߹͕ྑ͍ 39 WebαʔόͷߴूੵϚϧνςφϯτํࣜͷٕज़

Slide 40

Slide 40 text

ηΩϡϦςΟͱϦιʔε෼཭ͱӡ༻ٕज़

Slide 41

Slide 41 text

• 1୆ͷαʔόʹ਺ສҎ্ͷϗετΛऩ༰͢ΔϨϕϧΛ૝ఆ • ऩ༰ϗετ਺ʹґଘͯ͠Ϧιʔε࢖༻ྔͷ૿Ճ΍ઃఆมߋʹ൐͏࠶ىಈ͕ۃ ୺ʹ૿Ճ͠ͳ͍Α͏ʹ͢΂͖ • αʔϏεར༻ऀ͕֤ϗετʹࣗ༝ʹ༷ʑͳWebίϯςϯπΛ഑ஔՄೳ • ֤ʑͷϗετʹର͢ΔΞΫηε਺ͷ༧ଌ͸ࠔ೉ • ಛఆͷϗετʹର͢ΔಥൃతͳΞΫηε͕αʔόશମʹӨڹΛ༩͑Δ͜ͱ΋ 41 WebαʔόͷߴूੵϚϧνςφϯτํࣜͷ՝୊

Slide 42

Slide 42 text

• ୯Ұͷαʔόϓϩηε܈ͰେྔͷϗετΛԾ૝తʹॲཧ͢Δ • ୯Ұͷαʔόϓϩηε܈ͱ͸αʔόͷ࣮૷ʹΑͬͯ਺े͔Β਺ඦϓϩηεى ಈʢॴҦmasterϓϩηεͱෳ਺ଘࡏ͢Δworkerϓϩηε܈ʣ • ऩ༰ϗετ਺ʹґଘͯ͠ϓϩηε਺Λ૿΍͢ඞཁ͸ͳ͍ • ಉҰͷઃఆͷ··WebαʔόΛෳ਺୆ʹ૿΍͠ɺσʔλΛετϨʔδ౳Ͱ ·ͱΊΔ͜ͱͰεέʔϧΞ΢τܕͷෛՙ෼ࢄ΋Մೳ 42 ՝୊Λղܾ͢Δํ਑

Slide 43

Slide 43 text

• ϗετͷηΩϡϦςΟΛHTTPϦΫΤετ୯ҐͰ୲อ • ֤ϗετʹର͢ΔϦΫΤετΛ୯Ұͷϓϩηε܈Ͱڞ༗ͯ͠ॲཧ͢ΔͨΊ • ϓϩηεͷػೳΛར༻ͯ͠ੑೳΛ࠷େԽ͢Δඞཁ͕͋Δ • ෳ਺ͷϗετؒͰੜ͡ΔϦιʔεڝ߹ͷ௿ݮ • ϗετؒͰϋʔυ΢ΣΞϦιʔε͕ڞ༗͞ΕΔͨΊ • ηΩϡϦςΟ΍Ϧιʔε؅ཧΛखؒΛ͔͚ͣʹ࣮ݱ͢Δ͔ • ج൫ٕज़ͰࣗಈԽ͢Δ͜ͱͰγεςϜͷӡ༻ɾอकͷίετΛ௿ݮ 43 ηΩϡϦςΟɾϦιʔε෼཭ɾӡ༻ٕज़ͷվળ

Slide 44

Slide 44 text

ηΫγϣϯͷ·ͱΊ

Slide 45

Slide 45 text

1. Ϋϥ΢υͱWebϗεςΟϯάͷ֓ཁ 2. WebαʔόͷϚϧνςφϯτํࣜ 3. ηΩϡϦςΟͱϦιʔε෼཭ͱӡ༻ٕज़ 45 Ϋϥ΢υɾϗεςΟϯάͷηΩϡϦςΟͱӡ༻ٕज़

Slide 46

Slide 46 text

3. WebαʔόͱWebϗεςΟϯάγεςϜͷ جૅ஌ࣝ

Slide 47

Slide 47 text

ηΫγϣϯͷ֓ཁ

Slide 48

Slide 48 text

1. Ϋϥ΢υαʔϏεͱϗεςΟϯάαʔϏε 2. Webαʔόʹؔ͢ΔԾ૝Խٕज़ͷ෼ྨ 3. Webαʔόʹ͓͚Δಈతίϯςϯπ 4. ୅දతͳWebαʔόͷΞʔΩςΫνϟ 48 WebαʔόͱWebϗεςΟϯάγεςϜͷجૅ஌ࣝ

Slide 49

Slide 49 text

Ϋϥ΢υαʔϏεͱϗεςΟϯάαʔϏε

Slide 50

Slide 50 text

• Ϋϥ΢υίϯϐϡʔςΟϯά[9] • ωοτϫʔΫ΍αʔόͱ͍ͬͨίϯϐϡʔλϦιʔεͷϓʔϧ͔Βඞཁͳ࣌ ʹඞཁͳྔ͚ͩΦϯσϚϯυʹར༻Մೳͱ͢ΔίϯϐϡʔςΟϯάϞσϧ • Ϋϥ΢υαʔϏε • Ϋϥ΢υίϯϐϡʔςΟϯάΛ֤छαʔϏεͱͯ͠ఏڙ͢ΔαʔϏε 50 Ϋϥ΢υαʔϏε <>1.FMM 5(SBODF 5IF/*45%FpOJUJPOPG$MPVE$PNQVUJOHz 64/BU`M*OTUPG4DJFODFBOE5FDIOPMPHZ IUUQDTSDOJTUHPWQVCMJDBUJPOTOJTUQVCT41QEG

Slide 51

Slide 51 text

• SaaS • ιϑτ΢ΣΞαʔϏεͷఏڙʢGoogle AppsͳͲʣ • PaaS • γεςϜ։ൃखஈ΍ϓϥοτϑΥʔϜػೳΛఏڙʢGAEͳͲʣ • IaaS • OS΍ϛυϧ΢ΣΞΛؚΊͨΠϯϑϥػೳͷఏڙʢAWSͳͲʣ 51 Ϋϥ΢υαʔϏεͷ୅දతͳ෼ྨ

Slide 52

Slide 52 text

• ෳ਺ͷϗετͰαʔόͷϦιʔεΛڞ༗ • ΦϯσϚϯυͳఏڙ͸͜Ε·Ͱ͸͋·ΓͰ͖͍ͯͳ͔ͬͨ • ࠷ۙͰ͸ΦϯσϚϯυͳػೳ΋ఏڙ͞Ε࢝Ί͍ͯΔ • ֤ϗετͷ؅ཧऀͷυϝΠϯʹରͯ͠HTTPαʔόػೳΛఏڙ͢ΔαʔϏε • ຊߨٛʹ͓͚Δϗετͱ͸ʁ • WebϗεςΟϯάαʔϏεʹ͓͍ͯɺυϝΠϯ໊ʢFQDN)ʹΑͬͯࣝผ͞ ΕɺରԠ͢ΔίϯςϯπΛ഑৴͢Δػೳ 52 WebϗεςΟϯάαʔϏε

Slide 53

Slide 53 text

WebαʔόͷԾ૝Խɾִ཭ٕज़ͷ෼ྨ

Slide 54

Slide 54 text

1. Xen΍VMware౳ͷԾ૝ϚγϯͰϗετΛ෼͚Δํ๏ 2. FreeBSD jail΍LXCɺOpenVZ౳ͷίϯςφܕԾ૝ԽͷΑ͏ʹϑΝΠϧγες Ϝ΍໊લۭؒΛૢ࡞͢ΔγεςϜίʔϧʹΑͬͯOS্ʹෳ਺ͷԾ૝తͳִ཭ ؀ڥΛ༻ҙ͠ϗετΛ෼͚Δํ๏ 3. IPΞυϨε΍ϙʔτ୯ҐͰWebίϯςϯπ͕഑ஔ͞Εͨෳ਺ͷϗετΛ෼཭ ֤͠ϗετʹݸผͷϓϩηεΛ༻ҙͯ͠ىಈͤ͞Δख๏ 4. ୯Ұͷαʔόϓϩηε܈Ͱෳ਺ͷϗετΛԾ૝ϗετํࣜʹΑΓѻ͏ख๏ 54 Ϋϥ΢υɾWebϗεςΟϯάͷϗετͷִ཭෼ྨ

Slide 55

Slide 55 text

• ϗετ୯ҐͰ(1)VMϞσϧɺ(2)ίϯςφϞσϧɺ(3)୯७ϓϩηεϞσϧͰ෼཭ • (1)͔Βॱʹִ཭Ϩϕϧ͕ߴ͘ίετ΍༻్ʹ߹Θܾͤͯఆ͢Δ • (2)ͷϞσϧͷయܕతͳߏ੒ 55 αʔόͷӡ༻໘΍ηΩϡϦςΟΛॏࢹͨ͠৔߹

Slide 56

Slide 56 text

• unshare(): IPCɺnetɺmountɺpidɺuserͳͲͷ໊લۭؒΛִ཭ • chroot(): rootσΟϨΫτϦͷมߋ • Ծ૝Ϛγϯͱൺֱִͯ͠཭౓͸௿͍͕ऩ༰αʔό୯ҐͰͷऩ༰ޮ཰͸ߴ͍ • OSͷγεςϜྖҬ͔ΒϑΝΠϧγεςϜɾ໊લۭؒͰִ཭Մೳ • chroot؀ڥʹϑΝΠϧϕʔεͰॆ࣮ͨ͠ϥΠϒϥϦ؀ڥΛߏஙՄೳ • ϗετ୯ҐͰෆඞཁͳίϚϯυ΍ϥΠϒϥϦΛ഑ஔ͠ͳ͍ͱ੍͍ͬͨޚ͕Մೳ 56 chroot()΍unshare()ͰϓϩηεΛִ཭͢ΔϞσϧ(2)

Slide 57

Slide 57 text

• ϗετ୯ҐͰݸผͷJVMΛ༻ҙ • ΞϓϦέʔγϣϯαʔόʹΑΔ୯७ͳϓϩηε෼཭Ϟσϧ(3)ʹ֘౰ • SteinʹΑΔख๏[10] • (3)ͷख๏ϕʔεͰҟͳΔϢʔβݖݶͰϓϩηεΛىಈ͢Δख๏ • ෳ਺ͷαʔό΁εέʔϧΞ΢τ͢Δ͜ͱ͕ࠔ೉Ͱ͋Δ՝୊΋͋Δ 57 JavaServlet΍Ruby on RailsͷΑ͏ͳϞσϧ <>-4UFJO l4#09 QVU$(*TDSJQUTJOBCPY z64&/*9"OOVBM5FDIOJDBM$POGFSFODF (FOFSBM5SBDL QQr +VOF

Slide 58

Slide 58 text

• (4)୯Ұͷαʔόϓϩηε܊Ͱෳ਺ͷϗετΛԾ૝తʹॲཧ͢Δߏ੒ • WebαʔόͷԾ૝ϗετํࣜͱΑ͹ΕΔϚϧνςφϯτΞʔΩςΫνϟ 58 ߴूੵʹϗετΛऩ༰͢Δ৔߹ͷϞσϧ

Slide 59

Slide 59 text

• Ծ૝ϗετํࣜʹΑΔϚϧνςφϯτΞʔΩςΫνϟΛ࠾༻ • ୯ҰͷҰൠతͳWebαʔόʹ਺ສҎ্ͷϗετΛऩ༰Մೳ • εϖοΫͱͯ͠CPU24εϨουɺϝϞϦ32GBఔ౓ͷWebαʔόΛ૝ఆ 59 ߴूੵϚϧνςφϯτΞʔΩςΫνϟͷఆٛ

Slide 60

Slide 60 text

• ΞΫηεͷ߹ͬͨϗετ໊ʹରԠͨ͠υΩϡϝϯτϧʔτΛಈతʹղੳ • Ծ૝ϗετ਺ʹϓϩηε਺͕ґଘ͠ͳ͍ͨΊߴूੵऩ༰࣌ʹޮ཰͕ྑ͍ • ڞ༗ετϨʔδʹσʔλΛల։͢Ε͹Webαʔό܈ͷෛՙ෼ࢄ͕Մೳ • σʔλ΍ઃఆ͕Webαʔόʹݻఆ͞Εͳ͍ͨΊ • ಈతίϯςϯπͷ࣮ߦʹ༷ʑͳ޻෉͕ඞཁͱͳΓෳࡶͰ͋Δ • Ϧιʔεڝ߹໰୊΍ηΩϡϦςΟͷ୲อɺߴूੵ࣌ͷੑೳ΍ӡ༻ٕज़ͷ໰୊ 60 Ծ૝ϗετํࣜͷϝϦοτͱσϝϦοτ

Slide 61

Slide 61 text

• Ծ૝ϚγϯϨϕϧͷ෼཭ • ߴूੵʹϗετΛऩ༰͢Δʹ͸ෆ޲͖ɾηΩϡϦςΟॏࢹͷ৔߹ • ϓϩηεϨϕϧͷ෼཭ • ϗετ਺ʹґଘͯ͠ϓϩηε਺͕૿Ճ͢ΔͨΊߴूੵʹ͸ෆ޲͖ • ୯Ұͷαʔόϓϩηε܈Ͱෳ਺ͷϗετΛԾ૝తʹ෼཭ • ϗετ਺ʹґଘ͠ͳ͍ͨΊߴूੵʹద͍ͯ͠Δ • ಛఆͷϗετͷϦιʔεઐ༗͕αʔόϓϩηεͷϦιʔεΛઐ༗͢Δ 61 ߴूੵऩ༰ʹ͓͚ΔWebαʔόͷϗετִ཭·ͱΊ

Slide 62

Slide 62 text

Webαʔόʹ͓͚Δಈతίϯςϯπ

Slide 63

Slide 63 text

• CGIʢCommon Gateway Interfaceʣ࣮ߦํࣜ • DSOʢDynamic Shared Objectʣ࣮ߦํࣜ 63 Webαʔόʹ͓͚Δಈతίϯςϯπ࣮ߦํࣜ

Slide 64

Slide 64 text

CGI࣮ߦํࣜ 64 $(*QSPDFTT QIQDHJJOEFYQIQ $(*QSPDFTT GPSL UFSNJOBUFQSPDFTT FYFDWF 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF ϦΫΤετຖʹϓϩηεͷੜ੒ɾഁغͱൺֱతେ͖ͳ ΠϯλϓϦλόΠφϦʢ1)1ͩͱQIQDHJʣͷ FYFDWF ͕ඞཁ

Slide 65

Slide 65 text

DSO࣮ߦํࣜ 65 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF JOEFYQIQ QBSTFSVO αʔόϓϩηεʹΠϯλϓϦλΛϥΠϒϥϦ ͱͯ͠௚઀૊ΈࠐΜͰ͓͘

Slide 66

Slide 66 text

• CGI࣮ߦํࣜ • ΠϯλϓϦλͷෳ਺όʔδϣϯΛ࣮ߦͰ͖Δ • DSO࣮ߦํࣜ • ੑೳ͸ߴ͍͕جຊతʹ͸୯ҰͷWebαʔόʹΠϯλϓϦλΛෳ਺όʔδϣ ϯ࣋ͯͳ͍ • ࣮ߦํࣜʹΑΒͣݖݶ෼཭ػೳΛར༻͠ͳ͍৔߹͸Webαʔόϓϩηεͱಉ ༷ͷΦʔφͰ࣮ߦ͞ΕΔͨΊηΩϡϦςΟ্ͷ՝୊͕͋Δ 66 ಈతίϯςϯπͷ࣮ߦํࣜ

Slide 67

Slide 67 text

୅දతͳWebαʔόͷΞʔΩςΫνϟ

Slide 68

Slide 68 text

WebαʔόͷجຊతͳϞσϧʢpreforkʣ 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF $IJMEIUUQEQSPDFTT PXOFSBQBDIF $IJMEIUUQEQSPDFTT PXOFSBQBDIF $MJFOU ϦΫΤετ Ϩεϙϯε 6/*9ܥ04ͷ৔߹ࣄલʹϦΫΤετΛड͚Δ ϓϩηεΛෳ਺GPSL ͯ͠ϓʔϧ͓ͯ͘͠ ʢ͜ΕΒશͯΛؚΊͯʮ୯Ұͷαʔόϓϩηεʯͱఆٛʣ 68 ϦΫΤετ Ϩεϙϯε ϦΫΤετ Ϩεϙϯε ϓϩηεϦΫΤετΛ ઐ༗ͯ͠ॲཧ

Slide 69

Slide 69 text

WebαʔόͷجຊతͳϞσϧʢworkerʣ 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEUISFBE PXOFSBQBDIF $IJMEIUUQEUISFBE PXOFSBQBDIF $IJMEIUUQEUISBE PXOFSBQBDIF $MJFOU ϦΫΤετ Ϩεϙϯε 6/*9ܥ04ͷ৔߹ࣄલʹϦΫΤετΛड͚Δ εϨουΛෳ਺GPSL ͯ͠ϓʔϧ͓ͯ͘͠ 69 ϦΫΤετ Ϩεϙϯε ϦΫΤετ Ϩεϙϯε

Slide 70

Slide 70 text

WebαʔόͷجຊతͳϞσϧʢϊϯϒϩοΩϯάʣ 1BSFOUOHJOYQSPDFTT PXOFSSPPU $IJMEOHJOYQSPDFTT PXOFSOHJOY $IJMEOHJOYQSPDFTT PXOFSOHJOY $MJFOU ϦΫΤετ Ϩεϙϯε 6/*9ܥ04ͷ৔߹ࣄલʹϦΫΤετΛड͚Δ ϓϩηεΛෳ਺GPSL ͯ͠ϓʔϧ͓ͯ͘͠ ୯ҰͷϓϩηεͰෳ਺ͷϦΫΤετΛฒߦॲཧ 70 ϦΫΤετ Ϩεϙϯε ϦΫΤετ Ϩεϙϯε

Slide 71

Slide 71 text

ߴूੵͷͨΊͷΞʔΩςΫνϟ IUUQE Ϣʔβ" IUUQE Ϣʔβ# IUUQE Ϣʔβ$ IUUQE Ϣʔβ" Ϣʔβ# Ϣʔβ$ ޮ཰ྑ͘࢒ϦιʔεΛ࢖͑Δ ىಈʹඞཁ ͳϦιʔε ىಈʹඞཁ ͳϦιʔε ىಈʹඞཁ ͳϦιʔε ىಈʹඞཁͳϦιʔε ߴूੵ͕ཁٻ͞ΕΔ৔߹ͷ Ϛϧνςφϯτʢ7JSUVBM)PTUʣ ϗετ୯ҐͰϓϩηεΛىಈ 71

Slide 72

Slide 72 text

• ಈతίϯςϯπͷݖݶ෼཭ͷͨΊʹsuEXECͷར༻ • Apacheͱ͸ผͷΦʔφͰಈతίϯςϯπΛ࣮ߦ͢ΔΞΫηε੍ޚख๏ • ϗετ୯ҐͰҰҙͷઃఆʢuidͳͲʣ͕ඞཁͱͳΓϗετ਺ʹԠͯ͡ઃఆ਺ ΋૿େ͢Δͱ͍͏՝୊͋Γ • Apacheىಈ࣌ͷϝϞϦ࢖༻ྔͷ૿େʹ΋ͭͳ͕Δ 72 VirtualHostͷݖݶ෼཭

Slide 73

Slide 73 text

• ApacheͷίΞػೳʹରͯ͠pluginػߏʹΑΓػೳΛ௥Ճ͢Δઃܭ • Ұൠతʹߴ଎ੑͱলϝϞϦΛߟྀͯ͠CݴޠͰ࣮૷͢Δ࢓༷ 73 Apacheͷػೳ֦ுʢApacheϞδϡʔϧʣ

Slide 74

Slide 74 text

ηΫγϣϯͷ·ͱΊ

Slide 75

Slide 75 text

1. Ϋϥ΢υαʔϏεͱϗεςΟϯάαʔϏε 2. Webαʔόʹؔ͢ΔԾ૝Խٕज़ͷ෼ྨ 3. Webαʔόʹ͓͚Δಈతίϯςϯπ 4. ୅දతͳWebαʔόͷΞʔΩςΫνϟ 75 WebαʔόͱWebϗεςΟϯάγεςϜͷجૅ஌ࣝ

Slide 76

Slide 76 text

4. ηΩϡϦςΟͱϦιʔε෼཭

Slide 77

Slide 77 text

ηΫγϣϯͷ֓ཁ

Slide 78

Slide 78 text

1. Ծ૝ϗετํࣜͷϦιʔεܭଌ 2. Ծ૝ϗετํࣜͷϦιʔε෼཭ 3. ϦΫΤετ୯ҐͰͷϦιʔε෼཭ͱԾ૝Խ 4. ͦͷଞ࠷৽ͷݚڀಈ޲ 78 ηΩϡϦςΟͱϦιʔε෼཭

Slide 79

Slide 79 text

Ծ૝ϗετํࣜͷϦιʔεܭଌ

Slide 80

Slide 80 text

• ݶΒΕͨίϯϐϡʔλϦιʔεΛϗετ୯ҐͰެฏʹϦιʔε෼཭͢΂͖ • ಛఆͷϗετ΁ͷΞΫηεʹΑΔαʔόશମͷϦιʔεઐ༗Λ๷ࢭ • ϋʔυ΢ΣΞίετ͚ͩͰͳ͘ӡ༻ɾ؅ཧίετΛ௿ݮ • JaoʹΑΔVirtualHostͰ΋ར༻͔ͷ͏ͳಉ࣌઀ଓ਺ϕʔεͰͷ੍ݶ [11] • ϑΝΠϧ΍ϗετ୯ҐͰͷ઀ଓ਺੍ݶ • ͨͬͨҰͭͷΞΫηε͕CPU΍I/OΛઐ༗͢Δ໰୊͕Ҏલͱͯ͠࢒Δ 80 ߴूੵϚϧνςφϯτΞʔΩςΫνϟͷϦιʔε෼཭ <>+%BWJE NPEMJNJUJQDPOO IUUQEPNJOJBPSHEKBPMJNJUJQDPOOIUNM

Slide 81

Slide 81 text

• ϚϧνςφϯτํࣜͷϗεςΟϯάͰ͸ଟछଟ༷ͳϓϩάϥϜ͕࣮ߦ͞ΕΔ • ϓϩάϥϜʹ੬ऑੑ͕ଘࡏ͢Δಈతίϯςϯπ • αʔόશମΛߴෛՙঢ়ଶʹ͢ΔΑ͏ͳಈతίϯςϯπ • αʔόͷϦιʔεΛઐ༗͔͠Ͷͳ͍ϓϩάϥϜ͸ਝ଎ʹݕ஌͢΂͖ • ͦͷͨΊʹ΋ݪҼΛਝ଎͔ͭత֬ʹಛఆ͠ͳ͚Ε͹ͳΒͳ͍ 81 VirtualHostํࣜʹ͓͚ΔϦιʔεফඅଌఆ

Slide 82

Slide 82 text

• Ϧιʔεઐ༗͍ͯ͠ΔϗετΛಛఆ͠ɺαʔόϓϩηε͝ͱ੍ݶՄೳ • ֘౰ͷϓϩηεͷॲཧ͸ඥ෇͍ͨϗετ͚ͩͷॲཧ͕ߦΘΕΔ • ઐ༻ͷαʔόϓϩηεͰ͋ΔͨΊɺଞͷϓϩηεʹӨڹΛ༩͑ͳ͍ • ྫ: ApacheͷMaxClientsͳͲ͕ϗετ୯Ґ • ϓϩηε܈୯ҐͰͷϦιʔε੍ݶ΍઀ଓ਺੍ݶͳͲ͕Մೳ • ϓϩηε΍ϛυϧ΢ΣΞશͯͷػೳ͕ར༻Մೳ 82 ϗετ୯ҐͰઐ༻ͷαʔόϓϩηεΛىಈ͢Δ৔߹

Slide 83

Slide 83 text

• ୯ҰͷαʔόϓϩηεͰҟͳΔϗετͷϦΫΤετΛڞ༗͢Δ • ҰͭલͷϦΫΤετ͸ผͷϗετʹର͢ΔϦΫΤετͰ͋Δ৔߹΋͋Δ • ࣍ͷϦΫΤετʹঢ়ଶΛ࢒͢ΠϯϝϞϦΩϟογϡతͳॲཧ΋ཁ஫ҙ • ϓϩηε୯ҐͰ͸ͳ͘ϦΫΤετ୯ҐͰෛՙର৅Λௐࠪ͢Δඞཁ͕͋Δ • ಛఆͷϦΫΤετ͕ͲͷυϝΠϯͰͲͷϑΝΠϧʹΞΫηε͍ͯ͠Δ͔ 83 VirtualHostํࣜͷϦιʔεফඅଌఆ

Slide 84

Slide 84 text

• psίϚϯυʹΑΔϓϩηε৘ใͷऔಘ • ࣮ߦ͍ͯ͠ΔϓϩάϥϜ໊Ͱ͸ͳ͘αʔόϓϩηε໊httpdʹͳΔ • αʔόߴෛՙ࣌ʹਝ଎ʹର৅ͷϗετͱϓϩάϥϜΛಛఆ͢Δ͜ͱ͸ࠔ೉ 84 DSO࣮ߦํࣜͷ৔߹ͷϦιʔεܭଌ

Slide 85

Slide 85 text

• psίϚϯυʹΑΔϓϩηε৘ใऔಘ • CGIόΠφϦͷҾ਺ͱͯ͠ϓϩάϥϜ͕౉͞ΕΔͨΊCGIόΠφϦ໊͕දࣔ • DSO࣮ߦํࣜͱಉ༷ʹϓϩάϥϜϑΝΠϧΛਝ଎ʹऔಘ͢Δͷ͕ࠔ೉ • /procҎԼ͔Βղੳ͕ඞཁͰߴෛՙ࣌ʹखؒͷ͔͔Δ࡞ۀ͕ඞཁ • ޙ͔ΒݪҼΛ௥ٻ͢Δ͜ͱ΋ࠔ೉ 85 CGI࣮ߦํࣜͷ৔߹ͷϦιʔεܭଌ

Slide 86

Slide 86 text

• ϦΫΤετΛड͚͔ͯΒϨεϙϯεΛฦ͢·ͰͷϦιʔε࢖༻ྔΛܭଌ • https://github.com/matsumotory/mod_resource_checker • getrusage()Λ࢖ͬͯϓϩηεͷϦιʔεΧ΢ϯλͷࠩ෼Λऔಘ • ApacheϞδϡʔϧͱ࣮ͯ͠૷ • JSON΍ςΩετͰϩΪϯά͞ΕΔͨΊޙ͔Βͷௐࠪ΍ܭଌ΋༰қ 86 দຊΒͷख๏ [12] <>দຊ྄հɼ઒ݪক࢘ɼদԬً෉ɼlେن໛ڞ༗ܕ8FCόʔνϟϧϗεςΟϯάج൫ͷηΩϡϦςΟͱӡ ༻ٕज़ͷվળɼz৘ॲֶ࿦ɼWPM OP QQr .BSDI

Slide 87

Slide 87 text

87 দຊΒͷख๏ͷઃఆαϯϓϧ [12]

Slide 88

Slide 88 text

88

Slide 89

Slide 89 text

Ծ૝ϗετํࣜͷϦιʔε෼཭

Slide 90

Slide 90 text

• HTTPϦΫΤετ୯ҐͰͷϗετ੍ޚ • ҰൠతͳWebαʔό࣮૷Ͱ͸Ծ૝ϗετ୯Ґͷ੍ݶख๏͸ݶఆత • MaxClients΍ίϯςϯπ୯Ґͷಉ࣌઀ଓ਺੍ݶ͕σϑΥϧτͰ͸Ͱ͖ͳ͍ • Ծ૝ϗετํࣜ͸୯ҰͷαʔόϓϩηεͰେྔͷԾ૝ϗετΛॲཧ͍ͯ͠Δͨ ΊҰͭͷԾ૝ϗετͷϦιʔεઐ༗͕શମʹӨڹΛ༩͑ͯ΍͍͢ • ਫ਼៛ʹ੍ޚͰ͖Δ΂͖ 90 Ծ૝ϗετํࣜͷ੍ޚ͸ඪ४ػೳͰ͸ݶఆత

Slide 91

Slide 91 text

• CPU΍ϝϞϦɺϓϩηε਺ͷ্ݶઃఆ • ϦΫΤετ͔ΒϨεϙϯε·ͰͷCPU࢖༻͕࣌ؒᮢ஋Λ௒͑ͨΒ੾அ • ΧʔωϧͷlimitύϥϝʔλʹΑΔ੍ݶͷͨΊϛυϧ΢ΣΞͷ࣮૷ʹؔΘΒͣ ڧ੍੾அ(ϓϩηε͕kill)ͰInternal Server ErrorίʔυΛΫϥΠΞϯτʹฦ ͢ → ࣄۀऀଆͰ੍ޚ͠ʹ͍͘ • CGIͷΑ͏ͳࢠϓϩηε͔Βfork()ͨ͠ϓϩάϥϜʹ͔͠ద༻Ͱ͖ͳ͍ 91 ྫ͑͹Apacheͷඪ४ͷϦιʔε੍ޚ

Slide 92

Slide 92 text

• দຊΒͷmod_vlimit [12] • ೚ҙͷϗετ΍ϑΝΠϧ໊ɺઈରύεɺσΟϨΫτϦɺਖ਼نදݱʹରԠ • ࢠϓϩηεؒͰڞ༗ϝϞϦ্ʹΧ΢ϯλΛ഑ஔͯ͠ഉଞ੍ޚ • ಉҰΫϥΠΞϯτIPΞυϨε͔Βͷಉ࣌઀ଓ਺΋੍ݶՄೳ • ੍ݶ௒ա࣌͸Service UnavailableίʔυΛฦ͢ • ΞΫηε਺΍ίϯςϯπͷϦιʔε࢖༻ྔʹج͍ͮͨϦιʔε੍ޚ 92 ϦΫΤετର৅΁ͷ࠷େಉ࣌઀ଓ਺Λ੍ݶ <>দຊ྄հɼ઒ݪক࢘ɼদԬً෉ɼlେن໛ڞ༗ܕ8FCόʔνϟϧϗεςΟϯάج൫ͷηΩϡϦςΟͱӡ ༻ٕज़ͷվળɼz৘ॲֶ࿦ɼWPM OP QQr .BSDI

Slide 93

Slide 93 text

mod_vlimitઃఆྫ 93

Slide 94

Slide 94 text

• দຊΒͷmod_lalimit [13] • ϦΫΤετड৴࣌ʹϩʔυΞϕϨʔδͷ஋͕ߴ͚Ε͹Service Unabailable • ೚ҙͷϗετ΍ϑΝΠϧ໊ɺઈରύεɺσΟϨΫτϦɺਖ਼نදݱʹରԠ • αʔόͷશମϦιʔεΛج४ʹͨ͠Ϧιʔε੍ޚ 94 ϩʔυΞϕϨʔδͷ਺஋ʹج͍ͮͨϦιʔε੍ޚ <>দຊ྄հɼ઒ݪক࢘ɼদԬً෉ɼlେن໛ڞ༗ܕ8FCόʔνϟϧϗεςΟϯάج൫ͷηΩϡϦςΟͱӡ༻ ٕज़ͷվળɼz৘ॲֶ࿦ɼWPM OP QQr .BSDI

Slide 95

Slide 95 text

ϩʔυΞϕϨʔδͷ਺஋ʹج͍ͮͨϦιʔε੍ޚ 95

Slide 96

Slide 96 text

ϦΫΤετ୯ҐͰͷϦιʔε෼཭ͱԾ૝Խ

Slide 97

Slide 97 text

1. αʔόͷෛՙΛ௿ݮ͢Δ͜ͱΛॏࢹ͢Δ͋·ΓϢʔβମݧΛେ͖͘ଛͳͬͯ ͍Δ 2. ࠷େಉ࣌઀ଓ਺ҎԼͰ΋ҰͭͷϦΫΤετͰେྔʹϦιʔεΛ࢖༻͢Δίϯ ςϯπΛߟྀͰ͖͍ͯͳ͍ 3. ੍ݶͷཻ౓͕ߥ͘ϗετؒͷϦιʔεڝ߹ʹΑΓշదʹ࢖͑ΔϢʔβͱ࢖͑ ͳ͍Ϣʔβͷ͕ࠩେ͖͍ 97 Ծ૝ϗετํࣜͷϦιʔε෼཭ͷ·ͱΊ

Slide 98

Slide 98 text

࣮ݱ͢΂͖Ϧιʔε੍ޚʢ̍ʣ 8FCαʔό 8FCαʔό Ϛϧνςφϯτํࣜͷαʔόશମͷ$16Ϧιʔε͕ṧഭͨ͠ঢ়ଶʹ͓͍ͯɺ ࢖༻Ͱ͖Δ$16Ϧιʔε͸ʹ੍ݶ͞ΕΔ͕ɺར༻Ͱ͖ΔΫϥΠΞϯτ਺͸ഒ ΞΫηεෆՄ ΞΫηεՄʂ ΞΫηεՄ 98 $16ˋ࢖༻͢Δ ͭͷϓϩάϥϜΛॲཧ $16ˋ࢖༻͢Δ ͭͷϓϩάϥϜΛॲཧ ࣮ݱ͍ͨ͠ख๏ ͜Ε·Ͱͷख๏ ΑΓཻ౓ͷ ࡉ੍͔͍ݶ

Slide 99

Slide 99 text

• ϦΫΤετʹؚ·ΕΔ༷ʑͳଐੑΛݩʹ੍ޚ͍ͨ͠ • ߴूੵϚϧνςφϯτํࣜͰ͸ϦΫΤετͷଐੑͰϗετΛ۠ผ͠ϓϩηε Λڞ༗͢ΔͨΊ • ϦΫΤετ୯ҐͰͷϦιʔε෼཭͕ඞཁ • ෳࡶͳઃఆΛϓϩάϥϚϒϧʹهड़Մೳʹ͍ͨ͠ 99 ࣮ݱ͢΂͖Ϧιʔε੍ޚʢ̎ʣ

Slide 100

Slide 100 text

• OSͷϓϩηεϦιʔε෼཭ٕज़ΛWebαʔόͷϦΫΤετ୯ҐͰ׆༻੍͠ޚ • ػೳ֦ுࢧԉػߏmod_mruby [15] ΛԠ༻ʢޙड़ʣ • ϓϩάϥϚϒϧͰΦʔόʔϔουগͳ͍Webαʔόͷػೳ֦ுࢧԉػߏͰ ϦΫΤετ୯ҐʹϦιʔεΛ੍ޚՄೳ • RubyͰ֦ுͭͭ͠ߴ଎ʹಈ࡞Մೳ 100 দຊΒͷϦιʔε੍ޚΞʔΩςΫνϟ [14] <>দຊ྄հ ܀ྛ݈ଠ࿠ Ԭ෦णஉ ϦΫΤετ୯ҐͰԾ૝తʹϋʔυ΢ΣΞϦιʔεΛ෼཭͢Δ8FCαʔόͷϦιʔε੍ޚΞʔΩςΫνϟ ৘ใॲཧֶձ࿦จࢽ 7PM /P QQ .BS <>দຊ྄հ Ԭ෦णஉ NPE@NSVCZεΫϦϓτݴޠͰߴ଎͔ͭলϝϞϦʹ֦ுՄೳͳ8FCαʔόͷػೳ֦ுࢧԉػߏ ৘ใॲཧֶձ࿦จࢽɼ 7PM /P QQ /PW

Slide 101

Slide 101 text

101

Slide 102

Slide 102 text

• ϓϩηε୯ҐͰCPUɾϝϞϦɾI/O౳Λ੍ޚ • Linux Kernel 2.6.24Ҏ߱ͷػೳ • ಛఆͷϓϩηε͸1ίΞCPU30%·Ͱ͔͠࢖༻Ͱ͖ͳ͍ͳͲ • CPU30%ΛׂΓ౰ͯͨϦιʔεάϧʔϓΛ࡞੒ • άϧʔϓʹࢀՃ͍ͯ͠Δෳ਺ͷϓϩηεͰϦιʔε෼഑ • 3ͭͷϓϩηε͕CPUΛ࠷େ࢖͏৔߹͸10%ͣͭ෼഑͞ΕΔ౳ 102 LinuxಠࣗͷϦιʔε੍ޚ cgroup

Slide 103

Slide 103 text

8FCαʔό ϓϩηε ΫϥΠΞϯτ ϦΫΤετ Ϩεϙϯε Ϩεϙϯεੜ੒ͷॲཧͷؒͷΈ ϓϩηεΛಛఆͷDHSPVQʹΞλον ʢ$16ͳͲʣ DHSPVQΞλον DHSPVQσλον ϦΫΤετ୯ҐͰͷϦιʔε੍ޚ 103

Slide 104

Slide 104 text

mod_mrubyͱcgroupͷ࣮૷ "QBDIF1SPDFTT NPE@NSVCZ NSVCZ MJCNSVCZB NSVCZDHSPVQ MJCDHSPVQ -JOVYDHSPVQT •  ֤ػೳ͸୯ମͰಈ࡞Մೳʢૄ݁߹ʣ •  NPE@NSVCZ͸"QBDIFΛNSVCZͰ੍ޚ •  NSVCZDHSPVQ͸MJCDHSPVQΛNSVCZͰ੍ޚ •  NSVCZNSVCZDHSPVQ •  3VCZ΍$ίʔυ಺ͰϦιʔεΛ੍ޚՄೳ •  ͜ͷϧʔϓ͸$16Ͱ •  ͜ͷॻ͖ग़͠͸%*4,ॻࠐ.#TFDͰ 104

Slide 105

Slide 105 text

Apacheͱmod_mrubyʹΑΔ࣮૷֓ཁ 105

Slide 106

Slide 106 text

Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.filename == “/path/to/cpu.cgi” cpu = Cgroup::CPU.new “cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end 106 ݫີʹ͸NTதNTͷ$16࢖༻࣌ؒΛ RVPUBͱͯ͠εέδϡʔϧ͢Δઃఆ

Slide 107

Slide 107 text

Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.hostname == “example.com” cpu = Cgroup::CPU.new “cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end 107

Slide 108

Slide 108 text

Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.user== “matsumotory” cpu = Cgroup::CPU.new “cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end 108

Slide 109

Slide 109 text

Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.method== “POST” cpu = Cgroup::CPU.new “cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end 109

Slide 110

Slide 110 text

Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.finfo.user == 500 cpu = Cgroup::CPU.new “cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end 110

Slide 111

Slide 111 text

Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.finfo.group == 300 cpu = Cgroup::CPU.new “cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end 111

Slide 112

Slide 112 text

Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.finfo.size > 3000 cpu = Cgroup::CPU.new “cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end 112

Slide 113

Slide 113 text

Ϧιʔε੍ޚͷઃఆྫ if resource.most_heavy_hosts.include? r.hostname # 1 100 1 c = Cgroup::CPU.new "httpd-static-limited" c.cfs_quota_us = 100000 Apache::Resource.attach_cgroup c, "httpd-static-limited" elsif resource.heavy_hosts.include? r.hostname # CPU 25% 24 6 # httpd 100 ( ) c = Cgroup::CPU.new "httpd-limited" c.shares = 25 Apache::Resource.attach_cgroup c, "httpd-limited" else # CPU 75% 24 18 # httpd-limited 100 ( ) c = Cgroup::CPU.new "httpd" c.shares = 75 Apache::Resource.attach_cgroup c, "httpd" end 113

Slide 114

Slide 114 text

• Ϧιʔε੍ޚಋೖʹΑΔΦʔόʔϔουධՁ • Ϧιʔε੍ޚͷਫ਼౓ධՁ 114 ਫ਼౓ͱΦʔόʔϔουͷධՁ

Slide 115

Slide 115 text

࣮ݧ؀ڥ 115

Slide 116

Slide 116 text

• Hello World͢Δ͚ͩͷHTMLϑΝΠϧ • Ϧιʔε੍ޚಋೖ੍͠ݶΛ͠ͳ͍৔߹ͷΦʔόʔϔου • ಉ࣌઀ଓ਺100ɾ૯઀ଓ਺100ສϦΫΤετ • ະಋೖ࣌ɿ32915.46 response/sec • ಋೖ࣌ɿ32322.07 response/sec 116 ΦʔόʔϔουͷධՁ

Slide 117

Slide 117 text

• CPU100%࢖༻͢ΔCGI΁ϦΫΤετ • CPU50%ʹϦιʔε੍ޚ • CGIͷCPU࢖༻࣌ؒΛมߋͯ͠ਫ਼౓Λൺֱ • ੑೳ੍ޚ཰Λఆٛɿ • Ϩεϙϯε࣌ؒʢ੍ݶແ͠ʣ/ Ϩεϙϯε࣌ؒʢ੍ݶ༗Γʣ • ੑೳ੍ޚ཰͕50%ʹ͚ۙΕ͹ਖ਼੍͘͠ޚ͞Ε͍ͯΔ 117 Ϧιʔε੍ޚͷਫ਼౓ධՁ

Slide 118

Slide 118 text

118

Slide 119

Slide 119 text

ͦͷଞ࠷৽ͷݚڀಈ޲

Slide 120

Slide 120 text

ܦݧతʹɺαʔόͷϦιʔε࢖༻ྔͷେখΑΓ΋ɺϦιʔε࢖༻ྔͷมԽͷେখ ͕ߴूੵϚϧνςφϯτํࣜʹ͓͚ΔಥൃతͳߴෛՙͷݪҼͱͳΔ͜ͱ͕ଟ͍ɻ ·ͨɺͦͷݪҼͷߟྀ͕ௐࠪίετΛ૿େ͍ͤͯ͞Δɻ 120 ಥൃతͳߴෛՙͷݪҼ

Slide 121

Slide 121 text

• Ϧιʔε஋ͷ࣌ܥྻσʔλͷมԽ఺είΞΛܭࢉ[16] • มԽ఺ݕग़͸false positive/negative͕ॏཁ • มԽ఺ݕग़ޙʹଈ੍࣌ݶ͢Δͱޡݕ஌ͷӨڹେ • ౷ܭ஋Λ׆͔ͤΔݕ஌࣌ͷΞΫγϣϯ͕ඞཁ 121 Ϧιʔε஋ͷมԽ఺ݕग़ΛԠ༻ <>+5BLFVDIJBOE,:BNBOJTIJ l"6OJGZJOH'SBNFXPSLGPS%FUFDUJOH0VUMJFSTBOE$IBOHF1PJOUTGSPN5JNF 4FSJFT z*&&&USBOTBDUJPOTPO,OPXMFEHFBOE%BUB&OHJOFFSJOH QQ

Slide 122

Slide 122 text

γϛϡϨʔγϣϯσʔλͱมԽ఺είΞ ैདྷͷᮢ஋ॲཧͰ͸ݕ஌͕ࠔ೉͕ͩ มԽ఺ݕग़ʹΑͬͯݕ஌Մೳ ແࢹ͍ͨ͠ 122

Slide 123

Slide 123 text

• աڈͷϦιʔε஋ͷ܏޲มԽΛΦϯϥΠϯͰஞֶ࣍श • มԽΛ΋ͨΒͨ͠ݪҼͷॏΈ෇͚Λஞ࣮࣍ࢪ • αʔόߴෛՙ࣌ʹࣗಈͰݪҼର৅ͱॏΈ෇͚͔Β੍ݶ • HTTPϦΫΤετܖػʹWebαʔό͕ࣗ཯తʹϦΫΤετͷಛ௃ྔΛղੳɾ ੍ޚͰ͖ͨΒଈ࣌ੑ΋޲্ 123 มԽྔΛஞ࣍ղੳͯ͠ௐࠪͱରԠʹ׆༻

Slide 124

Slide 124 text

1. ϦΫΤετ୯ҐͷϨεϙϯελΠϜͱಉ࣌઀ଓ਺ͷ࣌ܥྻσʔλ͔Βಛ௃ྔ ͱͯ͠ͷมԽ఺είΞܭࢉ 2. มԽ఺είΞͷՃࢉʹΑΔϗετ΍ϑΝΠϧʹؔ͢Δಛ௃ྔͷॏΈ෇͚Ϧε τͷੜ੒ 3. ߴෛՙ࣌ʹϦετͷϥϯΩϯάͷߴ͍ऩ༰ϗετ΍ϑΝΠϧ΁ͷϦΫΤετ ͸ಛ௃ྔʹ΋ͱ͍ͮͯCPUϦιʔεͱಉ࣌઀ଓ਺ʹΑͬͯࣗ཯੍ޚ 124 দຊΒͷ࠷৽ͷݚڀ [17] <>দຊ྄հɼాฏ߁࿕ɼࢁԼ࿨඙ɼ܀ྛ݈ଠ࿠ɼlಛ௃ྔநग़ͱมԽ఺ݕग़ʹجͮ͘8FCαʔόͷߴूੵϚϧνςφ ϯτํࣜʹ͓͚ΔϦιʔεͷࣗ཯੍ޚΞʔΩςΫνϟɼz৘ॲֶݚใɼWPM*05 OP QQr 'FC

Slide 125

Slide 125 text

দຊΒͷख๏ͷࣗ཯੍ޚϑϩʔ 8FCαʔό ϓϩηε ΫϥΠΞϯτ ϦΫΤετ Ϩεϙϯε ॏΈ෇͚Ϧετ Ϩεϙϯεੜ੒ʹ ফඅͨ͠Ϧιʔε஋͔ ΒมԽ఺είΞܭࢉ ϗετ ͱεΫϦϓτ ຖͷϦ ιʔε࢖༻ྔͷ࣌ܥྻσʔλ ͔Βஞ࣍ܭࢉͨ͠౷ܭϞσϧ ͷ܎਺Λอଘ มԽ఺είΞΛॏΈ ෇͚ϦετʹՃࢉ ߴෛՙ࣌͸ॏΈ෇͚Ϧ ετ্Ґͷ৔߹ɺ੍ݶԼ ͰϨεϙϯεੜ੒ Ϧιʔεݶఆ؀ڥ $16ˋ *014 ϑΝΠϧ΁ͷಉ࣌઀ଓ਺ 125

Slide 126

Slide 126 text

• Webαʔόͷػೳ֦ு mod_mruby/ngx_mruby [18] • มԽ఺ݕग़Τϯδϯ mruby-changefinder • https://github.com/matsumotory/mruby-changefinder • ಉ࣌઀ଓ਺੍ݶ http-access-limiter • https://github.com/matsumotory/http-access-limiter <>দຊ྄հ Ԭ෦णஉ NPE@NSVCZεΫϦϓτݴޠͰߴ଎͔ͭলϝϞϦʹ֦ுՄೳͳ8FCαʔόͷػೳ֦ுࢧԉ ػߏ ৘ใॲཧֶձ࿦จࢽɼ7PM /P QQ /PW 126 σʔλੜ੒ͱղੳख๏͸ఏҊɾ࣮૷ࡁΈ

Slide 127

Slide 127 text

• ϨεϙϯελΠϜͷ࣌ܥྻσʔλ • rc_scoreͱͯ͠มԽ఺είΞΛॏΈ෇͚ʹՃࢉ • ಉҰϑΝΠϧ΁ͷಉ࣌઀ଓ਺ͷ࣌ܥྻσʔλ • st_scoreͱͯ͠มԽ఺είΞΛॏΈ෇͚ʹՃࢉ • score͸ϗετɾϑΝΠϧ୯ҐͰॏΈ෇͚ 127 ղੳର৅ͷ࣌ܥྻσʔλͱॏΈ෇͚Ϧετ

Slide 128

Slide 128 text

ॏΈ෇͚Ϧετͷσʔλߏ଄ྫ 128 { host1: {ɹɹɹɹɹɹɹɹɹɹɹɹ # ϗετ໊ st_score: 83, # ϗετͷಉ࣌઀ଓ਺είΞ rc_score: 32, # ϗετͷϨεϙϯελΠϜείΞ files: { path_to_progmra1: { # ϓϩάϥϜϑΝΠϧύε st_score: 30, # ϑΝΠϧͷಉ࣌઀ଓ਺είΞ rc_score: 20, # ϑΝΠϧͷϨεϙϯελΠϜείΞ }, path_to_progmra2: { st_score: 53, rc_score: 12, }, }, }, } ϑΝΠϧ΁ͷϦΫΤετʹରͯ͠ܭࢉͨ͠είΞΛɺ֘౰ ͢ΔϗετͱϑΝΠϧͷείΞʹͦΕͧΕՃࢉ͢Δ

Slide 129

Slide 129 text

มԽ఺είΞܭࢉྫ 129 > cf = ChangeFinder.new 5, 0.01, 10, 0.01, 7 => #, @smooth_term=5, @outlier_analyze=#> > cf.learn [1,2,1,2,3,2,1,2,1] => [6.2017912433901, 1.3973555597559, 2.4211198000217, 2.3979400886673, 1.7835503570548, 1.4166612339939, 1.4837836144657, 1.2835583707215, 1.1556254255408] > cf.score 1 => 1.1044914205061

Slide 130

Slide 130 text

WebαʔόͷมԽ఺ݕग़֦ுͷઃఆྫ 130 # /etc/httpd/conf.d/mod_mruby.conf LoadModule mruby_module modules/mod_mruby.so # ChangeFinderͷॳظԽॲཧΛϑοΫ mrubyPostConfigMiddle cf_init.rb cache # มԽ఺είΞͷܭࢉॲཧΛϑοΫ mrubyLogTransactionMiddle cf_score.rb cache

Slide 131

Slide 131 text

มԽ఺ݕग़ΤϯδϯͷॳظԽ࣮૷ྫ 131 # ChangeFinderΠϯελϯεੜ੒ cf = ChangeFinder.new(5, 0.1, 10, 0.1, 3) # ԾֶशσʔλʹΑΔࣄલֶश cf.learn [1,1,1,1,1,1,1,1,1,1] # ֤ϑΣʔζͰσʔλΛऔΓग़ͤΔΑ͏ʹϢʔβσʔλʹอଘ Userdata.new.cf_list = {} Userdata.new.cf = cf

Slide 132

Slide 132 text

ϗετ୯ҐͷมԽ఺είΞͷܭࢉྫ 132 r = Apache::Request.new cf = Userdata.new.cf cf_list = Userdata.new.cf_list
 hostname = r.hostname res_time = r.response_time # vhostͷChangeFinderΠϯελϯε͕ଘࡏ͠ͳ͚Ε͹ෳ੡ unless cf_list.has_key?(hostname) usercf[hostname] = cf.clone end # ϦΫΤετλΠϜ͔ΒมԽ఺είΞΛܭࢉ͠ϩάʹग़ྗ Apache.log Apache::APLOG_ERR, “requesttime: #{r.response_time.to_s} score: #{cf_list[hostname].score(res_time)} hostname: #{hostname}”

Slide 133

Slide 133 text

• st_scoreͷᮢ஋௒ա࣌͸ಉ࣌઀ଓ਺੍ݶ • rc_scoreͷᮢ஋௒ա࣌͸࠷େCPU࢖༻཰੍ݶ • ྆ํͷείΞ͕ߴ͍৔߹͸྆ํΛ੍ݶ 133 ੍ݶϧʔϧ

Slide 134

Slide 134 text

• ϦΫΤετ୯ҐͰCPUͷ࠷େ࢖༻཰Λมߋ [19] • cgroup(mruby-cgroup)΍rlimit(mruby-resource) • ϗετ୯Ґ΍ϑΝΠϧ୯ҐͰͷಉ࣌઀ଓ਺Λมߋ • mod_mrubyͱhttp-access-limiter 134 ੍ݶख๏ͷίϯϙʔωϯτ͸࣮૷ࡁΈ <>দຊ྄հ ܀ྛ݈ଠ࿠ Ԭ෦णஉ ϦΫΤετ୯ҐͰԾ૝తʹϋʔυ΢ΣΞϦιʔεΛ෼཭͢Δ8FCαʔόͷϦιʔ ε੍ޚΞʔΩςΫνϟ ৘ใॲཧֶձ࿦จࢽ 7PM /P QQ .BS

Slide 135

Slide 135 text

ηΫγϣϯͷ·ͱΊ

Slide 136

Slide 136 text

1. Ծ૝ϗετํࣜͷϦιʔεܭଌ 2. Ծ૝ϗετํࣜͷϦιʔε෼཭ 3. ϦΫΤετ୯ҐͰͷϦιʔε෼཭ͱԾ૝Խ 4. ͦͷଞ࠷৽ͷݚڀಈ޲ 136 ηΩϡϦςΟͱϦιʔε෼཭

Slide 137

Slide 137 text

5. ηΩϡϦςΟͱੑೳ

Slide 138

Slide 138 text

ηΫγϣϯͷ֓ཁ

Slide 139

Slide 139 text

1. γεςϜྖҬ΍ଞϗετྖҬͷ೷͖ݟ 2. CGI࣮ߦํࣜͷηΩϡϦςΟ 3. DSO࣮ߦํࣜͷηΩϡϦςΟ(1)~(4) 4. ͦͷଞ࠷৽ͷݚڀಈ޲ 139 ηΩϡϦςΟͱੑೳ

Slide 140

Slide 140 text

γεςϜྖҬ΍ଞϗετྖҬͷ೷͖ݟ

Slide 141

Slide 141 text

• ࣮༻໘͔Βݱ࣮తͳηΩϡϦςΟٴͼ͏࣮ӡ༻্ͷ՝୊Λ੔ཧ • ApacheͷVirtualHostΛ༻͍ͨߴूੵϚϧνςφϯτํࣜͷݖݶ෼཭ • ηΩϡϦςΟͱੑೳͷཱ྆ʹ͍ͭͯ۩ମతͳΞʔΩςΫνϟͷ੔ཧ • OS୯Ґɺϓϩηε୯ҐɺHTTPϦΫΤετ୯Ґͷݖݶ෼཭ͳͲ༷ʑ • Ծ૝ϗετํࣜͷηΩϡϦςΟ͔Βϓϩηεͷݖݶ෼཭ͱੑೳΛֶͿ 141 Ծ૝ϗετํࣜͷݖݶ෼཭

Slide 142

Slide 142 text

• OSͷγεςϜྖҬͰWebαʔόϓϩηεΛҰൠϢʔβͷݖݶͰىಈ • ҰൠϢʔβͰӾཡՄೳͳΦʔφઃఆͷϑΝΠϧ΍σΟϨΫτϦ͸ӾཡՄೳ • Webαʔόϓϩηε͸Ծ૝ϗετͷશͯͷίϯςϯπΛૢ࡞͢Δඞཁ͕͋Δ • ΞΫηε੍ޚΛ͠ͳ͍৔߹ɺશͯͷԾ૝ϗετ͕૬ޓʹίϯςϯπΛ೷͖ݟՄ ೳʹͳΔ 142 Ծ૝ϗετํࣜͷݖݶ෼཭

Slide 143

Slide 143 text

Ծ૝ϗετؒͰͷίϯςϯπ೷͖ݟ 143 w JOEFYDHJ͸BQBDIFݖݶͰ࣮ߦ w JOEFYDHJͷதͰ֎෦ίϚϯυ࣮ߦʹ ΑΓIPTUͷJOEFYDHJΛSFBE͢Δͱ ಺༰͕ӾཡՄೳ w JOEFYDHJͷதʹECQBTT͕ॻ͔Εͯ ͍Δ͜ͱ΋͋Δ

Slide 144

Slide 144 text

• suEXECͷΑ͏ͳΞΫηε੍ޚػߏΛར༻ • ಈతίϯςϯπͷ࣮ߦΦʔφΛαʔόϓϩηεͷΦʔφͱม͔͑ͯΒ࣮ߦ • ֤ϗετ୯ҐͰ࣮ߦΦʔφΛݸผʹมߋ͢Δ͜ͱͰ೷͖ݟΛ๷͙ 144 Ծ૝ϗετํࣜͷΞΫηε੍ޚͷجຊઓུ

Slide 145

Slide 145 text

CGI࣮ߦํࣜͷηΩϡϦςΟ

Slide 146

Slide 146 text

• VirtualHostʹ͓͍ͯଞϗετྖҬΛӾཡͰ͖ͳ͍ߏ੒ΛߏஙՄೳ • CGI࣮ߦ࣌ʹ࣮ߦΦʔφΛมߋ͢ΔΞʔΩςΫνϟ 146 CGI࣮ߦํࣜͱsuEXECͷجຊઓུ

Slide 147

Slide 147 text

CGI࣮ߦํࣜ $(*QSPDFTT QIQDHJJOEFYQIQ $(*QSPDFTT GPSL UFSNJOBUFQSPDFTT FYFDWF 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF ϦΫΤετຖʹϓϩηεͷੜ੒ɾഁغͱ ൺֱతେ͖ͳόΠφϦʢ1)1ͩͱQIQDHJόΠφϦʣͷ FYFDWF ͕ඞཁ 147

Slide 148

Slide 148 text

$(*QSPDFTT PXOFSVTFS $(*QSPDFTT PXOFSSPPU QIQDHJJOEFYQIQ PXOFSVTFS $(*QSPDFTT PXOFSVTFS ੩తʹઃఆ͞ΕͨVJEΛݩʹTFUVJE TFUHJE GPSL FYFDWF TVFYFDQSPHSBN TFUVJESPPU UFSNJOBUFQSPDFTT FYFDWF 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF ϦΫΤετຖʹ$(*༻ϓϩηεͷ ੜ੒ഁغ͕ඞཁ ˞$(*TV&9&$ 148

Slide 149

Slide 149 text

149

Slide 150

Slide 150 text

• DoerschΒʹΑΔख๏[19] • suEXEC࣌ʹ֤ϗετ؀ڥͰchroot()γεςϜίʔϧʹΑΓִ཭ • ϗετྖҬ֎ͷϑΝΠϧΛӾཡ͢Δ͜ͱ͕Ͱ͖ͳ͍ • ϗετ୯ҐͰݸผʹϥΠϒϥϦ΍࣮ߦ؀ڥΛ༰қ͢Δඞཁ͸͋Δ • ෳ਺ͷ࣮ߦ؀ڥͷݻఆతͳϥΠϒϥϦ͸ϋʔυϦϯΫͰࢀর͢Δ͜ͱʹΑ Γ࣮ߦ؀ڥߏங΍࢖༻༰ྔͷίετΛ࡟ݮՄೳ 150 suEXECͱchrootͷ૊Έ߹ΘͤʹΑΔִ཭ख๏ <>'%PFSTDI #VH$ISPPU1BUDIGPS4V&YFD IUUQTC[BQBDIFPSHCVH[JMMBTIPXCVHDHJ JE

Slide 151

Slide 151 text

$(*QSPDFTT PXOFSVTFS $(*QSPDFTT PXOFSSPPU QIQDHJJOEFYQIQ PXOFSVTFS $(*QSPDFTT PXOFSVTFS DISPPU ޙ TFUVJE TFUHJE GPSL FYFDWF TVFYFDQSPHSBN TFUVJESPPU UFSNJOBUFQSPDFTT FYFDWF 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF DISPPU&OWJSPONFOU ˞%PFSTDIΒͷख๏ 151

Slide 152

Slide 152 text

• CGIϓϩάϥϜ࣮ߦ୯ҐͰϓϩηεͷੜ੒ɾഁغ͕ඞཁͱͳΓੑೳ͕௿͘ͳΔ • suEXECϓϩάϥϜͷexecv()΋ෳ਺ճ࣮ߦ • ϓϩάϥϜͷΠϯλϓϦλΛ࠷ॳ͔Βىಈ͢Δඞཁ͕͋Γىಈίετ͕ߴ͍ • DSOͷΞΫηε੍ޚͷੑೳͱൺֱͯ͠ޙड़ 152 CGI࣮ߦํࣜͷΞΫηε੍ޚͷ՝୊

Slide 153

Slide 153 text

DSO࣮ߦํࣜͷηΩϡϦςΟ(1)

Slide 154

Slide 154 text

• αʔόϓϩηεʹ૊ΈࠐΜͩΠϯλϓϦλ͕ϓϩάϥϜΛ௚઀࣮ߦ • ϦΫΤετ୯ҐͰϓϩηεͷੜ੒ɾഁغ͕ෆཁ • ΠϯλϓϦλΛ࠷ॳ͔Βϩʔυ͢Δඞཁ΋ແ͠ • εΫϦϓτͷߦ಄ʹShebangߦͷهड़΋ඞཁແ͠ • αʔόϓϩηεͷΦʔφͰ࣮ߦ͞ΕΔͨΊηΩϡϦςΟʹ஫ҙ͕ඞཁ • ΞΫηε੍ޚख๏͕͍͔ͭ͘ఏҊ͞Ε͖ͯͨ 154 DSO࣮ߦํࣜͷϝϦοτͱݖݶ෼཭

Slide 155

Slide 155 text

DSO࣮ߦํࣜ 155 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF JOEFYQIQ QBSTFSVO αʔόϓϩηεʹΠϯλϓϦλΛϥΠϒϥϦ ͱͯ͠௚઀૊ΈࠐΜͰ͓͘

Slide 156

Slide 156 text

• DSO࣮ߦํࣜͰ͋Δmod_php͸ηʔϑϞʔυͱ͍͏ػೳ͕͋ͬͨ • Ծ૝ϗετํࣜͷݖݶ෼཭Λ࣮ݱ͢ΔͨΊͷࢼΈ[20] • PHPಛ༗ͷηΩϡϦςΟػߏͰ͋Γ൚༻ੑʹ͚ܽͨ • OS΍ϑΝΠϧγεςϜͷݖݶ෼཭ͷ՝୊ΛΞϓϦέʔγϣϯϨΠϠʔͰ࣮ ݱ͢Δʹ͸ΞʔΩςΫνϟ্ݱ࣮తͰ͸Μ͔ͬͨ • PHP5.3.0Ͱ࢖༻͕ඇਪ঑ͱͳΓɺPHP5.4.0Ͱػೳ࡟আ 156 PHPͷηʔϑϞʔυ <>IUUQQIQOFUNBOVBMKBGFBUVSFTTBGFNPEFQIQ

Slide 157

Slide 157 text

157

Slide 158

Slide 158 text

DSO࣮ߦํࣜͷηΩϡϦςΟ(2)

Slide 159

Slide 159 text

• NakamitsuΒʹΑΔख๏ [21] • ApacheϞδϡʔϧmod_suid2ͱ࣮ͯ͠૷ • αʔόϓϩηεΛrootݖݶͰىಈ͓͖ͯ͠ɺϦΫΤετ୯ҐͰݖݶΛมߋ 159 rootͷαʔόϓϩηεͰݖݶ෼཭͢Δख๏ <>)JEFP/ NPETVJE IUUQDPEFHPPHMFDPNQNPETVJE

Slide 160

Slide 160 text

DSO࣮ߦํࣜ 160 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF JOEFYQIQ QBSTFSVO αʔόϓϩηεʹΠϯλϓϦλΛϥΠϒϥϦ ͱͯ͠௚઀૊ΈࠐΜͰ͓͘

Slide 161

Slide 161 text

1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSSPPU JOEFYQIQ PXOFSVTFS TFUVJE TFUHJE QBSTF SVO ˞NPE@TVJE $IJMEIUUQEQSPDFTT PXOFSVTFS $IJMEIUUQEQSPDFTT PXOFSVTFS UFSNJOBUFQSPDFTT ϦΫΤετຖͷࢠIUUQEϓϩηεͷੜ੒ഁغ͕ඞཁ

Slide 162

Slide 162 text

• DSO࣮ߦํࣜͷϝϦοτͰ͋ΔύϑΥʔϚϯεͷԸܙ͕ಘΒΕͳ͍ • ϦΫΤετ୯ҐͰࢠαʔόϓϩηεΛੜ੒ɾഁغ͢Δඞཁ͕͋Δ • ࢠαʔόϓϩηεͷੜ੒ɾഁغ͸CGIϓϩηεͷੜ੒ɾഁغΑΓ΋ίετߴ • ݁ՌతʹCGIํࣜͰϓϩάϥϜΛ࣮ߦ͢ΔΑΓ΋ੑೳ͕௿Լ • αʔόϓϩηεʹ೚ҙͷίϚϯυΛ࣮ߦ͢Δ੬ऑੑ͕͋Δ৔߹ • ༰қʹrootݖݶΛ࣋ͬͨϓϩηεΛୣΘΕΔ 162 mod_suid2ͷ՝୊

Slide 163

Slide 163 text

• αʔόϓϩηεΛrootͰىಈηΩϡΞOSͰrootͷಛݖΛҰ෦੍ݶ͓ͯ͘͠ • ϦΫΤετຖʹfork()ͰϓϩηεΛੜ੒͠ɺϓϩηεͷݖݶΛมߋ͔ͯ͠Βί ϯςϯπΛ࣮ߦɺϓϩηεΛഁغ͢Δख๏ • mod_suid2ΑΓ҆શͰ͋Δ͕ϦΫΤετ୯ҐͰϓϩηεͷੜ੒ɾഁغ͕ඞཁ • ݪཧతʹDSO࣮ߦํࣜͰ͋ͬͯ΋suEXECΛ࢖ͬͨCGIఔ౓ͷੑೳʹͳΔ 163 ݪΒʹΑΔख๏ [22] <>ݪେีɼඌ྄࡚ଠɼฌ಄࿨थɼதࢁହҰɼl)BSBDIFϑΝΠϧॴ༗ऀͷݖݶͰಈ࡞͢Δ888αʔ όɼz৘ॲֶ࿦ɼWPM OP QQr

Slide 164

Slide 164 text

• CGI࣮ߦํࣜ(chroot+suEXEC)ɺCGI࣮ߦํࣜ(suEXEC)ɺDSO(mod_suid2) • ಉ࣌઀ଓ਺Λ1͔Β450ʹมԽͤ͞ͳ͕ΒඵؒͷϨεϙϯε਺Λܭଌ • PHPͰจࣈྻΛग़ྗ͢Δ͚ͩͷCGIϓϩάϥϜΛར༻ 164 ࢀߟ: ੑೳධՁ

Slide 165

Slide 165 text

࣮ݧ؀ڥ 165

Slide 166

Slide 166 text

166

Slide 167

Slide 167 text

DSO࣮ߦํࣜͷηΩϡϦςΟ(3)

Slide 168

Slide 168 text

• ੑೳ໘ʹ͓͍ͯCGI͸ຊདྷద͍ͯ͠ͳ͍ • ऩ༰਺͕૿͑ΔͱϓϩηεͷϝϞϦ࢖༻ྔ͕૿͑fork()ͷޮ཰௿Լ • ͦ΋ͦ΋ϦΫΤετ୯ҐͰfork()͢ΔͷͰ஗͍ • DSO͸ຊདྷfork()Λ࣮ߦ͠ͳ͍ͨΊߴ଎ʹಈ࡞͢Δ͕ • ैདྷͷDSOͷΞΫηε੍ޚ͸ϦΫΤετຖʹfork()Λ࣮ߦ͢Δ 168 ߴूੵϚϧνςφϯτͱCGIɾDSOͷੑೳ

Slide 169

Slide 169 text

• NakamitsuΒʹΑΔmod_ruid2[23] • rootͰαʔόϓϩηεΛىಈ͢ΔͷͰ͸ͳ͘rootͷಛݖΛࡉ෼Խ্ͨ͠ͰҰൠ ϢʔβʹಛݖΛҰ෦༩͑Δ → Linux Capability • ΦʔφΛมߋ͢ΔCAP_SETUIDͱCAP_SETGIDΛ༩͑Ε͹ྑ͍ 169 ҰൠϢʔβͷαʔόϓϩηεͰݖݶ෼཭͢Δख๏ <>NPE@SVJE IUUQTHJUIVCDPNNJOENPESVJE

Slide 170

Slide 170 text

• ೚ҙΞΫηε੍ޚʢDACʣ • ࣗ਎͕࡞ͬͨϦιʔε΁ʹΞΫηε͸ࣗ਎͕ܾఆ • UNIXͷඪ४తͳϞσϧ • ڧ੍ΞΫηε੍ޚʢMACʣ • ࣗ਎͕࡞ͬͨϦιʔεʹ׬શʹΞΫηεͰ͖ΔΘ͚Ͱ͸ͳ͍ • ؅ཧऀ͕ܾఆ → SELinuxɺTOMOYO Linux 170 ΞΫηε੍ޚϞσϧͷ෮श

Slide 171

Slide 171 text

• Linux2.2Ҏ߱ • ैདྷͷ2֊૚ͷDACݖݶϞσϧͷ֦ு • εϨου୯Ґʹ੍ޚՄೳͳಛݖάϧʔϓ • εϨου͸3छྨͷcapability setΛ࣋ͭ • PermittedɺEffectiveɺInheritable • capability setͷ૊Έ߹ΘͤʹΑͬͯcapabilityͷݖݶΛ੍ޚ 171 Linux Capabilities

Slide 172

Slide 172 text

• Permitted͸ڐՄ • EffectiveͷηοτɾΞϯηοτ͕Մೳ • PermittedΛΞϯηοτ͢Δͱ໭Εͳ͍ • Effective͸࣮ޮ • ࣮ࡍͷݖݶՄ൱νΣοΫ͸EffectiveΛ൑ఆ͢Δ • Permitted͕ڐՄ͞Ε͍ͯΕ͹Ξϯηοτޙͷ࠶ηοτ͕Մೳ 172 PermittedͱEffective

Slide 173

Slide 173 text

• ໿40άϧʔϓʹ෼ׂ͞Ε͍ͯΔ • uidɾgidมߋͷಛݖ • ಛݖϙʔτʢ1024ҎԼʣͷόΠϯυಛݖ • chrootͷಛݖ • rebootͷಛݖͳͲͳͲ…….. 173 ಛݖͷࡉ෼Խ

Slide 174

Slide 174 text

• ಛݖΛ͍࣋ͬͯΔҰൠϢʔβͰ΋execve()࣌ʹಛݖ͕མͱ͞ΕΔ • ͨͩ͠ɺrootݖݶͰexecve()ͨ͠৔߹͸ಛݖΛҾ͖ܧ͛Δ • ϑΝΠϧࣗମʹಛݖΛઃఆͨ͠৔߹͸execve()࣌ʹಛݖΛҾ͖ܧ͙ • ͋Β͔͡ΊϑΝΠϧʹಛݖΛઃఆ͢Δඞཁ͋Γ • ೚ҙͷίϚϯυΛ೚ҙͷϢʔβͰಛݖΛ༩࣮͑ͭͭߦ͢Δ৔߹͸Ͱ͖ͳ͍ʁ • ҰൠϢʔβͰͷexecve()͕ඞཁɺ͔ͭɺϑΝΠϧʹಛݖΛઃఆͰ͖ͳ͍ 174 ࣮૷࣌ͷ஫ҙ఺΍੍໿ͳͲ

Slide 175

Slide 175 text

• Linux4.3͔Β௥Ճ͞Εͨcapability • ࢠϓϩηεʹҾ͖ͮͭಛݖ܈ • ҰൠϢʔβͰfile capability͕ͳͯ͘΋execve()ޙʹҾ͖ܧ͛Δ[24] • γϯϓϧͰ͋Δ͕࢖͍ํ࣍ୈͰ͸ඇৗʹڧྗ • ίϯςφ࣮૷࣌ʹAmbient capabilities͸͋͑ͯΞϯηοτ͢Δ࣮૷΋ • exeve()ޙͷ਌͔Βͷҙਤ͠ͳ͍ಛݖͷҡ࣋ͱঢ֨Λ๷ࢭ͢ΔͨΊ 175 Ambient capabilities <>NBUTVNPUPSZ DHSPVQͱ-JOVY$BQBCJMJUZͷ׆༻ IUUQTTQFBLFSEFDLDPNNBUTVNPUP@SSDPOBOE DBQDPOJOUFSOBMTOVNCFSMYDKQ

Slide 176

Slide 176 text

• mod_ruid2Λ࢖ͬͯαʔόϓϩηεΛҰൠϢʔβͰىಈͭͭ͠ɺΦʔφΛมߋ ͢ΔಛݖΛ༩͑ͯ΍Ε͹ɺDSO࣮ߦํࣜͰ͋ͬͯ΋ߴ଎ʹݖݶ෼཭Մೳʁ • ϦΫΤετ୯ҐͰΦʔφΛมߋͯ͠ϨεϙϯεΛฦͨ͠ΒΦʔφΛ໭͢ • αʔόϓϩηεʹ೚ҙͷίϚϯυΛ࣮ߦ͢Δ੬ऑੑ͕͋ͬͯ΋ಛݖ͸࠷খݶ ʹݶఆͰ͖Δ 176 ҰൠϢʔβͷαʔόϓϩηεͰݖݶ෼཭͢Δख๏

Slide 177

Slide 177 text

177 1BSFOUIUUQEQSPDFTT PXOFSBQBDIF $IJMEIUUQEQSPDFTT PXOFSBQBDIF JOEFYQIQ PXOFSVTFS TFUVJE TFUHJE QBSTF SVO ˞NPE@SVJE $IJMEIUUQEQSPDFTT PXOFSVTFS $IJMEIUUQEQSPDFTT PXOFSBQBDIF ϦΫΤετຖʹϓϩηεͷੜ੒ഁغ͕ෆཁʁʁʁ QSDUM TFUVJETFUHJEDBQT TFUVJE TFUHJE

Slide 178

Slide 178 text

178 1BSFOUIUUQEQSPDFTT PXOFSBQBDIF $IJMEIUUQEQSPDFTT PXOFSBQBDIF JOEFYQIQ PXOFSVTFS TFUVJE TFUHJE QBSTF SVO ˞NPE@SVJE $IJMEIUUQEQSPDFTT PXOFSVTFS $IJMEIUUQEQSPDFTT PXOFSBQBDIF ϦΫΤετຖʹϓϩηεͷੜ੒ഁغ͕ෆཁʁʁʁ QSDUM TFUVJETFUHJEDBQT TFUVJE TFUHJE ίϯςϯπΛαʔϏεར༻ऀ͕࡞੒Ͱ͖Δ ৔߹͸੬ऑੑʹͳΔ

Slide 179

Slide 179 text

179 1BSFOUIUUQEQSPDFTT PXOFSBQBDIF $IJMEIUUQEQSPDFTT PXOFSBQBDIF JOEFYQIQ PXOFSVTFS TFUVJE TFUHJE QBSTF SVO ˞NPE@SVJE $IJMEIUUQEQSPDFTT PXOFSVTFS $IJMEIUUQEQSPDFTT PXOFSBQBDIF ࣮ߦϓϩηε͕ΦʔφมߋͷಛݖΛ࣋ͬ ͍ͯΔͨΊɺίϯςϯπܦ༝Ͱݖݶมߋ ͕Մೳʂʂ ˣ QSDUM TFUVJETFUHJEDBQT TFUVJE TFUHJE ίϯςϯπ࣮ߦલʹಛݖΛམͱ͞ͳ͍ͱ͍͚ ͳ͍ɻͭ·ΓɺϓϩηεͷΦʔφมߋޙ͸ݩ ͷΦʔφʹ໭Εͳ͍ͨΊϓϩηεഁغ͕ඞཁ VOTFUDBQT

Slide 180

Slide 180 text

• mod_suid2ͱಉ༷ɺ݁ہͷͱ͜ΖϗεςΟϯάαʔϏεʹ͓͍ͯɺDSO࣮ߦ ํࣜʹ͓͍ͯηΩϡϦςΟΛ୲อ͢ΔͨΊʹ͸ϦΫΤετ୯ҐͰαʔόϓϩη εͷੜ੒ɾഁغ͕ඞཁ • ݁ՌతʹDSO࣮ߦํࣜΛ࢖͏ੑೳ্ͷϝϦοτ͕ڗडͰ͖ͳ͍ • ͜ͷΑ͏ͳΞΫηε੍ޚख๏Λ࠾༻͢Δ৔߹͸CGIͷํ͕ϝϦοτ͕ଟ͍ • ੑೳɾෳ਺ΠϯλϓϦλ͕ར༻ՄೳͳͲ 180 ҰൠϢʔβͷαʔόϓϩηεͰݖݶ෼཭͢Δख๏

Slide 181

Slide 181 text

• Webαʔό͔ΒͷݖݶมߋΛՄٯతʹมߋՄೳʹͭͭ͠ɺ࣮ߦ͞ΕΔίϯς ϯπϓϩάϥϜ͔Β͸ݖݶΛมߋ͞Εͳ͍Α͏ʹ͢Δख๏ • ϓϩάϥϜ͔Β࣮ߦ͞ΕΔγεςϜίʔϧΛ͋Β͔͡Ίચ͍ग़͠ɺίϯςϯ π࣮ߦ࣌ʹ֘౰ͷγεςϜίʔϧΛϑοΫͯ͠ݖݶมߋͷॲཧΛແޮԽ͢Δ • Linuxʹ͓͍ͯγεςϜίʔϧΛద੾ʹϑοΫ͢Δʹ͸Χʔωϧʹ௚઀มߋΛ Ճ͑Δඞཁ͕͋Δ • Χʔωϧ΍ϥΠϒϥϦΛܧଓతʹมߋ͢Δݱ৔Ͱ͸Մൖੑ͕௿͍ 181 ݪΒͷγεςϜίʔϧΛϑοΫ͢Δख๏ [25] <>ݪେีɼதࢁହҰɼl)VTTBεέʔϥϒϧ͔ͭηΩϡΞͳαʔόΞʔΩςΫνϟ௿ίετͳαʔόϓϩηε ࣮ߦݖݶมߋػߏɼzୈճ৘ใՊֶٕज़ϑΥʔϥϜ '*5 ߨԋ࿦จूɼ3#

Slide 182

Slide 182 text

DSO࣮ߦํࣜͷηΩϡϦςΟ(4)

Slide 183

Slide 183 text

• DSO൛ͷੑೳΛ׆͔͢ΞΫηε੍ޚख๏͕ແ͍ • ࣮ߦํࣜ΍ΠϯλϓϦλ͕ಠࣗʹΞΫηε੍ޚख๏Λ࣮૷͓ͯ͠Γ൥ࡶ • Χʔωϧʹ൥ࡶͳ؅ཧΛٻΊΔख๏͸࣮༻্ɺՄൖੑʹ͚ܽΔ 183 ͜͜·Ͱͷ·ͱΊ

Slide 184

Slide 184 text

• ੑೳ໘ʹ͓͍ͯCGI͸ຊདྷద͍ͯ͠ͳ͍ • ऩ༰਺͕૿͑ΔͱϓϩηεͷϝϞϦ࢖༻ྔ͕૿͑fork()ͷޮ཰௿Լ • ͦ΋ͦ΋ϦΫΤετ୯ҐͰfork()͢ΔͷͰ஗͍ • DSO͸ຊདྷfork()Λ࣮ߦ͠ͳ͍ͨΊߴ଎ʹಈ࡞͢Δ͕ • ͜͜·ͰͷDSOͷΞΫηε੍ޚ͸ϦΫΤετຖʹfork()Λ࣮ߦ͢Δ 184 ߴूੵϚϧνςφϯτͱCGIɾDSOͷੑೳ

Slide 185

Slide 185 text

• DSOํࣜͷੑೳΛ׆͔͢ΞΫηε੍ޚΞʔΩςΫνϟ • ಈతίϯςϯπ࣮ߦલʹΦʔφมߋͷಛݖͷΈΛ༩੍͑ͨޚ༻εϨουΛ࡞੒ • ΦʔφΛมߋͨ͠εϨου্ͰίϯςϯπΛॲཧ • ίϯςϯπ࣮ߦޙ͸εϨουͷΈΛ࡟আ • ݖݶ෼཭ͷΦʔόʔϔουΛεϨουͷੜ੒ɾഁغϨϕϧʹ௿ݮ 185 দຊΒͷఏҊ͢ΔεϨου୯ҐͰΞΫηε੍ޚ [26] <>দຊ྄հ Ԭ෦णஉ εϨου୯ҐͰݖݶ෼཭Λߦ͏8FCαʔόͷΞΫηε੍ޚΞʔΩςΫνϟ ిࢠ৘ใ௨৴ֶ ձ࿦จࢽ7PM+# /P QQ 0DU

Slide 186

Slide 186 text

• ݖݶ෼཭༻ͷ੍ޚ༻εϨουΛੜ੒͢ΔͨΊɺCGI΋ಉҰͷ࿮૊ΈͷதͰݖݶ ෼཭͕ՄೳʹͳΔ • Ծ૝ϗετ୯ҐͷΦʔφ৘ใ΋ϦΫΤετͷ͋ͬͨίϯςϯπ͔ΒࣗಈͰऔಘ ͢ΔͨΊϗετ୯Ґͷݖݶ෼཭ઃఆΛඞཁͱ͠ͳ͍ • ߴूੵ࣌ʹϗετͷऩ༰ઃఆ਺ͷ໰୊͔Βαʔόϓϩηεͷىಈ࣌ͷϝϞϦ࢖ ༻ྔ͕૿େ͢Δ͜ͱ͔Βɺfork()࣌ͷੑೳྼԽͷ໰୊΋͕͋ͬͨɺ౷Ұతͳઃ ఆͷهड़͕ՄೳͱͳΓfork()ͷੑೳ΋վળՄೳ 186 DSOɾCGI࣮ߦํࣜ྆ํʹରԠ

Slide 187

Slide 187 text

1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF UISFBE PXOFSVTFS UISFBE PXOFSBQBDIF JOEFYQIQ PXOFSVTFS TFUVJE TFUHJE ʜ VOTFUDBQT DSFBUFUISFBE TFUDBQT EFTUSPZUISFBE QBSTF SVO QSDUM TFUVJETFUHJEDBQT UISFBE PXOFSVTFS ˞%40দຊΒͷΞΫηε੍ޚΞʔΩςΫνϟ

Slide 188

Slide 188 text

1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF UISFBE PXOFSVTFS UISFBE PXOFSBQBDIF JOEFYQIQ PXOFSVTFS TFUVJE TFUHJE ʜ VOTFUDBQT DSFBUFUISFBE TFUDBQT EFTUSPZUISFBE QBSTF SVO QSDUM TFUVJETFUHJEDBQT UISFBE PXOFSVTFS ˞%40দຊΒͷΞΫηε੍ޚΞʔΩςΫνϟ DISPPU&OWJSPONFOU

Slide 189

Slide 189 text

1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF UISFBE PXOFSVTFS UISFBE PXOFSBQBDIF TFUVJE TFUHJE ʜ VOTFUDBQT DSFBUFUISFBE TFUDBQT EFTUSPZUISFBE QSDUM TFUVJETFUHJEDBQT UISFBE PXOFSVTFS ˞$(*দຊΒͷΞΫηε੍ޚΞʔΩςΫνϟ $(*QSPDFTT PXOFSVTFS QIQDHJJOEFYQIQ PXOFSVTFS $(*QSPDFTT PXOFSVTFS GPSL UFSNJOBUFQSPDFTT FYFDWF

Slide 190

Slide 190 text

• 1ϦΫΤετ1ϓϩηε઎༗͢ΔαʔόϞσϧલఏ • DSO͸εϨουͷ༗ແʹؔΘΒͣαʔόϓϩηεʹ૊Έࠐ·ΕͨΠϯλϓϦ λ͕௚઀ϓϩάϥϜΛ࣮ߦ • εϨουΛҰ࣌తʹ࡞Δ͜ͱʹΑΔηΩϡϦςΟϨϕϧͷ௿Լ͸ੜ͡ͳ͍ 190 WebαʔόϞσϧͱ੍ޚ༻εϨουͷߟ࡯

Slide 191

Slide 191 text

• mod_process_securityϞδϡʔϧ • ઃఆ͸ҎԼͷΑ͏ʹγϯϓϧ 191 LinuxͰApacheϞδϡʔϧͱ࣮ͯ͠૷

Slide 192

Slide 192 text

• Apache httpdʹରͯ͠ఏҊΞʔΩςΫνϟΛ࣮૷ • ඵؒͷϦΫΤετ਺ΛมԽͤ͞Ϩεϙϯε਺Λܭଌ • phpinfo()Λग़ྗ͢Δ͚ͩͷ؆୯ͳϓϩάϥϜΛ༻ҙ • ֤ख๏ͷੑೳΛධՁ 192 ੑೳධՁ

Slide 193

Slide 193 text

࣮ݧ؀ڥ 193

Slide 194

Slide 194 text

DSO࣮ߦํࣜͷΞΫηε੍ޚੑೳൺֱ w ඵؒϦΫΤετ਺Λ૿Ճͤ͞ͳ͕Βඵ ؒϨεϙϯε਺Λܭଌ w ྘ͷNPE@SVJEΛར༻ͨ͠ΞΫηε੍ ޚ͸΄ͱΜͲੑೳ͕Ͱ͍ͯͳ͍ w ੺ͷদຊΒͷΞΫηε੍ޚ͸ΞΫηε ੍ޚແ͠ͷ৔߹ͱൺ΂ͯ΋΄ͱΜͲΦʔ όʔϔου͸ແ͠ ੨ɿΞΫηε੍ޚແ͠ ੺ɿদຊΒͷΞΫηε੍ޚ ྘ɿNPE@SVJE౳ͷΞΫηε੍ޚ 194

Slide 195

Slide 195 text

CGI࣮ߦํࣜͷΞΫηε੍ޚੑೳൺֱ w ඵؒϦΫΤετ਺Λ૿Ճͤ͞ͳ͕ΒඵؒϨ εϙϯε਺Λܭଌ w $(*ͷΞΫηε੍ޚͷ༗ແʹؔΘΒͣ$(* ͷ࣮ߦํࣜͷΦʔόʔϔου͕େ͖͍ͨΊɺ ΞΫηε੍ޚʹΑΔΦʔόʔϔου͸ແ͍ ੨ɿΞΫηε੍ޚແ͠ ੺ɿদຊΒͷΞΫηε੍ޚ ྘ɿTV&9&$ 195

Slide 196

Slide 196 text

࣮ߦํࣜ ΞΫηε੍ޚద༻ʹΑΔεϧʔϓοτ௿Լ཰ $(* TV&9&$ NPE@QSPDFTT@TFDVSJUZ %40 NPE@SVJE౳ NPE@QSPDFTT@TFDVSJUZ 196

Slide 197

Slide 197 text

• phpinfo()΁ͷΞΫηεΛstrace͔Βղੳ • CGI ʴ suEXEC: 3377ճ • mod_php + mod_process_security: 155ճ • ΦʔόʔϔουʹͳͬͯΔγεςϜίʔϧ • clone() open() close() execve() ͳͲsuEXECؔ࿈ ˞TUSBDFDGQ1*% ˞DBUDHJMPHcHSFQWFQPMM@XBJUcHSFQWGVUFYcQFSMBOF QSJOU@JG 197 ࢀߟɿγεςϜίʔϧͷ਺Λൺֱ

Slide 198

Slide 198 text

ࢀߟɿಋೖલޙͷCPU࢖༻ྔൺֱ Ұ೔ͷΞΫηε਺͸ͲͪΒͷαʔό΋໿ສʢαʔϏεશମͰ͸਺ेԯʣ $(*ʴTV&9&$ %40ʴNPE@QSPDFTT@TFDVSJUZ ˙TZTUFN ˙VTFS ˙JEMF 198

Slide 199

Slide 199 text

• ߴूੵϚϧνςφϯτํࣜʹ͓͍ͯηΩϡϦςΟͱੑೳΛཱ྆ͨ͠ख๏ • αʔόϓϩηεͦͷ΋ͷʹ೚ҙͷίϚϯυΛ࣮ߦͰ͖Δ৔߹͸Ͳ͏ͳΔ͔ • ϓϩηεΛڞ༗͢ΔݶΓWebαʔόͷΞʔΩςΫνϟ্ϦεΫ͕͋Δ • ͦͷ৔߹͸ίετͷ؍఺͔ΒVM΍ίϯςφͷִ཭Λݕ౼͢Δ • ίϯςφϨϕϧͷ੬ऑੑͰίϯςφͷ֎ʹग़ΒΕΔϦεΫ͸ʁ • Ϧιʔείετ͸ߴ͘ͳΔ͕VMϨϕϧͰͷִ཭Λݕ౼͢Δ΂͖ 199 ·ͱΊͱϦεΫ

Slide 200

Slide 200 text

ͦͷଞ࠷৽ͷݚڀಈ޲

Slide 201

Slide 201 text

201 • Time-of-check to time-of-Use Race Condition • ҎԼͷॲཧΛUNIX͸ΞτϛοΫʹͰ͖ͳ͍ • ϑΝΠϧ͕ϦϯΫ͔ɺϑΝΠϧ·ͰͷύεʹϦϯΫؚ͕·ΕΔ͔ɺͦͷݕࠪ ޙʹϑΝΠϧΛopen()͢ΔΑ͏ͳॲཧ • Webίϯςϯπ͕ࣗ༝ͳϗεςΟϯάʹ͓͍ͯ͸େ͖ͳ໰୊ͱͳΔ • Ϛϧνϓϩηεͷαʔόιϑτ΢ΣΞͰ͸λΠϛϯάʹΑͬͯ͸ϦϯΫͷνΣο ΫޙʹผϑΝΠϧʹ͢Γସ͑ΒΕΔՄೳੑ༗Γ ϦϯΫݕࠪͷTOCTOU໰୊

Slide 202

Slide 202 text

202 • ͱ͋ΔԾ૝ϗετA͕੬ऑੑΛಥ͔ΕΔ • ϨʔείϯσΟγϣϯΛར༻ͯ͠ଞϗετBͷ.cgiʹରͯ͠.txtͷϦϯΫΛషΔ • γϯϘϦοΫϦϯΫ͸ϑΝΠϧͷଘࡏ֬ೝແ͘࡞੒͕Մೳ • Ծ૝ϗετํࣜ͸੩తϑΝΠϧͷ৔߹αʔόϓϩηεͷΦʔφͰread • ඇϦϯΫ൑ఆޙͰ͋ΔͨΊϗετBͷ.cgiʹॻ͔Εͨid/pass͕ӾཡՄೳ ଞϗετͷid/passΛऔಘ͞ΕΔέʔε

Slide 203

Slide 203 text

ϑΝΠϧ͕ϦϯΫ͔ݕࠪ ϑΝΠϧͷύεʹϦϯΫ͕ ؚ·ΕΔ͔ݕࠪ ϑΝΠϧΛPQFO ͯ͠ Ϩεϙϯεੜ੒ॲཧ 8FCαʔόϓϩηεXPSLFS" ϑΝΠϧΛϦϯΫʹ ஔ͖׵͑ ϨʔείϯσΟγϣϯͷ Մೳੑ 0, 0, ϦϯΫͷνΣοΫޙʹ ผϗετͷϑΝΠϧ ʹஔ͖׵͑ΒΕͯ೷͖ݟ ͞ΕΔՄೳੑ͋Γ 8FCαʔόϓϩηεXPSLFS#

Slide 204

Slide 204 text

204 • ϗεςΟϯάཁ݅ʹ͓͍ͯ͸ղܾՄೳ • ಉҰॴ༗ऀͷϦϯΫ͸࠷ѱݕ஌Ͱ͖ͳͯ͘΋ྑ͍ • ݕ஌͢΂͖͸ଞϗετɺͭ·Γɺଞͷॴ༗ऀͷϑΝΠϧ΁ͷϦϯΫ͔Ͳ͏͔ • ϑΝΠϧopen()ޙʹfd͔ΒΦʔφνΣοΫ • ͦͷԾ૝ϗετͰઃఆ͍ͯ͠ΔΦʔφͱopen()ͨ͠ϑΝΠϧͷॴ༗ݖΛൺֱ mod_fileownercheck [27] [27] Ryosuke Matsumotoɼhttps://github.com/matsumotory/mod_fileownercheck.

Slide 205

Slide 205 text

ϑΝΠϧΛPQFO GEͷPXOFSͱԾ૝ϗετͷઃ ఆͰڐՄ͍ͯ͠ΔPXOFSݕࠪ Ϩεϙϯεੜ੒ॲཧ ϑΝΠϧΛϦϯΫʹ ஔ͖׵͑ ผϗετͷϦϯΫ ʹ͸ஔ͖׵͑ΒΕͳ͍ 8FCαʔόϓϩηεXPSLFS" 8FCαʔόϓϩηεXPSLFS#

Slide 206

Slide 206 text

206 • ϦϯΫ࡞੒ͷϨʔείϯσΟγϣϯࣗମ͸๷͛ͳ͍ • ϗεςΟϯάཁ݅ʹ͓͍ͯผͷॴ༗ऀϑΝΠϧ΁ͷϦϯΫ͸๷͛Δ • fdͷownerͱopen()ͨ͠ϑΝΠϧͷownerൺֱͰ͸μϝ • ύεʹϦϯΫؚ͕·ΕΔ৔߹Λݕ஌Ͱ͖ͳ͍ • Ծ૝ϗετͷownerΛ੩తʹอ͓࣋ͯ͘͠ • υΩϡϝϯτϧʔτͷΦʔφ΍suEXECͷઃఆ͔Βऔಘ͢ΔͳͲ޻෉͕ඞཁ ஫ҙ఺

Slide 207

Slide 207 text

ηΫγϣϯͷ·ͱΊ

Slide 208

Slide 208 text

1. γεςϜྖҬ΍ଞϗετྖҬͷ೷͖ݟ 2. CGI࣮ߦํࣜͷηΩϡϦςΟ 3. DSO࣮ߦํࣜͷηΩϡϦςΟ(1)~(4) 4. ͦͷଞ࠷৽ͷݚڀಈ޲ 208 ηΩϡϦςΟͱੑೳ

Slide 209

Slide 209 text

6. ηΩϡϦςΟͱӡ༻ٕज़

Slide 210

Slide 210 text

ηΫγϣϯͷ֓ཁ

Slide 211

Slide 211 text

1. ΞΫηε੍ޚͱ࣮ફతͳ؅ཧٕज़ 2. ΞΫηε੍ޚͱ৽نϗετ௥Ճ 3. ߴ଎͔ͭলϝϞϦʹಈ࡞͢ΔWebαʔόͷػೳ֦ுػߏ 4. ͦͷଞ࠷৽ͷݚڀಈ޲ 211 ηΩϡϦςΟͱӡ༻ٕज़

Slide 212

Slide 212 text

࣮ફతͳΞΫηε੍ޚͱ؅ཧٕज़

Slide 213

Slide 213 text

• ߴूੵϚϧνςφϯτΞʔΩςΫνϟͷηΩϡϦςΟͱӡ༻ٕज़ • ηΩϡϦςΟΛ୲อ͢ΔͨΊʹӡ༻ٕज़͕ෳࡶԽ͢Δ͜ͱ͸ආ͚͍ͨ • ApacheͷVirtualHostํࣜ͸ऩ༰ޮ཰͕ྑ͍ • ҰํͰɺऩ༰਺͕૿͑Δ͜ͱʹΑΓӡ༻໘ͷ՝୊͕ੜ͡Δ • ߴूੵϚϧνςφϯτΞʔΩςΫνϟͷηΩϡϦςΟΛલఏͱͯ͠ӡ༻ٕज़ͷ ࣮ફతͳख๏ͷ੔ཧͱ࠷৽ಈ޲Λ঺հ͢Δ 213 ߴूੵϚϧνςφϯτΞʔΩςΫνϟͷӡ༻ٕज़

Slide 214

Slide 214 text

• suEXEC͸CGI࣮ߦํࣜͷΞΫηε੍ޚख๏ • Shebangߦͷద੾ͳهड़ • ྫ͑͹PHP͸جຊతʹShebangߦΛهड़ͤͣʹར༻͍ͨ͠ • Φʔφ΍ύʔϛογϣϯ౳ͷݖݶͷઃఆ • ϗεςΟϯάαʔϏεར༻ऀʹద੾ʹࢦࣔ͢Δඞཁ͋Γ 214 suEXECʹΑΔϓϩάϥϜͱΠϯλϓϦλͷඥ͚ͮ

Slide 215

Slide 215 text

• Pros • Shebangߦͷهड़΍࣮ߦݖݶͷઃఆΛলུՄೳ • suEXECͱಉ༷ʹCGIϓϩάϥϜΛ֤ϗετͷϢʔβݖݶͰ࣮ߦՄೳ • Cons • suEXECͱಉ༷ʹVirtualHost୯ҐͰuidɺgidͷݸผઃఆ͕ඞཁͰઃఆ਺૿Ճ • suEXECͱಉ༷ʹγεςϜྖҬͷ೷͖ݟ͕Մೳ 215 SebastianΒʹΑΔsuPHP [27] <>.4FCBTUJBO TV1)1)PNFQBHF IUUQXXXTVQIQPSH)PNFIUNM

Slide 216

Slide 216 text

• suEXECͱͷซ༻͢Δ͜ͱͰݖݶ෼཭͕Մೳ • Pros • Shebangߦͷهड़΍࣮ߦݖݶͷઃఆΛলུՄೳ • Cons • ࣮ߦՄೳͳྖҬʹϥούʔϓϩάϥϜͷઃஔ͕ඞཁ • suEXECͱಉ༷ʹγεςϜྖҬͷ೷͖ݟ͕Մೳ 216 mod_actions [28] <>5IF"QBDIF4PGUXBSF'PVOEBUJPO "QBDIF.PEVMFNPEBDUJPOT IUUQIUUQEBQBDIFPSHEPDT FONPENPEBDUJPOTIUNM

Slide 217

Slide 217 text

• suEXECϓϩάϥϜͷதͰΠϯλϓϦλͱͷඥ෇͚Λߦ͏Α͏ʹ֦ு • Pros • Shebangߦͷهड़΍࣮ߦݖݶͷઃఆΛলུՄೳ • ෳ਺ͷϞδϡʔϧ΍ϥούʔΛඞཁͱ͠ͳ͍ • suEXEC࣮ߦ࣌ʹchroot͔ͯ͠Β࣮ߦ͢ΔͨΊγεςϜྖҬΛӾཡෆՄ • Cons: ShebangߦΛඞཁͱ͠ͳ͍ݴޠͷඥ෇͚͕ࣄલʹඞཁ 217 দຊΒʹΑΔsuEXECͷ֦ு [29] <>দຊ྄հɼ઒ݪক࢘ɼদԬً෉ɼlେن໛ڞ༗ܕ8FCόʔνϟϧϗεςΟϯάج൫ͷηΩϡϦςΟͱӡ༻ ٕज़ͷվળɼz৘ॲֶ࿦ɼWPM OP QQr .BSDI

Slide 218

Slide 218 text

ΞΫηε੍ޚͱ৽نϗετ௥Ճ

Slide 219

Slide 219 text

• ୯Ұͷαʔόϓϩηε܈Ͱ਺ສͷϗετΛ؅ཧ͢ΔߴूੵϚϧνςφϯτํࣜ • ઃఆͷมߋ΍ϗετ৽ن௥Ճ࣌ʹ͸αʔόϓϩηεͷ࠶ಡࠐ͕ඞཁ • ࠶ಡࠐʹ͕͔͔࣌ؒΔͱαʔϏε඼࣭ͷ௿Լʹͭͳ͕Δ • ৽نϗετͷ௥Ճઃఆ΍νϡʔχϯά͸࠶ಡࠐͤͣʹߦ͍͍ͨ 219 Ծ૝ϗετํࣜͷઃఆಡΈࠐΈͷ՝୊

Slide 220

Slide 220 text

• େྔͷԾ૝ϗετઃఆΛಈతʹઃఆ͢ΔϞδϡʔϧ • Ծ૝ϗετͷઃఆ͸ϗετ໊ΛΩʔʹಈతʹઃఆͰ͖Δ͜ͱ͕ଟ͍ • υΩϡϝϯτϧʔτ͸%0ม਺ΛυϝΠϯʹಡΈସ͑ͯಈతʹܾఆ͢Δ • ಈతʹઃఆ͢Δ͜ͱʹΑΓσΟϨΫτϦߏ଄͑͞࡞͓͚ͬͯ͹ɺϦΫΤετʹ Ԡͯ͡ಈతʹίϯςϯπͷ୳ࡧΛߦ͏ • ৽نԾ૝ϗετ௥ՃͷͨΊͷαʔόϓϩηεͷ࠶ಡࠐ͕ෆཁ 220 mod_vhost_alias [30] <>5IF"QBDIF4PGUXBSF'PVOEBUJPO "QBDIF.PEVMFNPEWIPTUBMJBT IUUQIUUQEBQBDIFPSHEPDT NPENPEWIPTUBMJBTIUNM

Slide 221

Slide 221 text

• suEXECΛར༻͢ΔͨΊʹ͸ݸผͷઃఆ͕ඞཁͱͳΓཱ͕྆Ͱ͖ͳ͍ • ϗετͷ਺͚ͩઃఆ਺͕૿Ճ͠αʔόϓϩηεͷϝϞϦ࢖༻ྔ૿Ճ 221 mod_vhost_aliasͷ՝୊

Slide 222

Slide 222 text

• αʔόϓϩηεͷϝϞϦ࢖༻ྔʢRSSʣ͸4GBఔ౓·Ͱ૿Ճ • 4GBͷαʔόϓϩηε͕fork()ʹΑͬͯCGIΛ࣮ߦ͢Δͱੑೳ͕ग़ͳ͍ • fork()ʹΑΔϖʔδςʔϒϧΤϯτϦʢPTE)ͷϙΠϯλίϐʔ͕ଟൃ • execv()ʹΑΔPTEͷϙΠϯλ࡟আ͕ଟൃ • ݁ՌతʹCGIΛ࣮ߦ͢ΔͨΊʹ1ϦΫΤετ1ඵҎ্ͷCPU࢖༻͕࣌ؒඞཁ • WebαʔόͰར༻͢ΔΑ͏ͳXeonͷ2.4GHzఔ౓ͷCPUੑೳΛલఏ 222 ྫɿ10ສϗετ෼ͷઃఆΛApacheͰಡΈࠐΉ৔߹

Slide 223

Slide 223 text

• suEXECͷuid/gidΛdummyͰઃఆ্ͨ͠Ͱ࣮ߦ͢ΔίϯςϯπϓϩάϥϜ͔ ΒಈతʹΦʔφ৘ใΛऔಘͰ͖ΔΑ͏ʹsuEXECΛվम • mod_vhost_aliasͷ؀ڥม਺ʹอଘ͞ΕΔυΩϡϝϯτϧʔτ΋ಈతʹಡΈସ ͑ͨਖ਼͍͠ύεʹͳΔΑ͏ʹվम • ૊Έ߹ΘͤΔ͜ͱʹΑΓ୯ҰͷઃఆͰ਺ສͷԾ૝ϗετઃఆΛಈతʹهड़Մೳ 223 দຊΒʹΑΔmod_vhost_aliasͱsuEXECͷվྑ[31] <>দຊ྄հɼ઒ݪক࢘ɼদԬً෉ɼlେن໛ڞ༗ܕ8FCόʔνϟϧϗεςΟϯάج൫ͷηΩϡϦςΟͱӡ༻ ٕज़ͷվળɼz৘ॲֶ࿦ɼWPM OP QQr .BSDI

Slide 224

Slide 224 text

• લड़ͨ͠mod_vlimit΍mod_lalimitɺmod_resource_checker͸શͯ.htaccess Ͱ࠶ಡࠐ͢Δ͜ͱͳ͘ઃఆΛ൓өՄೳʹ͍ͯ͠Δ • mod_vlimitɿ֘౰ϑΝΠϧ΍ϗετͷಉ࣌઀ଓ਺Λ੍ݶ • mod_lalimitɿ֘౰ϑΝΠϧ΍ϗετ΁ͷΞΫηεΛ෇ՃʹԠ੍ͯ͡ݶ • mod_resource_checkerɿϨεϙϯεੜ੒ʹཁ͢ΔϦιʔεྔ΍ϦΫΤετ ৘ใΛܭଌͯ͠ϩΪϯά 224 ੍ޚػೳ΋αʔόϓϩηε࠶ىಈΛෆཁʹ͓ͯ͘͠

Slide 225

Slide 225 text

ߴ଎͔ͭলϝϞϦʹಈ࡞͢ΔWebαʔόͷ ػೳ֦ுػߏ

Slide 226

Slide 226 text

• Webαʔόͷػೳ֦ுʹ͓͍ͯੑೳΛߟྀͨ͠৔߹͸CݴޠʹΑΔ࣮૷͕ఆ൪ • ैདྷͷWebαʔόͷεΫϦϓτݴޠʹΑΔ֦ு͸ੑೳ໘ͱ҆શੑʹ՝୊ • αʔόϓϩηε΁ͷΠϯλϓϦλ૊ΈࠐΈͷΞʔΩςΫνϟͷఏҊ͕ॏཁ 226 WebαʔόΛϓϩάϥϜϒϧʹ੍ޚ͢Δݚڀ

Slide 227

Slide 227 text

• ΠϯλϓϦλڞ༗ํࣜʢmod_perlɺmod_rubyʣ • αʔόϓϩηεىಈ࣌ʹ୯ҰͷΠϯλϓϦλ֬อ • ϦΫΤετॲཧ࣌ʹෳ਺ͷεΫϦϓτͰΠϯλϓϦλڞ༗ • άϩʔόϧͷঢ়ଶ΋ڞ༗ • ߴػೳ͔ͭن໛ͷେ͖͍ΠϯλϓϦλʹ࠷ద 227 ҰൠతͳεΫϦϓτʹΑΔػೳ֦ுํࣜʢ̍ʣ

Slide 228

Slide 228 text

• ෳ਺ΠϯλϓϦλํࣜʢmod_luaʣ • εΫϦϓτ࣮ߦʢϦΫΤετॲཧʣ୯ҐͰΠϯλϓϦλ֬อ • άϩʔόϧͳঢ়ଶ͸ಠཱͰ҆શ • ΠϯλϓϦλ͕֬อ͢Δঢ়ଶ΋౎౓։์ͯ͠লϝϞϦ • ௿ػೳͰߴ଎ɾলϝϞϦͳ૊ΈࠐΈεΫϦϓτݴޠͳͲʹ࠷ద 228 ҰൠతͳεΫϦϓτʹΑΔػೳ֦ுํࣜʢ̎ʣ

Slide 229

Slide 229 text

ػೳ֦ு NPE@QFSM NPE@SVCZ NPE@MVB ݴޠ $ 1FSM 3VCZ -VB ΠϯλϓϦλॳظԽ ॲཧ ࣄલ ౎౓ ϥΠϒϥϦಡΈࠐΈ ࣄલ ౎౓ ίϯύΠϧ ࣄલ ౎౓ ౎౓ ίʔυͷมߋ ෆՄ Մ Մ άϩʔόϧঢ়ଶ ڞ༗ ڞ༗ ඇڞ༗ 229

Slide 230

Slide 230 text

• ΠϯλϓϦλڞ༗ํࣜͷ՝୊ • άϩʔόϧঢ়ଶ͕ෳ਺εΫϦϓτͰׯব • ࣮ߦ࣌ͷόΠτίʔυ૿ՃʹΑΔϝϞϦͷ૿Ճ • ෳ਺ΠϯλϓϦλํࣜͷ՝୊ • ϦΫΤετຖͷΠϯλϓϦλ֬อɾ։์ͷίετ͕ߴ͍ 230 εΫϦϓτݴޠʹΑΔϛυϧ΢ΣΞ֦ுͷ՝୊

Slide 231

Slide 231 text

VM •  •  •  231

Slide 232

Slide 232 text

• ੑೳ͕ཁٻ͞ΕΔՕॴ͸ΠϯλϓϦλڞ༗ • ੑೳ͕ཁٻ͞Εͳ͍Օॴ͸ݸผʹΠϯλϓϦλ֬อ • ϝϞϦ૿ՃͷݪҼͰ͋ΔόΠτίʔυͷΈΛ։์ • ҆શੑͷ໘Ͱάϩʔόϧͷঢ়ଶͷΈΛ։์Մೳ • όΠτίʔυΩϟογϡʹΑΔߴ଎Խ΋Մೳ 232 দຊΒͷΞʔΩςΫνϟ [32] <>দຊ྄հ Ԭ෦णஉ NPE@NSVCZεΫϦϓτݴޠͰߴ଎͔ͭলϝϞϦʹ֦ுՄೳͳ8FCαʔόͷػೳ֦ுࢧ ԉػߏ ৘ใॲཧֶձ࿦จࢽɼ7PM /P QQ /PW

Slide 233

Slide 233 text

਌αʔόϓϩηε ࢠαʔόϓϩηε" ϦΫΤετॲཧ༻ΠϯλϓϦλ ىಈ࣌ॲཧ༻ΠϯλϓϦλ ϦΫΤετҎ֎ͷॲཧ༻ΠϯλϓϦλ εΫϦϓτ εΫϦϓτ εΫϦϓτ εΫϦϓτ εΫϦϓτ ੑೳ͕ཁٻ͞ΕΔϑοΫ ͸ΠϯλϓϦλΛڞ༗ ɾ ɾ ɾ 233

Slide 234

Slide 234 text

w αʔόϓϩηεىಈ࣌ʹΠϯλϓ ϦλΛ֬อ w ϦΫΤετॲཧ࣌ʹΠϯλϓϦλ Λڞ༗ͯ͠εΫϦϓτΛίϯύΠϧ ͔ͯ͠Β࣮ߦ ߏจ໦ղੳ όΠτίʔυੜ੒ 7.্Ͱ࣮ߦ ϦΫΤετຖʹαʔόϓϩηε͕εΫϦϓτΛϑοΫ εΫϦϓτಡΈࠐΈ ΠϯλϓϦλͱ ϥΠϒϥϦΛڞ༗ όΠτίʔυɺάϩʔόϧม਺ɾΫϥεɺྫ֎ϑϥάΛ։์ ഉଞॲཧ ϚϧνεϨου8FC αʔόΞʔΩςΫνϟ ʹରԠ 234

Slide 235

Slide 235 text

ߏจ໦ղੳ όΠτίʔυੜ੒ 7.্Ͱ࣮ߦ ϦΫΤετຖʹαʔόϓϩηε͕εΫϦϓτΛϑοΫ εΫϦϓτಡΈࠐΈ ΠϯλϓϦλͱ ϥΠϒϥϦΛڞ༗ άϩʔόϧม਺ɾΫϥεɺྫ֎ϑϥάΛ։์ όΠτίʔυ ςʔϒϧ w όΠτίʔυΩϟογϡʹΑͬͯαʔ όϓϩηεىಈޙʹίʔυมߋ͕ඞ ཁͳ͍৔߹͸ߴ଎Խ w αʔόىಈ࣌ʹίϯύΠϧͯ͠όΠ τίʔυςʔϒϧʹอଘ͓͖ͯ͠ɺ ϦΫΤετ࣌ʹऔಘ࣮ͯ͠ߦ 235

Slide 236

Slide 236 text

• ApacheϞδϡʔϧͷmod_mrubyͱ࣮ͯ͠૷ • nginxϞδϡʔϧͷngx_mrubyͱͯ͠΋࣮૷ • mrubyͱ͍͏ܰྔRubyΠϯλϓϦλΛར༻ • RubyͰWebαʔόͷৼΔ෣͍Λ֦ுՄೳ • దࡐదॴͱͯ͠ैདྷͷCݴޠͷ࣮૷ͱڞଘՄೳ 236 ΞʔΩςΫνϟͷ࣮૷

Slide 237

Slide 237 text

mod_mrubyͷػೳ֦ுͷ֓ཁਤ 237

Slide 238

Slide 238 text

mod_mrubyઃఆྫ # Normal hook mrubyHandlerMiddle /path/to/test.rb # ByteCode Caching at Start up mrubyHandlerMiddle /path/to/test.rb cache 238

Slide 239

Slide 239 text

mod_mrubyઃఆྫ # Normal hook mrubyHandlerMiddle /path/to/test.rb # ByteCode Caching at Start up mrubyHandlerMiddle /path/to/test.rb cache 239

Slide 240

Slide 240 text

ngx_mrubyͷΠϯϥΠϯઃఆྫ # Inline code hook location /mruby-hello { mruby_content_handler_code ‘ r = Nginx::Request.new c = Nginx::Connection.new r.content_type = “text/plain” Nginx.echo “Hello #{c.remote_ip} World” ‘; } 240

Slide 241

Slide 241 text

mod_mrubyͰͷReverse Proxy # mrubyTranslateNameFirst “/path/to/proxy.rb” backends = [ "http://192.168.0.101:8888/", "http://192.168.0.102:8888/", "http://192.168.0.103:8888/", ] r = Apache::Request.new backend = backends[rand(backends.length)] r.reverse_proxy backend + r.unparsed_uri 241

Slide 242

Slide 242 text

ngx_mrubyͰͷReverse Proxy # location /proxy { # mruby_set $backend "/path/to/proxy.rb"; # proxy_pass http://$backend; # } backends = [ "http://192.168.0.101:8888/", "http://192.168.0.102:8888/", "http://192.168.0.103:8888/", ] backends[rand(backends.length)] 242

Slide 243

Slide 243 text

mod_mrubyͷBasicAuth with Redis # # AuthType basic # AuthName "Message for clients" # AuthBasicProvider mruby # mrubyAuthnCheckPassword /path/to/authn_basic.rb # require valid-user # anp = Apache::AuthnProvider.new redis = Redis.new "127.0.0.1”, 6379 if redis.get(anp.user) == anp.password Apache.return Apache::AuthnProvider::AUTH_GRANTED else Apache.return Apache::AuthnProvider::AUTH_DENIED end 243

Slide 244

Slide 244 text

ҟͳΔWebαʔόͷ౷Ұత֦ுهड़ "QBDIF "1* 3VCZTDSJQU NPE@NSVCZ 3VCZTDSJQU ɾ ɾ ɾ ɾ 3VCZTDSJQUO /HJOY "1* OHY@NSVCZ 3VCZTDSJQU "QBDIF $PSF /HJOY $PSF 3VCZ %4- GPS8FC "QBDIF 5SB⒏D 4FSWFS "1* UT@NSVCZ "QBDIF 5SB⒏D 4FSWFS $PSF SFGIUUQTHJUIVCDPNTZVDSFBNUT@NSVCZ 244

Slide 245

Slide 245 text

౷Ұతهड़ྫ # Output Hello World Server = get_server_calss Server.rputs "Hello #{Server.module_name}/ #{Server.module_version} world!" # mod_mruby => "Hello mod_mruby/1.9.3 world!" # ngx_mruby => "Hello ngx_mruby/1.3.2 world!" # ts_mruby => "Hello ts_mruby/0.0.1 world!" 245

Slide 246

Slide 246 text

• ੑೳධՁ • Hello Worldग़ྗͷ୯७ͳϓϩάϥϜʢΠϯλϓϦλͷੑೳͰ͸ͳ͘૊Έࠐ ΈΞʔΩςΫνϟͷੑೳΛ࠷େԽ͢ΔͨΊʣ • দຊΒͷख๏ͱؔ࿈ݚڀͰ࣮ߦ͠ඵؒͷϨεϙϯε਺Λܭଌ • ಉ࣌઀ଓ਺100ɾ૯઀ଓ਺10ສ 246 ࣮ݧ

Slide 247

Slide 247 text

࣮ݧ؀ڥ 247

Slide 248

Slide 248 text

ؔ࿈ݚڀͱͷੑೳൺֱ ػೳ֦ு NPE@QFSM NPE@SVCZ NPE@MVB NPE@NSVCZ NPE@NSVCZ Ωϟογϡ ݴޠ $ 1FSM 3VCZ -VB NSVCZ NSVCZ ΠϯλϓϦλ ॳظԽॲཧ ࣄલ ౎౓ ࣄલ ࣄલ ϥΠϒϥϦ ಡΈࠐΈ ࣄલ ౎౓ ࣄલ ࣄલ ίϯύΠϧ ࣄલ ౎౓ ౎౓ ౎౓ ࣄલ ίʔυͷมߋ ෆՄ Մ Մ Մ ෆՄ άϩʔόϧঢ়ଶ ڞ༗ ڞ༗ ඇڞ༗ ඇڞ༗ ඇڞ༗ ੑೳ 3FTQPOTFTFD 248

Slide 249

Slide 249 text

೥ͷੈքதͷ8FCϑϨʔϜϫʔΫͷ଎౓Λڝ͏ίϯςετ $ɺ$ɺ+BWBɺ(P౳ͷத3VCZͰؤு͍ͬͯΔҐ SFGIUUQTXXXUFDIFNQPXFSDPNCFODINBSLT

Slide 250

Slide 250 text

ݴޠΛ3VCZʹݶఆͨ݁͠Ռ Ґ SFGIUUQTXXXUFDIFNQPXFSDPNCFODINBSLT

Slide 251

Slide 251 text

• εΫϦϓτݴޠͰߴ଎͔ͭ҆શʹಈ࡞͢ΔWebαʔόػೳ֦ுࢧԉΞʔΩς Ϋνϟʹؔ͢ΔݚڀΛ঺հ • ैདྷݚڀΑΓ΋ߴ଎ͰWebαʔό׆༻έʔεͰ͸CݴޠͰͷ࣮૷ʹḮ৭ͳ͍ ΞʔΩςΫνϟΛ࣮ݱ • ޿͘࢖ΘΕ͍ͯΔWebαʔόιϑτ΢ΣΞͷϞδϡʔϧͱ࣮ͯ͠૷͠Φʔϓϯ ιʔειϑτ΢ΣΞͱͯ͠ެ։ → mod_mruby, ngx_mruby 251 ·ͱΊ

Slide 252

Slide 252 text

ͦͷଞ࠷৽ͷݚڀಈ޲

Slide 253

Slide 253 text

• C10k໰୊ͳͲ͔Βಉ࣌઀ଓ਺Λେ෯ʹվળ͍ͨ͠ • CPUͷίΞΛे෼ʹ࢖͍੾Γ͍ͨɾ઀ଓ਺Λϓϩηε਺ʹґଘͤ͞ͳ͍ • ϓϩηεͷI/OΛϊϯϒϩοΫɾඇಉظʹॲཧ͢Δ͜ͱͰղܾ • File I/O, Network I/O, sleep… • ࣮૷ྫͱͯ͠͸epoll()ͰfdͷεςʔλεΛ؂ࢹͯ͠ΠϕϯτΛൃՐ • I/OͷଟॏԽͱ΋ݴ͏͕͜ͷ࢓૊ΈΛΠϕϯτϧʔϓͱ࣮ͯ͠૷ 253 ϛυϧ΢ΣΞͷϊϯϒϩοΩϯάI/O

Slide 254

Slide 254 text

• mruby͸جຊతʹॲཧΛmrubyͰϒϩοΫͯ͠͠·͏ • ಉ࣌઀ଓ਺͕૿Ճͨ࣌͠ʹmrubyͷॲཧ͕ϘτϧωοΫʹͳΔ • mrubyͷॲཧ͕௕͍ͱޙଓͷϦΫΤετॲཧʹ஗Ԇ͕ੜ͡Δ 254 mrubyΛ૊ΈࠐΜͩϛυϧ΢ΣΞͷϊϯϒϩοΫ

Slide 255

Slide 255 text

255 mruby͕֤ϦΫΤετΛϒϩοΫ͢Δྫ SFRVFTUQSPDFTTJOH NSVCZ NSVCZ SFRVFTUQSPDFTTJOH SFRVFTUQSPDFTTJOH NSVCZ DSFBUFSFTQPOTF DSFBUFSFTQPOTF DSFBUFSFTQPOTF TFOESFTQPOTF OPOCMPDLJOHNJEEMFXBSFMJLFOHJOYJOTJOHMFQSPDFTT SFDWSFRVFTU BUUIFTBNFUJNF

Slide 256

Slide 256 text

256 mruby͕֤ϦΫΤετΛϒϩοΫ͢Δྫ SFRVFTU NSVCZ NSVCZ SFTQPOTF SFRVFTU SFRVFTU SFTQPOTF SFTQPOTF NSVCZ TFOESFTQPOTF SFDWSFRVFTU BUUIFTBNFUJNF Other responses are delayed in proportion to the time of processing of mruby blocking OPOCMPDLJOHNJEEMFXBSFMJLFOHJOYJOTJOHMFQSPDFTT

Slide 257

Slide 257 text

257 mruby͕֤ϦΫΤετΛϒϩοΫ͢Δྫ

Slide 258

Slide 258 text

258 mruby͕֤ϦΫΤετΛϊϯϒϩοΩϯάʹॲཧ͢Δ SFRVFTU SFTQPOTF SFRVFTU SFRVFTU SFTQPOTF SFTQPOTF TFOESFTQPOTF SFDWSFRVFTU BUUIFTBNFUJNF CMPDLJOH PQFSBJUPO NSVCZ CMPDLJOH PQFSBJUPO NSVCZ NSVCZ CMPDLJOH PQFSBJUPO OPOCMPDLJOHNJEEMFXBSFMJLFOHJOYJOTJOHMFQSPDFTT

Slide 259

Slide 259 text

259 mruby͕֤ϦΫΤετΛϊϯϒϩοΩϯάʹॲཧ͢Δ

Slide 260

Slide 260 text

• mrubyͷϒϩοΩϯά͢ΔϝιουΛϊϯϒϩοΩϯάϞʔυͰ࣮૷ • ϝιουͷॲཧ͕׬ྃ͢Δ·ͰmrubyͷॲཧΛҰ࣌ఀࢭ • mruby͔Βϛυϧ΢ΣΞͷΠϕϯτϧʔϓ΁ॲཧΛ໭͢ • ϝιουͷॲཧ͕׬ྃͨ͠ΒΠϕϯτϧʔϓ͔Β௨஌Λड͚mrubyͷॲཧΛ ࠶։ 260 ͲͷΑ͏ʹϊϯϒϩοΩϯάΛ࣮ݱ͢Δ͔ʁ

Slide 261

Slide 261 text

3VCZ4DSJQUʢ3VCZXPSMEʣ 1SPD 'JCFSSFTVNF mruby૊ΈࠐΈͷϛυϧ΢ΣΞͷϊϯϒϩοΩϯά 261 NJEEMFXBSF $XPSME NSC@TUBUF 'JCFS 3VCZCZUFDPEFJODMVEFE CMPDLJOHNFUIPE DGVODPGCMPDLJOHNFUIPE SVOCMPDLJOHPQFSBUJPOXJUIOPOCMPDLJOHNPEF TFUDBMMCBDLDGVODUPFWFOUMPPQPGNJEEMFXBSF DGVODPGNJEEMFXBSFPOFWFOUMPPQ QSPDFTTPUIFSSFRVFTUPOFWFOUMPPQ DBMMCBDLDGVOD SVOSFTVNFCZSVOOJOHQSPDPCKFDUGSPN$ DGVODPGNJEEMFXBSFXJUINSC@TUBUF SVOQSPDPCKFDUGSPN$ $VSSFOUNSVCZOPOCMPDLJOHNPEFM 3FRVFTU 'JCFSZJFME

Slide 262

Slide 262 text

non-blocking sleep sample script 262

Slide 263

Slide 263 text

async sleepͷαϯϓϧ 263

Slide 264

Slide 264 text

RubyεΫϦϓτΛFiberͰแΉ 264

Slide 265

Slide 265 text

RubyεΫϦϓτΛFiberͰแΜͰlambdaΛฦ͢ 265

Slide 266

Slide 266 text

Cଆ͔ΒRubyͰ࡞ͬͨFiberΦϒδΣΫτΛ࣮ߦ 266 SFUVSOUPFWFOUMPPQXIFOpCFSJTBMJWJOH

Slide 267

Slide 267 text

CଆͷNginx::Async.sleep 267 QSPDDFTTPUIFSSFRVFTUT VOUJMDBMMCBDLGVODUJPO

Slide 268

Slide 268 text

RubyଆͷAsync.sleepͷ࣮૷ 268

Slide 269

Slide 269 text

ϛυϧ΢ΣΞͷΠϕϯτϧʔϓ͔Βcallback 269

Slide 270

Slide 270 text

ϒϩοΩϯάͱϊϯϒϩοΩϯάϞʔυͷੑೳධՁ 270 ϕϯνϚʔΫ ΫϥΠΞϯτ ϓϩΩγαʔό "1*αʔό ϨεϙϯελΠϜΛ ৭ʑมԽͤ͞Δ NSVCZΛհͯ͠"1*αʔό ͔ΒҰ෦৘ใΛऔಘͦ͠ΕΛ ݩʹϨεϙϯεΛฦ͢ ಉ࣌઀ଓ਺ΛมԽͤ͞ͳ͕Β ϕϯνϚʔΫΛ͔͚Δ 1.apiଆͷϨεϙϯελΠϜΛ1msec͔Β50msec·ͰมԽͤ͞ͳ͕Βɺಉ࣌઀ଓ਺100Ͱϕϯ νϚʔΫΛ͔͚ͯRequest/secΛܭଌ͢Δ 2.apiଆͷϨεϙϯελΠϜΛ10msecʹݻఆ͠ɺಉ࣌઀ଓ਺Λ1͔Β100ʹมԽͤͯ͞ Request/secΛܭଌ͢Δ

Slide 271

Slide 271 text

ੑೳද࣮ݧͷngx_mrubyͷઃఆʢൈਮʣ 271 "1*αʔόଆͷઃఆ QSPYZαʔόଆͷઃఆ

Slide 272

Slide 272 text

APIαʔόͷϨεϙϯεΛมԽͤͨ࣌͞ͷੑೳධՁ 272

Slide 273

Slide 273 text

ಉ࣌઀ଓ਺Λมߋͤͨ࣌͞ͷੑೳධՁ 273

Slide 274

Slide 274 text

• WebαʔόΛϓϩάϥϚϒϧʹ֦ுɾ੍ޚͰ͖ΔΑ͏ʹͳͬͨ • WebαʔόͷΑ͏ͳϛυϧ΢ΣΞʹϓϩάϥϛϯάݴޠΛ૊ΈࠐΈ • ૊ΈࠐΜͩݴޠͷॲཧࣗମ͕ϛυϧ΢ΣΞΛϒϩοΫ͢Δ͜ͱʹͳΔ • C10k໰୊ͷΑ͏ͳϊϯϒϩοΩϯάϛυϧ΢ΣΞͷରԠͱڝ߹͢Δ • ϛυϧ΢ΣΞͱ૊ΈࠐΈݴޠͦΕͧΕͰͷϊϯϒϩοΩϯάରԠ͕ඞཁ 274 ӡ༻ٕज़ʹؔ͢Δ࠷৽ͷݚڀಈ޲

Slide 275

Slide 275 text

ηΫγϣϯͷ·ͱΊ

Slide 276

Slide 276 text

1. ΞΫηε੍ޚͱ࣮ફతͳ؅ཧٕज़ 2. ΞΫηε੍ޚͱ৽نϗετ௥Ճ 3. ߴ଎͔ͭলϝϞϦʹಈ࡞͢ΔWebαʔόͷػೳ֦ுػߏ 4. ͦͷଞ࠷৽ͷݚڀಈ޲ 276 ηΩϡϦςΟͱӡ༻ٕज़

Slide 277

Slide 277 text

7. େن໛WebαʔόͷTLSূ໌ॻ؅ཧ

Slide 278

Slide 278 text

ηΫγϣϯͷ֓ཁ

Slide 279

Slide 279 text

1.ৗ࣌HTTPSԽͷഎܠͱຊݚڀͷ໨త 2.੩తʹূ໌ॻΛಡΈࠐΉํࣜ 3.ಈతʹূ໌ॻΛಡΈࠐΉํࣜ 4.੩తಡΈࠐΈͱಈతಡΈࠐΈͷൺֱ 279 େن໛WebαʔόͷTLSূ໌ॻ؅ཧ

Slide 280

Slide 280 text

ৗ࣌HTTPSԽͷഎܠͱূ໌ॻ؅ཧͷ֓ཁ

Slide 281

Slide 281 text

• HTTP/2ͷRFC࠾୒ͱ࣮༻ԽͷऔΓ૊Έ • GoogleʹΑΔৗ࣌HTTPSԽͷਪਐ • Let’s EncryptʹΑΔແྉͷDVূ໌ॻͷఏڙ • اۀ͚ͩͰͳ͘ݸਓͷWebαΠτͷHTTPSԽ΋ඞਢ 281 ݚڀͷഎܠ

Slide 282

Slide 282 text

• ݸਓ޲͚ͷ௿Ձ֨ϗεςΟϯάͰ࠾༻͞ΕΔ͜ͱͷଟ͍ํࣜ [36] • ୯ҰͷWebαʔόʹߴूੵ(਺ສυϝΠϯ)ʹϗετΛऩ༰ • Ծ૝ϗετํࣜʹΑΓେྔͷϗετΛಉҰϓϩηεͰॲཧ • ϦόʔεϓϩΩγͷ৔߹͸ߋʹߴूੵ(਺ेɺ਺ඦສυϝΠϯ) • ߴूੵϚϧνςφϯτํࣜͷHTTPSରԠ΋ٸ຿ 282 ߴूੵϚϧνςφϯτํࣜͷWebαʔό <>দຊ྄հ തֶ࢜Ґ࿦จ8FCαʔόͷߴूੵϚϧνςφϯτΞʔΩςΫνϟʹؔ͢Δݚڀ IUUQTSFQPTJUPSZLVMJCLZPUPVBDKQETQBDFIBOEMF ژ౎େֶ ೥݄

Slide 283

Slide 283 text

• Webαʔόϓϩηεىಈ࣌ʹશͯͷূ໌ॻΛಡΈࠐΉํࣜ • ߴूੵϚϧνςφϯτํࣜͰ͸ূ໌ॻ਺͕๲େ • ϝϞϦ࢖༻ྔ͕ূ໌ॻ਺ʹґଘͯ͠ϋʔυ΢ΣΞίετ૿Ճ • ϓϩηεىಈʹ௕͕͔͔࣌ؒΓઃఆมߋ࣌ͷӡ༻໘ʹ՝୊ • ࠓޙΛݟਾ͑ͯݚڀऀͱͯ͠ૣΊʹखΛ͏ͭඞཁ͕͋Δ 283 ߴूੵϚϧνςφϯτํࣜͷূ໌ॻઃఆͷ՝୊

Slide 284

Slide 284 text

2015೥Լظ͔ΒऔΓ૊Έ։࢝ޙ2016೥1݄ϦϦʔε 284 SFGIUUQICNBUTVNPUPSKQFOUSZ

Slide 285

Slide 285 text

• ߴूੵϚϧνςφϯτWebαʔόͷେن໛ূ໌ॻ؅ཧ • ূ໌ॻ਺ͷ૿Ճʹ൐͏Ϧιʔε࢖༻ྔͷ૿ՃΛ௿ݮ • αʔϏεఀࢭ͢Δ͜ͱͳ͘৽نઃఆΛ൓өՄೳ • ϗεςΟϯάαʔϏεͷϓϩμΫγϣϯ؀ڥʹಋೖͯ͠ධՁ • େྔͷূ໌ॻΛ؅ཧ͢Δϋʔυ΢ΣΞ΍؅ཧίετΛ௿ݮͤ͞Δ 285 େن໛ূ໌ॻ؅ཧͷඞཁੑͱධՁ

Slide 286

Slide 286 text

੩తʹূ໌ॻΛಡΈࠐΉํࣜͷ՝୊

Slide 287

Slide 287 text

1. HTTPSԽʹ൐͏ϋʔυ΢ΣΞίετͷ૿Ճ 2. ূ໌ॻ௥Ճ౳ͷઃఆมߋద༻࣌ؒͷ૿Ճ 287 ߴूੵϚϧνςφϯτํࣜͷऩ༰཰ͱӡ༻໘ͷ՝୊

Slide 288

Slide 288 text

• ϗετͷ਺ʹൺྫͯ͠ϗετઃఆɾূ໌ॻ΍ൿີ伴ͷσʔλɾHTTP/HTTPSॲ ཧʹඞཁͳϝϞϦ࢖༻ྔ͕૿େ • ΄ͱΜͲΞΫηεͷແ͍ϗετʹରͯ͠΋ઃఆ৘ใΛอ࣋ • Մ༻ੑͱอकੑΛߴΊΔͨΊʹHTTPS༻ͷϓϩΩγΛલஈʹஔ͍ͨ৔߹͸ όοΫΤϯυͷυϝΠϯΛશͯू໿͢Δඞཁ͋Γ • ฐࣾϗεςΟϯάαʔϏεͰ͸200ສυϝΠϯҎ্ 288 1. HTTPSԽʹ൐͏ϋʔυ΢ΣΞίετͷ૿Ճ

Slide 289

Slide 289 text

• αʔόϓϩηεىಈ࣌ʹશͯͷূ໌ॻ΍ઃఆΛಡΈࠐແඞཁ͕͋Δ • ϗετ୯ҐͰରԠ͢Δূ໌ॻͷϑΝΠϧ΍ઃఆΛهड़ • ߴूੵԽʹ൐͍ઃఆߦ਺ͷ૿େ΍؅ཧίετͷ૿େ͕՝୊ • ઃఆ਺૿Ճʹ൐͍αʔόϓϩηεͷ࠶ىಈ͕࣌ؒ૿Ճ • ઃఆͷ࠶ಡΈࠐΈॲཧ͢ΒαʔϏεఀࢭʹܨ͕ΔڪΕ༗Γ 289 2. ূ໌ॻ௥Ճ౳ͷઃఆมߋద༻࣌ؒͷ૿Ճ

Slide 290

Slide 290 text

ಈతʹূ໌ॻΛಡΈࠐΉํࣜ

Slide 291

Slide 291 text

• αʔόϓϩηεىಈ࣌ʹূ໌ॻ͸Ұ੾ಡΈࠐ·ͳ͍ • αʔόϓϩηεͷ࠶ىಈ/࠶ಡΈࠐΈ࣌ؒͷ௿଎ԽΛճආ • TLSϋϯυγΣΠΫ࣌ʹඞཁͳূ໌ॻͱઃఆΛಈతʹಡΈࠐΈ • ߴ଎ͳϓϩηε࠶ಡΈࠐΈʹΑΔϝϞϦղ์΋Մೳ • ূ໌ॻ΍ϗετͷ৽ن௥Ճઃఆʹϓϩηε࠶ىಈ͕ෆཁ 291 দຊΒͷূ໌ॻͷಈతಡΈࠐΈख๏ [37] <>3ZPTVLF.BUTVNPUP ,FOKJ3JLJUBLF ,FOUBSP,VSJCBZBTIJ -BSHFTDBMF$FSUJpDBUF.BOBHFNFOUPO .VMUJUFOBOU8FC4FSWFST 5IFUI*&&&*OUFSOBUJPOBM$0.14"$8PSLTIPQPO"SDIJUFDUVSF %FTJHO %FQMPZNFOUBOE.BOBHFNFOUPG/FUXPSLTBOE"QQMJDBUJPOT "%./&5 +VM

Slide 292

Slide 292 text

ΞʔΩςΫνϟʢํࣜʣͷఏҊ 292 'JMF,74 IUUQE
 QSPDFTT $MJFOU 4/*ʹΑͬͯTFSWFSOBNF͕FYBNQMFKQͷ υϝΠϯʹର͢Δ5-4ϋϯυγΣΠΫ͕։࢝ 5-4ϋϯυγΣΠΫ࣌ʹυϝΠϯFYBNQMFKQʹඥͮ͘ূ ໌ॻͱൿີ伴ΛϑΝΠϧ΍,FZ7BMVF4UPSF ,74 ͳͲ ͔ΒಈతʹಡΈࠐΈ͍ͨ

Slide 293

Slide 293 text

ΞʔΩςΫνϟʢํࣜʣͷఏҊ 293 'JMF,74 IUUQE
 QSPDFTT $MJFOU 5-4ϋϯυγΣΠΫ࣌ʹ೚ҙͷؔ਺Λ࣮ߦͰ͖Ε͹ྑ͍ ؔ਺ͷதͰυϝΠϯͱඥͮ͘αʔόূ໌ॻͱൿີ伴Λ ಡΈࠐΉؔ਺Λ࣮ߦͰ͖Ε͹ྑ͍

Slide 294

Slide 294 text

• 3೥ͿΓͷϝδϟʔϦϦʔε • https://www.openssl.org/news/openssl-1.0.2-notes.html • OpenSSLͷίʔυΛٱʑʹோΊ͍ͯͨ • TLSϋϯυγΣΠΫ࣌ʹؔ਺ΛίʔϧόοΫ͢Δؔ਺͕௥Ճ • SSL_CTX_set_client_cert_cb() ͳͲ 294 OpenSSL 1.0.2͕2015೥1݄22೔ʹϦϦʔε

Slide 295

Slide 295 text

• RubyͰΠϯϑϥઃܭʹԠͨ͡ಈతઃఆΛՄೳʹ͢ΔͨΊ • όοΫΤϯυͷܾఆ΋RubyͰॻ͍ͯnginxͷઃఆΛ؆ૉԽ • ূ໌ॻσʔλͷऔΓग़͠Λࣗ༝ʹબ୒Ͱ͖ΔΑ͏ʹ͢ΔͨΊ • RedisɺMySQLɺlocalmemcacheɺAPIͳͲmrbgemͷ׆༻ • ੑೳʹ໰୊͕ແ͚Ε͹RubyͰॻ͖͍ͨ 295 ͞Βʹngx_mruby΋׆༻͍ͨ͠

Slide 296

Slide 296 text

• ngx_mruby[38]ʹTLSϋϯυγΣΠΫͷRubyϑοΫઃఆΛ࣮૷ • TLSϋϯυγΣΠΫ࣌ʹϑοΫ͞ΕͨRubyͷίʔυΛ࣮ߦ • RubyϝιουͰOpenSSLͱσʔλͷड͚౉͠Λ࣮ߦ • KVS/File͔Βূ໌ॻ΍ൿີ伴ΛRubyܦ༝ͰಡΈࠐΈՄ 296 ngx_mruby v1.16.0ʢ2016೥2݄ʣͰ௥Ճ࣮૷ <>দຊ྄հ Ԭ෦णஉ NPE@NSVCZεΫϦϓτݴޠͰߴ଎͔ͭলϝϞϦʹ֦ுՄೳͳ8FCαʔόͷػ ೳ֦ுࢧԉػߏ ৘ใॲཧֶձ࿦จࢽɼ7PM /P QQ /PW

Slide 297

Slide 297 text

ngx_mrubyͷূ໌ॻಈతಡΈࠐΈ࣮૷ϑϩʔ 297 44-@$59@TFU@DFSU@DC ʹ3VCZͷόΠ τίʔυΛ࣮ߦ͢ΔIBOEMFSͷؔ਺ϙΠϯ λͱίϯςΩετߏ଄ମϙΠϯλΛηοτ OHJOYDPOGͷઃఆ͔ΒಡΈࠐΜͩ3VCZε ΫϦϓτΛόΠτίʔυԽͯ͠ ίϯςΩετߏ଄ମʹอଘ 5-4ϋϯυγΣΠΫ࣌ʹIBOEMFS͕ίʔϧ όοΫ͞ΕόΠτίʔυΛ࣮ߦ όΠτίʔυͰ࣮ߦ͞ΕΔ3VCZͷϝιο υܦ༝Ͱূ໌ॻ΍ൿີ伴σʔλ͕ ίϯςΩετߏ଄ମʹηοτ͢Δ ূ໌ॻͱൿີ伴σʔλʹج͍ͯ#*0ܦ༝Ͱ σʔλΛಡΈࠐΜͰϋϯυγΣΠΫΛଓߦ OHJOYىಈ࣌ͷॲཧ OHJOY͕ϦΫΤετड৴ͨ࣌͠ͷॲཧ NSVCZͷ5-4ϋϯυγΣΠΫϑοΫσΟ ϨΫςΟϒ͕ଘࡏͨ͠Β 44-@$59@TFU@DFSU@DC Λݺͼग़͢

Slide 298

Slide 298 text

lua-nginx-module΋΄΅ಉ࣌ظʹ։ൃ 298 ೥݄ʹͲͪΒ΋Ϛʔδ ࣗ෼͕ཉ͍͠ͱࢥͬͨ࣌ʹͳ͔ͬͨ͜ͱͱ3VCZͰॻ͖͔ͨͬͨͷͰOHY@NSVCZʹ࣮૷

Slide 299

Slide 299 text

• ϦΫΤετͷ͋ͬͨOpenSSLͷservernameͰ൑ఆ • ඥͮ͘ূ໌ॻͱϓϩΩγઌΛRubyͷίʔυͰܾఆ • RubyͰಈతʹઃఆ(mruby_set $hostͱproxy_pass $host) • ୯ҰͷઃఆͰສͷΦʔμʔͷυϝΠϯΛಈతʹॲཧ • ઃఆͱূ໌ॻʹؔ͢ΔϝϞϦ࢖༻ྔΛઅ໿ 299 ngx_mrubyͷಈతͳઃఆͱূ໌ॻಡΈࠐΈ

Slide 300

Slide 300 text

300 ϦΫΤετ͞ΕͨυϝΠϯ͔Βಈతʹূ໌ॻΛಡΈସ͑Δ͜ͱʹΑ ΓόοΫΤϯυ΁ͷϓϩΩγઃఆ΋ؚΊ୯Ұͷઃఆʹू໿Մೳ ϑΝΠϧϕʔεͷಈతূ໌ॻಡΈࠐΈྫ 3VCZͰϓϩάϥϚϒϧʹهड़Մೳ

Slide 301

Slide 301 text

301 ϦΫΤετ͞ΕͨυϝΠϯ͔Βಈతʹূ໌ॻΛ ಡΈସ͑Δ͜ͱʹΑΓ୯Ұͷઃఆʹू໿Մೳ ,74ϕʔεͷಈతূ໌ॻಡΈࠐΈྫ

Slide 302

Slide 302 text

1. αʔόϓϩηεىಈ࣌ʹ͸ূ໌ॻ͸ಡΈࠐ·ͳ͍ 2. υϝΠϯͱূ໌ॻɺϓϩΩγͷઃఆ͸୯Ұͷઃఆʹѹॖ 3. ΞΫηεͷ͋ͬͨυϝΠϯͷΈͷূ໌ॻΛಡΈࠐΉͨΊΤί • 200ສυϝΠϯͰΞΫηεͷແ͍υϝΠϯ͸ଟ਺ଘࡏ 4. ఆظతͳϓϩηεϦϩʔυʹΑΓূ໌ॻσʔλΛղ์ 302 HTTPSԽʹؔ͢ΔϝϞϦ࢖༻ྔޮ཰Խ·ͱΊ

Slide 303

Slide 303 text

੩తಡΈࠐΈͱಈతಡΈࠐΈͷൺֱ࣮ݧ

Slide 304

Slide 304 text

1. ࣮ݧ؀ڥͰ੩తಡΈࠐΈख๏ͱಈతಡΈࠐΈख๏ͷىಈ࣌ؒͷ࣮ݧ 2. ࣮ݧ؀ڥͰ੩తಡΈࠐΈख๏ͱಈతಡΈࠐΈख๏ͷੑೳൺֱ࣮ݧ ɾಈతূ໌ॻಡΈࠐΈͷΦʔόʔϔου͸Ͳͷఔ౓͔ʁ 3. ಈతಡΈࠐΈख๏ͷຊ൪؀ڥͰ࣮ӡ༻্ͷධՁ ɾແྉHTTPSΦϓγϣϯαʔϏεͷ։࢝ͱͦͷޙ 304 ࣮ݧͱ࣮ӡ༻্ͷධՁ

Slide 305

Slide 305 text

1. ੩తಡΈࠐΈख๏ͱಈతಡΈࠐΈख๏ͷ ىಈ࣌ؒͷ࣮ݧ

Slide 306

Slide 306 text

࣮ݧ؀ڥ 306 ࢓༷ $16 *OUFM9FPO&W()[DPSF .FNPSZ (CZUFT 4FSWFS /&$&YQSFTT3G& 04 $FOU04-JOVY,FSOFM

Slide 307

Slide 307 text

• 10ສϗετ෼ͷ4096bitsͷ伴௕ͷൿີ伴ͱαʔόূ໌ॻΛnginxόʔδϣϯ 1.11.13ͰಡΈࠐΈ • ੩తಡΈࠐΈ͸࠶ಡΈࠐΈॲཧͰ΋αʔϏεఀࢭʹܨ͕Δ 307 ੩తಡΈࠐΈͱಈతಡΈࠐΈͷىಈ࣌ؒͷ࣮ݧ ߲໨ ੩తಡΈࠐΈ ಈతಡΈࠐΈ ϓϩηεىಈͷ࣮࣌ؒ ඵ ϓϩηεىಈͷϢʔβ$16࢖༻࣌ؒ ඵ ϓϩηεىಈͷγεςϜ$16࢖༻࣌ؒ ඵ

Slide 308

Slide 308 text

2. ੩తಡΈࠐΈͱಈతಡΈࠐΈͷ ੑೳൺֱ࣮ݧ

Slide 309

Slide 309 text

• ੩తಡΈࠐΈख๏ͱಈతಡΈࠐΈख๏(KVSϕʔε)ͱൺֱ • ಉ࣌઀ଓ਺ΛมԽͤ͞ͳ͕ΒੑೳΛධՁ • nginxʹॳظಉ෧͞Ε͍ͯΔ612Bytesͷindex.html • cipher suites͸ECDHE-RSA-AES128-GCM-SHA256 309 ಈతಡΈࠐΈͷੑೳධՁ

Slide 310

Slide 310 text

੩తಡΈࠐΈͱಈతಡΈࠐΈͷੑೳൺֱ 310 ಉ࣌઀ଓ਺ ੩తಡΈࠐΈख๏ SFRTFD ಈతಡΈࠐΈख๏ SFRTFD $(*ͷΑ͏ͳϓϩηεෳ੡͕ੜ͡ͳ͍ܰྔͳ੩తϑΝΠϧ΁ͷϦΫΤετͰ΋ɺ ূ໌ॻͷಈతಡΈࠐΈ͸ैདྷख๏ͷ੩తಡΈࠐΈͱൺֱͯ͠΋΄΅͕ࠩͳ͍

Slide 311

Slide 311 text

• TLS΍Ϩεϙϯεੜ੒ॲཧͱൺֱͯ͠ಈతূ໌ॻಡΈࠐΈॲཧ͸࣮༻্໰୊ʹ ͳΒͳ͍ఔ౓ͷॲཧίετ • TLSϋϯυγΣΠΫ࣌ͷ҉߸ɾ෮߸ॲཧͷίετ͕େ͖͍ 311 ߟ࡯

Slide 312

Slide 312 text

3. ຊ൪؀ڥͰ࣮ӡ༻্ͷධՁ

Slide 313

Slide 313 text

• ੩తಡΈࠐΈͱಈతಡΈࠐΈख๏ͷ1ϲ݄ؒͷϦιʔε࢖༻ྔΛൺֱ • ੩తಡΈࠐΈख๏͸2017೥3݄͔Β4݄ɺಈతಡΈࠐΈख๏͸7݄͔Β8݄ • ෳ਺୆ͷಉҰϋʔυ΢ΣΞ্ʹ4݄຤ΛػʹϦϓϨʔε • ੩తಡΈࠐΈख๏͸Apache2.4ɺಈతಡΈࠐΈख๏͸nginx1.11Ͱ࣮૷ • ূ໌ॻ਺ͷ૿Ճ΍ϦΫΤετॲཧ਺ͷมԽͱൺֱ͠ͳ͕Βߟ࡯ 313 ແྉূ໌ॻαʔϏεΛػʹ࣮ӡ༻্ͷධՁ

Slide 314

Slide 314 text

ຊ൪؀ڥͷಈతಡΈࠐΈख๏ʹΑΔγεςϜߏ੒֓ཁ 314 ಈతಡΈࠐΈख๏ͷద༻Օॴ

Slide 315

Slide 315 text

ຊ൪؀ڥͷϦόʔεϓϩΩγαʔόͷ࢓༷ 315 ࢓༷ $16 *OUFM9FPO&W()[UISFBE .FNPSZ (CZUFT 4FSWFS /&$&YQSFTT&F. 04 $FOU04

Slide 316

Slide 316 text

0 5000 10000 15000 20000 25000 1 6 11 16 21 26 31 The number of cer-ficates day The number of cer-ficate in a month dynamic load preload 1ϲ݄ؒͷূ໌ॻ਺ͷભҠ 316 Θ͔Γʹ͍͕͘Ұϲ݄Ͱ͔Β΁ͱ ূ໌ॻఔ౓૿͍͑ͯΔ ূ໌ॻ਺͸ϦϓϨʔεલͷഒ͔Βഒ

Slide 317

Slide 317 text

1ϲ݄ؒͷ1αʔό΁ͷඵؒHTTPSϦΫΤετ਺ 317 ϓϩμΫγϣϯ্Ͱ͸QSFMPBEJOHͰ͸SFMPBE͕සൃ͢ΔͨΊ ݁Ռͱͯ͠ฏۉతʹϨεϙϯε͕஗͘ͳΔ

Slide 318

Slide 318 text

1ϲ݄ؒͷCPU࢖༻཰ͷભҠ 318 ূ໌ॻ਺͕͔Βഒʹ΋ؔΘΒͣ$16࢖༻཰͸ඍ͕ࠩͩ௿ݮ܏޲ ສূ໌ॻ૿ՃͰ$16͸ఔ౓ඍ૿

Slide 319

Slide 319 text

1ϲ݄ؒͷϝϞϦ࢖༻཰ͷભҠ 319 ূ໌ॻ਺͸͔Βഒʹ΋ؔΘΒͣϝϞϦ࢖༻཰͸௿ݮ ఏҊख๏͸ສҎ্૿Ճ͍ͯ͠Δূ໌ॻ਺ʹ΋΄΅ґଘ͍ͯ͠ͳ͍ ূ໌ॻ਺૿Ճʹ൐͍ϝϞϦ࢖༻ྔ͸αʔόશମͰ(#ZUFTఔ౓૿Ճ

Slide 320

Slide 320 text

• ੩తಡΈࠐΈ͸1ϗετ௥Ճ͋ͨΓϝϞϦ2.5MBytes૿Ճ • 2ສূ໌ॻͷ৔߹͸50GBytesҎ্ͷϝϞϦ͕ඞཁ • ϝϞϦ32GbytesͷαʔόͳͷͰ੩తಡΈࠐΈख๏Ͱ͸طʹ௒ա • ಈతಡΈࠐΈख๏͸2ສূ໌ॻΛ௒͑ͯ΋໿3GbytesͰ΄΅Ұఆ • ຖ೔ͷreload͕ՄೳʹͳΓͦͷ૊Έ߹ΘͤʹΑ࣮ͬͯݱ 320 1ϲ݄ͷ࣮ӡ༻্ͷධՁ͔ΒϝϞϦͷ࢖༻ྔΛߟ࡯

Slide 321

Slide 321 text

• ੩తಡΈࠐΈख๏͸20ສূ໌ॻΛॲཧ͢Δͷʹ500Gbytesඞཁ • 32GBytesͷαʔό͕15୆Ҏ্ඞཁ • ಈతಡΈࠐΈख๏͸20ສূ໌ॻͰ΋1୆ͰॲཧՄೳͷݟࠐΈ • 1ɺ2ສূ໌ॻ૿Ճͯ͠΋ϝϞϦ࢖༻ྔ͸3GBytesͰ΄΅ҰఆɺCPU࢖༻཰͸ 0.2ʙ0.5%૿Ճఔ౓ 321 ϝϞϦ࢖༻ྔ͔Βඞཁͳϋʔυ΢ΣΞΛݟੵ΋Γ

Slide 322

Slide 322 text

• ϝϞϦ࢖༻ྔΛ͞Βʹ௿ݮͤ͞ΔઓུΛͱΔ • reloadͷ૊Έ߹ΘͤͰ΋૿ՃྔΛߋʹݮΒͤͨΒޮ཰ԽՄೳ • reloadΛ΍Ίͯ·ͣ͸૿ՃྔΛ֬ೝ • ͔ͦ͜Βո͍͠ίʔυͱઃఆΛϦϑΝΫλϦϯά͍ͯ͘͠ • 4ϲ݄ؒͷϝϞϦભҠΛάϥϑԽ…..༧૝֎ʹϦʔΫ͍ͯͨ͠ 322 ϝϞϦό΢ϯυͷ՝୊Λߋʹվળ͍ͨ͠

Slide 323

Slide 323 text

323 0 5000 10000 15000 20000 25000 30000 2017/07/02-09:00 2017/07/04-09:00 2017/07/06-09:00 2017/07/08-09:00 2017/07/10-09:00 2017/07/12-09:00 2017/07/14-09:00 2017/07/16-09:00 2017/07/18-09:00 2017/07/20-09:00 2017/07/22-09:00 2017/07/24-09:00 2017/07/26-09:00 2017/07/28-09:00 2017/07/30-09:00 2017/08/01-09:00 2017/08/03-09:00 2017/08/05-09:00 2017/08/07-09:00 2017/08/09-09:00 2017/08/11-09:00 2017/08/13-09:00 2017/08/15-09:00 2017/08/17-09:00 2017/08/19-09:00 2017/08/21-09:00 2017/08/23-09:00 2017/08/25-09:00 2017/08/27-09:00 2017/08/29-09:00 2017/08/31-09:00 2017/09/02-09:00 2017/09/04-09:00 2017/09/06-09:00 2017/09/08-09:00 2017/09/10-09:00 2017/09/12-09:00 2017/09/14-09:00 2017/09/16-09:00 2017/09/18-09:00 2017/09/20-09:00 2017/09/22-09:00 2017/09/24-09:00 2017/09/26-09:00 2017/09/28-09:00 2017/09/30-09:00 2017/10/02-09:00 2017/10/04-09:00 2017/10/06-09:00 2017/10/08-09:00 2017/10/10-09:00 2017/10/12-09:00 2017/10/14-09:00 2017/10/16-09:00 2017/10/18-09:00 2017/10/20-09:00 2017/10/22-09:00 2017/10/24-09:00 2017/10/26-09:00 2017/10/28-09:00 2017/10/30-09:00 2017/11/01-09:00 Memory Usage [MBytes] Day Memory Usage for Four Months Memory Usage ಈతॲཧຖ೔SFMPBE SFMPBEఀࢭத SFMPBEఀࢭத ϦϑΝΫλϦϯά ສυϝΠϯ)5514Խ ສυϝΠϯ)5514Խ SFMPBEఀࢭ

Slide 324

Slide 324 text

• ngx_mrubyͷcacheΦϓγϣϯͰϦʔΫ͢Δύλʔϯ͋Δʁ • ݱࡏௐࠪதʢҟৗॲཧ࣌ʹϦʔΫ͍ͯ͠Δ͔΋ʣ • mruby_setͰ͸ͳ͘mruby_set_codeͳͲʹॻ͖׵͑ • Ϋϥε΍ϞδϡʔϧΛmrbgemԽͯ͠Ϗϧυ࣌ʹ૊ΈࠐΈ • ྫ֎ॲཧ΍ҟৗͳΞΫηε΁ͷΤϥʔॲཧͷݟ௚͠ 324 ϦϑΝΫλϦϯάͰ΍ͬͨ͜ͱ

Slide 325

Slide 325 text

325 0 5000 10000 15000 20000 25000 30000 2017/07/02-09:00 2017/07/04-09:00 2017/07/06-09:00 2017/07/08-09:00 2017/07/10-09:00 2017/07/12-09:00 2017/07/14-09:00 2017/07/16-09:00 2017/07/18-09:00 2017/07/20-09:00 2017/07/22-09:00 2017/07/24-09:00 2017/07/26-09:00 2017/07/28-09:00 2017/07/30-09:00 2017/08/01-09:00 2017/08/03-09:00 2017/08/05-09:00 2017/08/07-09:00 2017/08/09-09:00 2017/08/11-09:00 2017/08/13-09:00 2017/08/15-09:00 2017/08/17-09:00 2017/08/19-09:00 2017/08/21-09:00 2017/08/23-09:00 2017/08/25-09:00 2017/08/27-09:00 2017/08/29-09:00 2017/08/31-09:00 2017/09/02-09:00 2017/09/04-09:00 2017/09/06-09:00 2017/09/08-09:00 2017/09/10-09:00 2017/09/12-09:00 2017/09/14-09:00 2017/09/16-09:00 2017/09/18-09:00 2017/09/20-09:00 2017/09/22-09:00 2017/09/24-09:00 2017/09/26-09:00 2017/09/28-09:00 2017/09/30-09:00 2017/10/02-09:00 2017/10/04-09:00 2017/10/06-09:00 2017/10/08-09:00 2017/10/10-09:00 2017/10/12-09:00 2017/10/14-09:00 2017/10/16-09:00 2017/10/18-09:00 2017/10/20-09:00 2017/10/22-09:00 2017/10/24-09:00 2017/10/26-09:00 2017/10/28-09:00 2017/10/30-09:00 2017/11/01-09:00 Memory Usage [MBytes] Day Memory Usage for Four Months Memory Usage ಈతॲཧຖ೔SFMPBE SFMPBEఀࢭத SFMPBEఀࢭத ϦϑΝΫλϦϯά ສυϝΠϯ)5514Խ ສυϝΠϯ)5514Խ SFMPBEఀࢭ

Slide 326

Slide 326 text

• ϦϑΝΫλϦϯάલ͸5೔Ͱ10GBఔ౓ϦʔΫ(1೔2GB) • ىಈ࣌͸αʔόશମͰϝϞϦ2GB઎༗͠1೔Ͱ2GBϦʔΫ͢Δঢ়گΛຖ೔ reloadͯ͠ฏۉ3GBͰ҆ఆ͍ͤͯͨ͞ • ϦʔΫରԠޙ͸5೔Ͱ250MBఔ౓ͷϦʔΫ(1೔50MB) • reloadͱ૊Έ߹ΘͤΔͱฏۉ2GBͰ҆ఆͰ͖ΔՄೳੑ͋Γ 326 ϦʔΫ໰୊ͷߟ࡯

Slide 327

Slide 327 text

• ੩తಡΈࠐΈख๏͸200ສυϝΠϯͰ32GBytesαʔό͕150୆ඞཁ • ಈతಡΈࠐΈख๏͸ϝϞϦό΢ϯυͷ؍఺Ͱ1୆ʹऩ·ΔՄೳੑ͋Γ • 6ສυϝΠϯ૿ՃͰ1೔50MBͷϝϞϦ૿Ճʹऩ·Δܭࢉ • 200ສυϝΠϯͰ1೔2GBͷϝϞϦ૿Ճʹऩ·ΔՄೳੑ͋Γ • ϝϞϦҎ֎ͷΦʔόʔϔου͕Ͳ͜ʹग़ͯ͘Δ͔Λਵ࣌ධՁ 327 ཧ࿦తʹ΋αʔό୆਺ͷ100෼ͷ1͕ࢹ໺ʹ

Slide 328

Slide 328 text

7݄͔Β8݄ͷ2ϲ݄ؒͷτϥϑΟοΫมԽ 328 ূ໌ॻ਺͸ສ૿Ճ͕ͨ͠ɺ΋ͱ΋ͱ)551ͱ)5514྆ํॲཧ͍ͯ͠ΔͨΊ )551ͷυϝΠϯ͕)5514Խ͞Εͯ΋ͦΕ΄Ͳۃ୺ͳӨڹ͸ແ͍ɻ

Slide 329

Slide 329 text

• ߴूੵϚϧνςφϯτํࣜͷେྔূ໌ॻ؅ཧͷख๏ͷ঺հ • Ϋϥ΢υ΍ϗεςΟϯάαʔϏεʹ͓͚ΔಈతಡΈࠐΈͷϝϦοτΛఆྔධՁ • ඞཁͳυϝΠϯͷΈͷಈతূ໌ॻಡΈࠐΈͱαʔόϓϩηε࠶ಡΈࠐΈͷ௿଎ Խ๷ࢭʹΑΔϝϞϦղ์ͷ૊Έ߹ΘͤͰ࣮ݱ • ϋʔυ΢ΣΞίετΛ࡟ݮՄೳ(কདྷతʹ͸200ສυϝΠϯ) • ॲཧੑೳʹ΋࣮༻্໰୊ͳ͘ઃఆ൓ө΋ਝ଎ʹՄೳ 329 ·ͱΊ

Slide 330

Slide 330 text

ηΫγϣϯͷ·ͱΊ

Slide 331

Slide 331 text

1.ৗ࣌HTTPSԽͷഎܠͱຊݚڀͷ໨త 2.੩తʹূ໌ॻΛಡΈࠐΉํࣜ 3.ಈతʹূ໌ॻΛಡΈࠐΉํࣜ 4.੩తಡΈࠐΈͱಈతಡΈࠐΈͷൺֱ 331 େن໛WebαʔόͷTLSূ໌ॻ؅ཧ

Slide 332

Slide 332 text

8. ͓ΘΓʹ

Slide 333

Slide 333 text

ຊߨ࠲ͷ·ͱΊ

Slide 334

Slide 334 text

• େن໛ϗεςΟϯάαʔϏεͷ಺෦ΞʔΩςΫνϟ͔Β࣮ફతͳηΩϡϦςΟ ΍Ϧιʔε؅ཧɺੑೳ΍ӡ༻ٕज़ʹֶ͍ͭͯΜͩ • ηΩϡϦςΟͱੑೳʹؔ࿈ͯ͠ϓϩηεϞσϧ΍ΞΫηε੍ޚΛ੔ཧ • ཧղʹඞཁͳOSͷηΩϡϦςΟػߏʹ͍ͭͯ΋ֶΜͩ • Ϧιʔε؅ཧ΍ӡ༻ٕज़͔ΒOSͷجૅٕज़Λ͍͔ʹ׆༻͢Δ͔ • ར༻ऀͱࣄۀऀ໨ઢ͔ΒշదͳαʔϏεͷߏஙํ਑ʹֶ͍ͭͯΜͩ • ࠷৽ͷݚڀಈ޲΋঺հͨ͠ 334 େن໛ϗεςΟϯάαʔϏε͔Β஌ΔηΩϡϦςΟ

Slide 335

Slide 335 text

1. ͸͡Ίʹ 2. WebαʔόͷηΩϡϦςΟͱӡ༻ٕज़ͷഎܠ 3. WebαʔόͱWebϗεςΟϯάγεςϜͷجૅ஌ࣝ 4. ηΩϡϦςΟͱϦιʔε෼཭ 5. ηΩϡϦςΟͱੑೳ 335 ໨࣍ͷৼΓฦΓ

Slide 336

Slide 336 text

6. ηΩϡϦςΟͱӡ༻ٕज़ 7. େن໛WebαʔόͷTLSূ໌ॻ؅ཧ 8. ͓ΘΓʹ ext. FastContainerʹؔ͢Δݚڀಈ޲ 336 ໨࣍

Slide 337

Slide 337 text

• Ϋϥ΢υαʔϏε͔Βϋʔυ΢ΣΞ ΍ωοτϫʔΫͷఆ൪ߏ੒Λ஌Δ • Ϋϥ΢υج൫ιϑτ΢ΣΞ͔ΒVM ΍ίϯςφͷΦʔέετϨʔγϣϯ ͔ΒϨΠϠʔΞʔΩςΫνϟ΍ͦͷ ࣮૷ʹ͍ͭͯཧղ͢Δ • OpenStackɺKubernetesͳͲ 337 ࠓճ͸औΓ্͛·ͤΜͰ͕ͨ͠

Slide 338

Slide 338 text

ext. ߃ৗੜΛ࣋ͭγεςϜΞʔΩςΫνϟʹ ؔ͢Δݚڀ

Slide 339

Slide 339 text

FastContainer: ࣮ߦ؀ڥͷมԽʹ ૉૣ͘దԠͰ͖Δ߃ৗੑΛ࣋ͭ γεςϜΞʔΩςΫνϟʹؔ͢Δݚڀಈ޲

Slide 340

Slide 340 text

ηΫγϣϯͷ֓ཁ

Slide 341

Slide 341 text

1.FastContainer: ࣮ߦ؀ڥͷมԽʹૉૣ͘దԠͰ͖Δ߃ৗ ੑΛ࣋ͭγεςϜɾΞʔΩςΫνϟʹؔ͢Δݚڀಈ޲ 2.HTTPϦΫΤετ୯ҐͰΠϯελϯεͷ࠶഑ஔ͕Մೳͳ௿ ίετͰߴ଎ͳεέδϡʔϦϯάख๏ 341 ߃ৗੑΛ࣋ͭγεςϜΞʔΩςΫνϟͷݚڀಈ޲

Slide 342

Slide 342 text

FastContainer ࣮ߦ؀ڥͷมԽʹૉૣ͘దԠͰ͖Δ߃ৗ ੑΛ࣋ͭγεςϜΞʔΩςΫνϟ

Slide 343

Slide 343 text

1. എܠͱ໨త 2. Ծ૝Խج൫ͷεέʔϦϯάͱӡ༻ٕज़ͷ՝୊ 3. FastContainerΞʔΩςΫνϟ 4. ࣮ݧͱߟ࡯ 5. ·ͱΊ 343 ໨࣍

Slide 344

Slide 344 text

1. എܠͱ໨త

Slide 345

Slide 345 text

• ݸਓ͕౰ͨΓલʹଟछଟ༷ͳWebαΠτΛ࣋ͭ࣌୅ • VPSͷΑ͏ͳࣗ༝౓ͱִ཭؀ڥ΋ٻΊΒΕ͖͍ͯͯΔ • SNSΛհͯ͠ݸਓͷίϯςϯπΛ֦ࢄ͠΍͍࣌͢୅ • ݸਓͷWebαΠτ΁ͷΞΫηεूத͢Δػձͷ૿େ • ݸਓαΠτͰ΋ਝ଎ʹΦʔτεέʔϧͰ͖Δج൫͕ඞཁ 345 ݸਓͷWebαΠτ΁ͷΞΫηεूத΁ͷରԠ

Slide 346

Slide 346 text

1. Πϯελϯε௥Ճॲཧ͕௿଎Ͱ͋Δ͜ͱ 2. ϋʔυ΢ΣΞϦιʔεͷར༻ޮ཰ͷ௿͞ 3. εέʔϦϯά͢΂͖ঢ়گݕ஌ͷϦΞϧλΠϜੑͷ௿͞ 4. ۭ͖Ϧιʔε֬ೝͷͨΊͷεέδϡʔϦϯάॲཧͷ஗Ԇ 346 ҰൠతͳԾ૝Խج൫ͷΦʔτεέʔϧͷ՝୊ ͦ΋ͦ΋ΦʔτεέʔϧΛݸਓͷαΠτʹద༻͢Δͷ΋೉͍͠…

Slide 347

Slide 347 text

1. Πϯελϯε௥Ճॲཧ͕௿଎Ͱ͋Δ͜ͱ 2. ϋʔυ΢ΣΞϦιʔεͷར༻ޮ཰ͷ௿͞ 3. εέʔϦϯά͢΂͖ঢ়گݕ஌ͷϦΞϧλΠϜੑͷ௿͞ 4. ۭ͖Ϧιʔε֬ೝͷͨΊͷεέδϡʔϦϯάॲཧͷ஗Ԇ 347 ҰൠతͳԾ૝Խج൫ͷΦʔτεέʔϧͷ՝୊ ຊൃදͰ͸1.ͱ2.ͷ՝୊ΛղܾͰ͖ΔΞʔΩςΫνϟͷఏҊ → ݸਓ͕ҙࣝͤͣͱ΋࢖͑ΔαʔϏε΁ͷ࣮૷Λ໨ࢦ͢

Slide 348

Slide 348 text

1. Πϯελϯε௥Ճॲཧ͕௿଎Ͱ͋Δ͜ͱΛղܾ 1.Πϯελϯεͷঢ়ଶͷఀࢭɾىಈɾมߋɾෳ੡ɾ࠶഑ஔΛߴ଎ʹ॥؀ 2.ϦΫΤετ୯ҐͰঢ়ଶΛܾఆ 2. ϋʔυ΢ΣΞϦιʔεͷར༻ޮ཰ͷ௿͞Λղܾ 1.ϦΫΤετ͕ແ͍Πϯελϯε͸Ұఆظؒىಈޙʹఀࢭ ϦΫΤετ୯ҐͰΠϯελϯεͷঢ়ଶΛܾఆ͢Δख๏ͷఏҊ 348 Πϯελϯε͕॥؀͢ΔมԽʹڧ͍ج൫ͷఏҊ

Slide 349

Slide 349 text

• ϗετ͕॥؀͢ΔͷͰϥΠϒϥϦ͕ࣗવʹߋ৽͞Ε͍ͯ͘ • ऩ༰ઌ৘ใΛม͑Δ͚ͩͰࣗવʹऩ༰αʔόؒΛҠಈՄೳ • WordPress౳ͷҰൠతͳCMSΛ഑ஔɾΦʔτεέʔϧՄೳ • Ϋϥ΢υϓϩόΠμࢦఆͷίʔσΟϯάͷඞཁ΋ͳ͍ • ྫɿAWS lambdaʹྨ͢ΔServerless Architecture౳ 349 ηΩϡϦςΟ΍ӡ༻ٕज़ͷ՝୊΋ಉ࣌ʹղܾ

Slide 350

Slide 350 text

2. Ծ૝Խج൫ͷεέʔϦϯάͱ ӡ༻ٕज़ͷ՝୊

Slide 351

Slide 351 text

1. Πϯελϯε௥Ճॲཧ͕௿଎Ͱ͋Δ͜ͱ 2. ϋʔυ΢ΣΞϦιʔεͷར༻ޮ཰ͷ௿͞ 3. εέʔϦϯά͢΂͖ঢ়گݕ஌ͷϦΞϧλΠϜੑͷ௿͞ 4. ۭ͖Ϧιʔε֬ೝͷͨΊͷεέδϡʔϦϯάॲཧͷ஗Ԇ 351 ҰൠతͳԾ૝Խج൫ͷΦʔτεέʔϧͷ՝୊ ຊൃදͰ͸1.ͱ2.ͷ՝୊Λείʔϓͱ͢Δ

Slide 352

Slide 352 text

• VMͷ৔߹ɺݕ஌͔ΒͷΠϯελϯεىಈʹ͕͔͔࣌ؒΔ • ಥൃతͳΞΫηε࣌ʹεέʔϧॲཧ͕ؒʹ߹Θͳ͍ • εέʔϧΞοϓʢׂΓ౰ͯϦιʔε૿ڧʣ΋؆୯ʹͰ͖ͳ͍ 352 1. Πϯελϯεͷ௥Ճॲཧ͕௿଎Ͱ͋Δ͜ͱ

Slide 353

Slide 353 text

• Πϯελϯε͕جຊతʹىಈ͠ϦιʔεΛ઎༗͠ଓ͚Δ • Πϯελϯε͕VMͷ৔߹ʹ࢖༻͢ΔϦιʔεྔ΋ଟ͍ • Ұൠతʹ͸ৗ࣌Πϯελϯε͕ىಈ͠ଓ͚Δํࣜ • ىಈΠϯελϯεͷ਺͚ͩৗ࣌ϦιʔεΛ઎༗͢Δ • ϝϞϦϦʔΫ͢ΔϓϩηεͷӨڹ΋ड͚΍͍͢ 353 2. ϋʔυ΢ΣΞϦιʔεͷར༻ޮ཰ͷ௿͞

Slide 354

Slide 354 text

• ੬ऑੑରԠ΍όʔδϣϯΞοϓͷίετ͕ߴ͍ • αʔϏεͷఀࢭˠόʔδϣϯΞοϓˠىಈͳͲ • ϝϯςφϯε࣌ͷௐ੔ͷίετ͕ߴ͍ • ऩ༰αʔόͷҠಈͷίετ • αʔϏεఀࢭ࣌ؒͷௐ੔ͳͲߴ͍ස౓Ͱͷ࣮ࢪ͕ࠔ೉ 354 ͦͷଞͷӡ༻ٕज़΍ηΩϡϦςΟͷ՝୊

Slide 355

Slide 355 text

3. FastContainerΞʔΩςΫνϟ

Slide 356

Slide 356 text

• ঢ়ଶͷมԽΛߴ଎ʹߦ͑ͯ൓Ԡతʹಈ࡞Ͱ͖Δ͜ͱΛॏࢹ • γεςϜͷཁૉͷఀࢭ͔Βىಈॲཧͷޮ཰Խʹண໨ • γεςϜͷཁૉͷఀࢭঢ়ଶΛڐ༰͢ΔγεςϜ • ৗʹఀࢭͱىಈ͕॥؀Մೳͳ߃ৗੑΛ࣋ͭγεςϜΛ໨ࢦ͢ • ॥؀Մೳ = Մ༻ੑ͕ߴ͘ৗʹมԽՄೳͳج൫͕࣮ݱͰ͖Δ 356 Մ༻ੑߴ͘มԽʹڧ͍ج൫Λઃܭ͢Δʹ͸ʁ

Slide 357

Slide 357 text

มԽ͠ଓ͚Δ͜ͱ͔ΒಘΒΕΔ҆ఆੑ 357 ϗετ" ϗετ" ϗετ" ϗετ" ϗετ" Πϯλʔωοτ ϗετ" ϗετ" ϗετ" ΍͕ͯఀࢭ ൓Ԡతʹىಈ ൓Ԡతʹ εέʔϧΞοϓ ऩ༰αʔόA ऩ༰αʔόB HTTPϦΫΤετ ൓Ԡతʹ εέʔϧΞ΢τ • ϗετͷىಈͱఀࢭΛ॥؀ • ৗʹ॥؀͠ଓ͚ΔΞʔΩςΫνϟ • มԽ͠ଓ͚Δ͜ͱʹΑΔ҆ఆੑ • ॥؀ͷ଎౓վળΛ௥ٻ ৗʹมԽՄೳͰ͋ΔͨΊಥൃతͳΞ ΫηεूதͷΑ͏ͳมԽʹ΋଱ੑͷ ͋ΔΞʔΩςΫνϟΛ࣮ݱՄೳ

Slide 358

Slide 358 text

• ϗετͷىಈɾෳ੡ɾఀࢭɾ૿ڧॲཧͷޮ཰ԽΛॏࢹ • ֤छॲཧΛHTTPϦΫΤετ࣌ʹϦΞΫςΟϒʹ࣮ࢪ • ϗετʹ͸ίϯςφܕԾ૝ԽΛ࠾༻ͯ͠ىಈΛߴ଎ʹ࣮ݱ • ϦΫΤετʹج͍ͯϦΞΫςΟϒʹίϯςφͷঢ়ଶΛܾఆ • ैདྷͷϓϩΞΫςΟϒɾ༧ଌతͳεέʔϦϯά͔Β൓Ԡతͳํࣜ΁ • ΞΫηε܏޲ͱϦιʔεׂΓ౰͕ͯݶΓͳ͘ҰகͰ͖ΔΑ͏ʹ͢Δ • ༧ଌͰ͖ͳ͍ΞΫηε΍ಥൃతͳมԽʹదԠతͳΓιʔεׂΓ౰͕ͯՄೳ 358 FastContainerΞʔΩςΫνϟͱ໋໊

Slide 359

Slide 359 text

ίϯςφ࣌୅ͷWebαʔϏεج൫Ϟσϧ 359 ຊΞʔΩςΫνϟͷείʔϓ FastContainer͸ཧ૝తʹ͸ ΦʔέετϨʔγϣϯ૚ҎԼͷ πʔϧ܈Ͱ࣮૷ՄೳͰ͋Δ 0SDIFTUSBUJPO-BZFS (,& &$4 .BSBUIPO ,VCFSOFUFT %PDLFS4XBSN 4USBUFHZ-BZFS 3BODIFS 'BTU$POUBJOFS 4FSWJDF-BZFS 8FC"QQMJDBUJPOPS4FSWJDFPO$POUBJOFST *OGSBTUSVDUVSF-BZFS ($1 "[VSF "84 0QFO4UBDL .FTPT #BSF.FUBM -JOVY,JU $POUBJOFS3VOUJNF-BZFS %PDLFS .PCZ DPOUBJOFSE -9$ SLU )BDPOJXB ,BUB$POUBJOFST $POUBJOFS3VOUJNF*OUFSGBDF $3*

Slide 360

Slide 360 text

HTTP FastContainerͷϑϩʔ 360 8FC1SPYZ ʢOHY@NSVCZ $.%# ʴ "1* -PDBM8FC1SPYZ OHY@NSVCZ $MJFOU ίϯςφ ίϯςφ ίϯςφ w )551ϦΫΤετͷ)PTUOBNF ΛΩʔʹɺ$.%# ߏ੒؅ཧ%# ͔Βίϯςφͷ৘ใΛऔಘ )551 4 ϦΫΤετ w ίϯςφͷ*1ͱϙʔτʹج͍ ͯίϯςφʹϓϩΩγ w ίϯςφ͕-JTUFO͍ͯ͠ͳ͍ ৔߹͸$.%#͔Βίϯςφ ৘ใΛಘͯىಈ $POUBJOFS&OHJOF IBDPOJXB

Slide 361

Slide 361 text

ΦʔτεέʔϦϯάݕ஌ͷΞʔΩςΫνϟ 361

Slide 362

Slide 362 text

• ϦΫΤετ୯ҐͰߴ଎ʹεέʔϧΞοϓɾεέʔϧΞ΢τՄೳ • ίϯςφʹ߃ৗੑΛ࣋ͨͤΔ͜ͱͰϦιʔεͷޮ཰Խ • ίϯςφΛ࢖͍ࣺͯՄೳʹ → immutability • Ұఆ࣌ؒىಈ͢Δ͜ͱͰ౎౓ىಈΑΓߴ଎Խ → mortality • ߟ͑ํʹΑͬͯ͸ϝϞϦϦʔΫ͢Διϑτ΢ΣΞΛ΋ڐ༰ 362 FastContainerΞʔΩςΫνϟͷ·ͱΊ

Slide 363

Slide 363 text

• ίϯςφ͕॥؀͢ΔͷͰϥΠϒϥϦ͕ࣗવʹߋ৽͞Ε͍ͯ͘ • ར༻ऀʹͱͬͯ͸ηΩϡϦςΟ޲্ • ఏڙଆʹͱͬͯ͸੬ऑੑରԠ΍όʔδϣϯΞοϓͷޮ཰Խ • CMDBͷऩ༰ઌ৘ใΛม͑Δ͚ͩͰࣗવʹऩ༰αʔόΛҠಈ • ϝϯςφϯε΍ো֐ରԠ࣌ͷແఀࢭରԠ͕༰қʹͳΔ 363 FastContainerΞʔΩςΫνϟͷ·ͱΊ

Slide 364

Slide 364 text

4. ࣮ݧͱߟ࡯

Slide 365

Slide 365 text

FastContainerΞʔΩςΫνϟͷ࣮૷ 365 CMDBʹߏ੒΍ίϯςφͷঢ় ଶ͕શͯอଘ͞Ε͍ͯΔɻ UserProxyͱCompute͕Ϧ ΫΤετʹج͍ͯCoreAPIܦ ༝ͰCMDB͔Βঢ়ଶΛऔಘɾ มߋ͠ߏ੒ΛมԽͤ͞Δɻ Compute͸ෳ਺୆Ͱ DataPoolΛNFSͰڞ༗͠ɺ ίϯςφΛHTTPϦΫΤετ ͔ΒϦΞΫςΟϒʹىಈ͢Δɻ

Slide 366

Slide 366 text

࣮ݧ؀ڥ ߲໨ ࢓༷ $PNQVUF $16 .FNPSZ /*$ 04 *OUFM9FPO&()[DPSF (CZUF (CQT 6CVOUV,FSOFM 6TFS1SPYZ $16 .FNPSZ /*$ 04 *OUFM9FPO&()[DPSF (CZUF (CQT 6CVOUV,FSOFM $PSF"1* $16 .FNPSZ /*$ 04 *OUFM9FPO&()[DPSF (CZUF (CQT 6CVOUV,FSOFM $.%# $16 .FNPSZ /*$ 04 *OUFM9FPO&()[DPSF (CZUF (CQT 6CVOUV,FSOFM %BUB1PPM $16 .FNPSZ /*$ 04 *OUFM9FPO&()[DPSF (CZUF (CQT 6CVOUV,FSOFM OpenStackͰߏங͞ΕͨԾ૝ج൫্ Ͱ֤ίϯϙʔωϯτΛVM্Ͱ࣮૷ ͠ɺ࣮ݧΛ࣮ࢪɻ ίϯςφ͸phpinfo()͕ಈ࡞͢Δ mod_phpΛ૊ΈࠐΜͩApache࣮ߦ ؀ڥɻઃఆ͸σϑΥϧτɻCPU1ίΞ ͷ30%ɺϝϞϦ512MBΛׂΓ౰ͯɻ εέʔϧΞ΢τͱεέʔϧΞοϓͷਝ ଎ੑΛධՁ͢ΔͨΊʹɺ10ສϦΫΤ ετͷ5ສϦΫΤετ͔Βεέʔϧॲ ཧΛߦ͍ɺॲཧ͕٧·Δ͜ͱͳ͘ෛՙ ෼ࢄग़དྷ͍ͯΔ͔Λ֬ೝɻ

Slide 367

Slide 367 text

367 335ඵ࣌఺ͰεέʔϧΞ΢τΛ࣮ࢪ͠ɺ 340ඵ࣌఺Ͱෛՙ෼ࢄ͕։࢝͞Ε͍ͯΔɻ 5ສϦΫΤετҎ߱͸2ίϯ ςφʹεέʔϧΞ΢τ͞Εͨ ͨΊɺϨεϙϯελΠϜ͕൒ ෼ҎԼͱͳͬͯ࢒Γͷ5ສϦ ΫΤετ୹࣌ؒͰॲཧ͍ͯ͠ Δ͜ͱ͕෼͔Δɻ

Slide 368

Slide 368 text

368 301ඵ࣌఺ͰCPU2ഒͷεέʔϧΞο ϓΛ࣮ࢪ͠ɺ302ඵ͔ΒϨεϙϯε λΠϜ͕ঃʑʹૣ͘ͳΓ304ඵͰ൒ ෼ͷϨεϙϯελΠϜʹͳ͍ͬͯΔɻ 5ສϦΫΤετҎ߱͸CPU͕ ݩͷ2ഒʹڧԽ͞ΕͨͨΊɺ ϨεϙϯελΠϜ͕໿൒෼ͱ ͳͬͯ࢒Γͷ5ສϦΫΤετ ୹࣌ؒͰॲཧ͍ͯ͠Δ͜ͱ͕ ෼͔Δɻ

Slide 369

Slide 369 text

Ruby on Railsͷىಈ࣌ؒʢCRIUʣ 369 3VCZɼ3BJMTɼ1VNB 3VCZPO3BJMTͷσϑΥϧταΠτ

Slide 370

Slide 370 text

5. ·ͱΊ

Slide 371

Slide 371 text

• ΦʔτεέʔϧͷॲཧίετͱϦιʔεޮ཰Խͷ՝୊ʹண໨ • ෆมੑΛ൐͏ج൫ͷηΩϡϦςΟͱӡ༻ٕज़ͷ՝୊ʹண໨ • Πϯελϯε͕॥؀͠มԽʹڧ͍Ծ૝Խج൫ٕज़ͷఏҊ • ϩϦϙοϓʂϚωʔδυΫϥ΢υͱͯ͠αʔϏε΋ϦϦʔε • ຊΞʔΩςΫνϟͱࣗ࡞ίϯςφΤϯδϯΛ࣮૷࣮ͯ͠ݱ 371 ·ͱΊ

Slide 372

Slide 372 text

• αʔϏεͱ࣮ͯ͠૷࣮͠ӡ༻্ͷޮՌΛଌఆத • ॳճىಈ࣌ؒͱىಈܧଓ࣌ؒͱΞΫηε਺ͷؔ܎Λߟ࡯ • ϢʔβମݧΛଛͳΘͳ͍ىಈܧଓ࣌ؒͷదԠతܾఆ͕Մೳ͔ • CRIUʹΑΓίϯςφ಺ͷΞϓϦΛΠϝʔδԽͯ͠ߴ଎ىಈ • ߃ৗੑʹΑΔϦιʔεޮ཰ԽΛ۝भେֶͱڞಉͰ࣮ূ࣮ݧத 372 ࠓޙͷ՝୊

Slide 373

Slide 373 text

1. Πϯελϯε௥Ճॲཧ͕௿଎Ͱ͋Δ͜ͱ 2. ϋʔυ΢ΣΞϦιʔεͷར༻ޮ཰ͷ௿͞ 3. εέʔϦϯά͢΂͖ঢ়گݕ஌ͷϦΞϧλΠϜੑͷ௿͞ 4. ۭ͖Ϧιʔε֬ೝͷͨΊͷεέδϡʔϦϯάॲཧͷ஗Ԇ 373 ҰൠతͳԾ૝Խج൫ͷΦʔτεέʔϧͷ՝୊ ਐḿ

Slide 374

Slide 374 text

• σʔλऩूࣗମ͸਺ेඵ୯Ґ • εέʔϦϯάͷτϦΨʔݕ஌͸࠷େ3෼ඞཁ • ޡݕ஌ΛݮΒ͠ͳ͕Βૉૣ͘εέʔϦϯάΛݕ஌Ͱ͖Δ͔ • εέʔϧΞ΢τɾΠϯ͕ແବʹසൃ͠ͳ͍Α͏ͳϧʔϧઃܭ • ΦϯϥΠϯʹదͨ͠มԽ఺ݕग़ͷΑ͏ͳ౷ܭతख๏ʹ΋ؼண 374 εέʔϦϯά͢΂͖ঢ়گͷݕ஌ʹؔ͢Δ՝୊

Slide 375

Slide 375 text

FastContainer CRIUΛར༻ͨ͠HTTPϦΫΤετ୯ҐͰίϯςφΛ ࠶഑ஔͰ͖Δ௿ίετͰߴ଎ͳεέδϡʔϦϯάख๏

Slide 376

Slide 376 text

1. എܠͱ໨త 2. ؔ࿈ݚڀͷ՝୊ 3. ఏҊख๏ 4. ࣮ݧͱߟ࡯ 5. ·ͱΊ 376 ໨࣍

Slide 377

Slide 377 text

1. എܠͱ໨త

Slide 378

Slide 378 text

• ݸਓ͕౰ͨΓલʹଟछଟ༷ͳWebαΠτΛ࣋ͭ࣌୅ • Ϋϥ΢υɾVPSͷΑ͏ͳࣗ༝౓ͱִ཭؀ڥʢΠϯελϯεʣʹର͢Δཁٻ • SNSΛհͯ͠ݸਓͷίϯςϯπΛ֦ࢄ͠΍͍࣌͢୅ • ݸਓͷWebαΠτ΁ͷΞΫηεूத͢Δػձͷ૿େ • ݸਓαΠτͰ΋ΞΫηεूத΍ো֐ͱ͍ͬͨมԽʹڧ͍ج൫͕ඞཁ 378 ݸਓͷWebαΠτ΁ͷΞΫηεूத΍৴པੑ

Slide 379

Slide 379 text

1. Πϯελϯε௥Ճॲཧ͕௿଎Ͱ͋Δ͜ͱΛղܾ • Πϯελϯε(ίϯςφ)ͷঢ়ଶͷఀࢭɾىಈɾεέʔϦϯάΛߴ଎ʹ॥؀ • ϦΫΤετ୯ҐͰঢ়ଶΛܾఆ → มԽʹڧ͍ج൫΁ 2. ϋʔυ΢ΣΞϦιʔεͷར༻ޮ཰ͷ௿͞Λղܾ • ϦΫΤετ͕ແ͍Πϯελϯε͸Ұఆظؒىಈޙʹఀࢭ • CPU48ίΞ256GBϝϞϦఔ౓ͷαʔόʹ਺ສ͔Βे਺ສϗετΛ૝ఆ ΠϯελϯεΛߴूੵʹऩ༰ՄೳͰมԽʹڧ͍Ծ૝Խج൫FastContainer 379 Πϯελϯε͕॥؀͢ΔมԽʹڧ͍ج൫ͷఏҊ※1 ˞দຊ྄հ ۙ౻Ӊஐ࿕ ࡾ୐༔հ ྗ෢݈࣍ ܀ྛ݈ଠ࿠ 'BTU$POUBJOFS࣮ߦ؀ڥͷมԽʹૉૣ͘దԠͰ͖Δ߃ৗੑΛ࣋ͭγεςϜΞʔΩςΫνϟ Πϯλʔωοτͱӡ༻ٕज़γϯϙδ΢Ϝ࿦จूɼɼʢʣ /PW

Slide 380

Slide 380 text

• Մ༻ੑ୲อͷͨΊʹෳ਺ΠϯελϯεՔಇͤ͞Δ͜ͱʹΑΔίετͷ૿େ • ෳ਺ͷऩ༰αʔόʹΠϯελϯεΛͦΕͧΕՔಇͤ͞Δ͜ͱͰՄ༻ੑΛ୲อ • ߴूੵʹΠϯελϯεऩ༰͢Δ؍఺͔ΒͰ͖Δ͚ͩϦιʔεΛઅ໿͍ͨ͠ • ར༻ऀ໨ઢͰ΋Մ༻ੑΛ୲อͭͭ͠අ༻Λ࡟ݮ͍ͨ͠ • ґવͱͯ͠ɺHTTPͷϨεϙϯελΠϜͷ؍఺͔ΒɺFastContainerͷHTTPϦ ΫΤετܖػͰঢ়ଶΛมߋ͢Δ࣌ؒͷ୹ॖ΋՝୊ 380 FastContainer͓Αͼؔ࿈ݚڀͷՄ༻ੑͷ՝୊

Slide 381

Slide 381 text

1. Πϯελϯε্ͰWordPressͷΑ͏ͳҰൠతͳWebΞϓϦ͕ಈ࡞Մೳ 2. ୯ҰΠϯελϯεͰ΋ऩ༰αʔόো֐࣌ʹ͸ผαʔό΁ࣗಈతʹ࠶഑ஔՄೳ 3. Πϯελϯεͷ࠶഑ஔͷ࣮ߦ࣌Ͱ͋ͬͯ΋਺ඵͷ஗ԆͰHTTPλΠϜΞ΢τ͢ Δ͜ͱͳ͘ΦϯϥΠϯͰϨεϙϯεΛૹ৴Մೳ ΠϯελϯεΛߴ଎ʹ࠶഑ஔՄೳʹ͢Δ͜ͱͰूੵ཰Λ޲্ͤ͞ ௿ίετͳج൫Λ࣮ݱ͢ΔεέδϡʔϦϯάख๏ͷఏҊ 381 ݚڀͷ໨త: ϦΫΤετ୯Ґ ͰͷΠϯελϯε࠶഑ஔ

Slide 382

Slide 382 text

2. ؔ࿈ݚڀͷ՝୊

Slide 383

Slide 383 text

• FastContainer ※1͸HTTPϦΫΤετʹԠͯ͡൓Ԡత͔ͭߴ଎ʹΠϯελϯε ͷঢ়ଶʢىಈɺఀࢭɺҠಈɺෳ੡ɺϦιʔε૿ݮ౳ʣΛܾఆ • ΞΫηε਺ʹԠͨ͡ϦΞΫςΟϒͳεέʔϦϯάॲཧ͕Մೳ • Ϋϥ΢υαʔϏεج൫͸༧ΊΠϯελϯεΛىಈͤͯ͞ϦΫΤετΛॲཧ • ΞΫηεूத࣌͸༧ଌత͔ͭϓϩΞΫςΟϒͳεέʔϦϯάॲཧ͕ඞཁ 383 FastContainerͱΫϥ΢υαʔϏεج൫ͷಛ௃ ˞দຊ྄հ ۙ౻Ӊஐ࿕ ࡾ୐༔հ ྗ෢݈࣍ ܀ྛ݈ଠ࿠ 'BTU$POUBJOFS࣮ߦ؀ڥͷมԽʹૉૣ͘దԠͰ͖ Δ߃ৗੑΛ࣋ͭγεςϜΞʔΩςΫνϟ Πϯλʔωοτͱӡ༻ٕज़γϯϙδ΢Ϝ࿦จूɼɼ ʢʣ ೥݄

Slide 384

Slide 384 text

1. WordPressͷΑ͏ͳҰൠతͳWebΞϓϦέʔγϣϯΛར༻Մೳ 2. Πϯελϯεͷऩ༰αʔόͷো֐࣌ʹHTTPλΠϜΞ΢τ͕ੜ͡ͳ͍ϨϕϧͰ αʔϏεΛܧଓͰ͖Δఔ౓ͷՄ༻ੑΛ૝ఆ ௿Ձ֨WebϗεςΟϯάج൫ɺΫϥ΢υج൫ɺFastContainerج൫Ͱ੔ཧ 384 ຊݚڀʹ͓͚ΔԾ૝Խج൫ͱՄ༻ੑͷલఏ

Slide 385

Slide 385 text

• ҰൠతͳWebΞϓϦέʔγϣϯ͕ར༻Մೳ • ௿Ձ֨Λ࣮ݱ͢ΔͨΊߴूੵʹϗετΛऩ༰ՄೳͳԾ૝ϗετํ͕ࣜҰൠత • ྫɿ୯ҰͷApacheͰ਺ສυϝΠϯͷԾ૝ϗετΛॲཧ • ਺ສυϝΠϯΛॲཧ͢ΔApacheΛෳ਺αʔόʹෳ਺഑ஔͯ͠Մ༻ੑΛ୲อ※1 • ෳ਺Webαʔόϓϩηεͷىಈ͕લఏͱͳΓϦιʔε઎༗ͷίετ͕૿େ 385 ௿Ձ֨WebϗεςΟϯάج൫ͷՄ༻ੑ ˞দຊ྄հ ઒ݪক࢘ দԬً෉ େن໛ڞ༗ܕ8FCόʔνϟϧϗεςΟϯάج൫ͷηΩϡϦςΟͱӡ༻ٕज़ͷ վળ ৘ใॲཧֶձ࿦จࢽ 7PM /P QQ .BS

Slide 386

Slide 386 text

• ༷ʑͳWebΞϓϦέʔγϣϯʢϗεςΟϯάΑΓࣗ༝౓͕ߴ͍ʣ͕ར༻Մೳ • IaaS΍PaaSΛར༻ͨ͠Πϯελϯε୯ҐͰͷߏங͓ΑͼՄ༻ੑ୲อ͕Ұൠత • ຊݚڀͷՄ༻ੑ͕લఏͷ৔߹ɺෳ਺ऩ༰αʔόʹͦΕͧΕΠϯελϯεΛϗο τελϯόΠํࣜʢىಈࡁΈͷ଴ػΠϯελϯεʣͰ଴ػ͢Δ͜ͱͰ࣮ݱ • ऩ༰αʔόఀࢭ࣌ʹ΋ଈ࣌αʔϏεΛܧଓ͢ΔͨΊ • ෳ਺Πϯελϯεͷىಈ͕લఏͱͳΓϦιʔε઎༗ͷίετ͕૿େ 386 FastContainer΍Ϋϥ΢υج൫ͷՄ༻ੑ

Slide 387

Slide 387 text

387 $MJFOU 4FSWFS "QBDIF ʢWIPTU܈ʣ 4UPSBHF $MJFOU 4FSWFS JOTUBODF" JOTUBODF# JOTUBODF$ 4FSWFS JOTUBODF" 4UPSBHF 4FSWFS "QBDIF ʢWIPTU܈ʣ ௿Ձ֨8FCϗεςΟϯάج൫ͷՄ༻ੑ 'BTU$POUBJOFS΍Ϋϥ΢υج൫ͷՄ༻ੑ )551ϦΫΤετ )551ϦΫΤετ

Slide 388

Slide 388 text

388 $MJFOU 4FSWFS "QBDIF ʢWIPTU܈ʣ 4UPSBHF $MJFOU 4FSWFS JOTUBODF" JOTUBODF# JOTUBODF$ 4FSWFS JOTUBODF" 4UPSBHF 4FSWFS "QBDIF ʢWIPTU܈ʣ ௿Ձ֨8FCϗεςΟϯάج൫ͷՄ༻ੑ 'BTU$POUBJOFS΍Ϋϥ΢υج൫ͷՄ༻ੑ )551ϦΫΤετ )551ϦΫΤετ ✗ ✗

Slide 389

Slide 389 text

3. ఏҊख๏

Slide 390

Slide 390 text

1. Πϯελϯε্ͰWordPressͷΑ͏ͳҰൠతͳWebΞϓϦ͕ಈ࡞Մೳ 2. ୯ҰΠϯελϯεͰ΋ऩ༰αʔόো֐࣌ʹ͸ผαʔό΁ࣗಈతʹ࠶഑ஔՄೳ 3. Πϯελϯεͷ࠶഑ஔͷ࣮ߦ࣌Ͱ͋ͬͯ΋਺ඵͷ஗ԆͰHTTPλΠϜΞ΢τ͢ Δ͜ͱͳ͘ΦϯϥΠϯͰϨεϙϯεΛૹ৴Մೳ 390 ఏҊख๏: ϦΫΤετ୯Ґ ͰͷΠϯελϯε࠶഑ஔ

Slide 391

Slide 391 text

391 4UPSBHF $MJFOU 4FSWFS JOTUBODF" JOTUBODF# JOTUBODF$ 4FSWFS JOTUBODF" 'BTU$POUBJOFS΍Ϋϥ΢υج൫ͷՄ༻ੑ 4UPSBHF $MJFOU 4FSWFS JOTUBODF" JOTUBODF# JOTUBODF$ 4FSWFS ఏҊख๏ʴ'BTU$POUBJOFSͷՄ༻ੑ ఏҊख๏ )551ϦΫΤετ )551ϦΫΤετ

Slide 392

Slide 392 text

392 4UPSBHF $MJFOU 4FSWFS JOTUBODF" JOTUBODF# JOTUBODF$ 4FSWFS JOTUBODF" 'BTU$POUBJOFS΍Ϋϥ΢υج൫ͷՄ༻ੑ 4UPSBHF $MJFOU 4FSWFS JOTUBODF" JOTUBODF# JOTUBODF$ 4FSWFS ఏҊख๏ʴ'BTU$POUBJOFSͷՄ༻ੑ ఏҊख๏ )551ϦΫΤετ )551ϦΫΤετ JOTUBODF" ✗൓Ԡతʹ ࠶഑ஔ ✗

Slide 393

Slide 393 text

HTTP FastContainerͷجຊϑϩʔ 393 8FC1SPYZ ʢOHY@NSVCZ $.%# ʴ "1* 8FC%JTQBUDIFS OHY@NSVCZ $MJFOU ίϯςφ ίϯςφ ίϯςφ w )551ϦΫΤετͷ)PTUOBNF ΛΩʔʹɺ$.%# ߏ੒؅ཧ%# ͔Βίϯςφͷ৘ใΛऔಘ )551 4 ϦΫΤετ w ίϯςφͷ*1ͱϙʔτʹج͍ ͯίϯςφʹϓϩΩγ w ίϯςφ͕-JTUFO͍ͯ͠ͳ͍ ৔߹͸$.%#͔Βίϯςφ ৘ใΛಘͯىಈ $POUBJOFS&OHJOF IBDPOJXB ऩ༰ϗετ"

Slide 394

Slide 394 text

1. Proxy͔Βऩ༰αʔόʹICMP/TCPͰ࠷௿ݶͷύέοτͰԠ౴଎౓Λଌఆ 2. Ԡ౴଎౓͕ᮢ஋Λ௒͍͑ͯͨΒผͷऩ༰αʔό΁࠶഑ஔ 3. ίϯςφىಈ࣌͸ɺىಈ׬ྃ௚લͷঢ়ଶͷϓϩηεΠϝʔδ͔Β෮ݩ → ඇৗʹγϯϓϧͳํࣜͰߴ଎ͳ࠶഑ஔΛ࣮ݱՄೳ → ୯ҰͷίϯςφͰ࣮༻తͳՄ༻ੑΛ୲อՄೳʢϦιʔείετͷ࡟ݮʣ 394 ߴ଎ͳऩ༰ϗετͷࢮ׆؂ࢹͱ࠶഑ஔ

Slide 395

Slide 395 text

)PTU04 8FC1SPYZ $.%#"1* $POUBJOFS %JTQBUDIFS $POUBJOFS )PTU04 $POUBJOFS %JTQBUDIFS $POUBJOFS $MJFOU )551 *$.1 )551 )551 )551 *$.1PS5$1

Slide 396

Slide 396 text

)PTU04 8FC1SPYZ $.%#"1* $POUBJOFS %JTQBUDIFS $POUBJOFS )PTU04 $POUBJOFS %JTQBUDIFS $POUBJOFS $MJFOU )551 *$.1PS5$1 *$.1PS5$1 )551 )551 )551 ✗ ࠷ॳͷ࠶഑ஔ࣌͸ίϯςφͷىಈ͕ඞཁͰ͋Δ͕ɺ ىಈޙ͸Ұఆظؒىಈ͠ଓ͚Δɻ

Slide 397

Slide 397 text

• ICMP/TCPͰᮢ஋νΣοΫ͕Ұ࣌తʹޡݕ஌ͯ͠΋Өڹ͕গͳ͍ • TCPͷ৔߹͸ࣗ࡞TCPελοΫͰԟ෮3ύέοτͰνΣοΫ[38] • FastContainerͳͷͰޡݕ஌ͷ࠶഑ஔ͕ੜͯ͡΋αʔϏε͕ܧଓ͞ΕΔ • ޡݕ஌Ͱଞαʔόʹىಈͯ͠͠·ͬͯ΋Ұఆ࣌ؒىಈͨ͠Βఀࢭ͢Δ • ݩαʔόʹ࠶഑ஔ͞ΕͯCMDB্͸ݩαʔόͷΈʹϦΫΤετ͕ྲྀΕΔ • Ԡ౴࣌ؒͷᮢ஋΍λΠϜΞ΢τΛΪϦΪϦ·ͰνϡʔχϯάՄೳ 397 ఏҊख๏ͷϙΠϯτʢICMP/TCP؂ࢹʣ <>NBUTVNPUPSZ NSVCZGBTUSFNPUFDIFDL IUUQTHJUIVCDPNNBUTVNPUPSZNSVCZGBTUSFNPUFDIFDL

Slide 398

Slide 398 text

• ίϯςφ಺ͷWebαʔόϓϩηεΛىಈ׬ྃ௚લͰΠϝʔδԽ(Checkpoint) • ఆظతʹඇಉظͰϓϩηεͷىಈ׬ྃ௚લΠϝʔδΛ࡞੒͓ͯ͘͠ • ϦΫΤετड৴࣌ʹΠϝʔδΛϓϩηεʹ෮ݩ(Restore) • αʔόϓϩηεͷॳظԽॲཧΛεΩοϓ • ىಈʹ࣌ؒͷ͔͔ΔΞϓϦέʔγϣϯαʔό౳ʹ༗ར • Ruby on RailsɼDjangoͳͲ 398 ఏҊख๏ͷϙΠϯτʢCheckpoint/Restoreʣ

Slide 399

Slide 399 text

• αʔόϓϩηεͷىಈ௚ޙΛίϯςφϥϯλΠϜͰϑοΫͯ͠Checkpoint • ࢀߟ: seccompͰγεςϜίʔϧΛ؂ࢹ͠ptraceͰҰ࣌ఀࢭ͔ͯ͠ΒCRIUͰ CheckpointʹΑΔΠϝʔδԽͱ͍͏ํ๏΋͋Δ • CRIUͷதͰseccompΛ࢖͓ͬͯΓύον͕ඞཁͰ൚༻ੑʹ͔͚Δ • ϦΫΤετΛड͚ͯίϯςφΛىಈ͢Δ࣌͸Πϝʔδ͔ΒRestoreͯ͠ىಈ 399 Checkpoint/RestoreʹΑΔFastContainerͷىಈ

Slide 400

Slide 400 text

αʔόϓϩηεͷCheckpoint/Restoreͷ࣮૷ 400 SFGl04ϨΠϠͰ8FCαʔό͕ىಈ࣌ʹ࣮ߦ͢ΔγεςϜίʔϧΛ؂ࢹ͠ىಈ׬ྃ௚લͷϓϩηεΛΠϝʔδԽ͢ΔlIUUQ ICNBUTVNPUPSKQFOUSZ

Slide 401

Slide 401 text

4. ࣮ݧͱߟ࡯

Slide 402

Slide 402 text

FastContainerͷγεςϜߏ੒ 402

Slide 403

Slide 403 text

403

Slide 404

Slide 404 text

• ༧උ࣮ݧ: CRIUͱCheckpoint/Restore͢ΔϓϩηεͷϝϞϦαΠζͱͷؔ܎ • ༧උ࣮ݧ: CRIUͱCheckpoint/Restore͢Δϓϩηε਺ͱͷؔ܎ • ୅දతͳΞϓϦέʔγϣϯΛ࢖ͬͨίϯςφ࠶഑ஔ࣌ͷϨεϙϯελΠϜ • Apache 2.4.18ɼPHP 7.3.0ɼWordpress 5.0.3ʢσϑΥϧτϖʔδʣ • Python 3.7.1ɼDjango 2.1.4ɼgunicorn 19.9.0※1 • Ruby 2.5.1ɼRails 5.2.1ɼPuma 3.12.0※2 404 ࣮ݧ಺༰ ˞IUUQTNDMPMJQPQ[FOEFTLDPNIDKBBSUJDMFT ˞IUUQTHJUIVCDPNFWFSZMFBGFMUSBJOJO ݱ࣮తͳن໛ʢݸਓάϧʔϓ಺Ͱͷར༻ͷΞϓϦέʔγϣϯఔ౓ʣͰ%#Λར༻ͨ͠΋ͷΛ࠾

Slide 405

Slide 405 text

• ComputeͰWebαʔόͷCheckpoint/Restoreͷ଎౓Λܭଌ • mruby-simplehttpserver※1ͰWebαʔόΛىಈͤ͞setsockopt()Λ؂ࢹ • setsockopt()࣮ߦલʹCheckpoint • setsockopt()࣮ߦલʹϝϞϦΛ֬อͯ͠ɺϝϞϦαΠζʹԠͯ͡ Checkpoint/Restoreͷ଎౓ͷมԽΛܭଌ 405 ༧උ࣮ݧɿϓϩηεͷΠϝʔδԽͷ࣮ݧ ˞NBUTVNPUPSZNSVCZTJNQMFIUUQTFSWFS IUUQTHJUIVCDPNNBUTVNPUPSZNSVCZTJNQMFIUUQTFSWFS

Slide 406

Slide 406 text

αʔόϓϩηεͷΠϝʔδԽ(Checkpoint/Restore) 406 $IFDLQPJOU3FTUPSF1SPDFTTJOH5JNFEVFUP.FNPSZ6TBHF 1SPDFTTJOHUJNF .FNPSZVTBHFQFSQSPDFTT<.#> $IFDLQPJOU 3FTUPSF

Slide 407

Slide 407 text

• ComputeͰApache httpdͷϓϩηε਺ΛมԽ • HTTPϦΫΤετΛܖػʹApache httpdΛىಈͤͯ͞ϨεϙϯεΛฦ͢ • ਺ेόΠτͷ੩తͳindex.htmlʹର͢ΔϦΫΤετ • CRIUΛ࢖͏৔߹ • CRIUΛ࢖Θͳ͍৔߹ 407 ༧උ࣮ݧɿϓϩηε਺ͱCRIUͷؔ܎

Slide 408

Slide 408 text

Apacheͷworker਺ͱCRIUͷؔ܎ 408 )PUTUBSU͸શͯͷ8PSLFSϓϩηε ͷىಈ׬ྃΛ଴ͨͣʹɼͭͰ΋ XPSLFSϓϩηε͕ىಈ͢Ε͹Ϩεϙ ϯεΛฦ͢͜ͱ͕Ͱ͖ΔͨΊҰఆɽ $3*6͔Βͷىಈ͸8PSLFSϓϩηε ΛશͯΠϝʔδ͔͢ΔͨΊɼશ͕ͯ 3FTUPSF͞Ε͔ͯΒϨεϙϯεΛฦ͢ ͨΊ୯ௐ૿Ճɽ

Slide 409

Slide 409 text

• Apache 2.4.18ɼPHP 7.3.0ɼWordpress 5.0.3 • ϓϩηε਺͸3ɼ୯ҰͷϓϩηεͷϝϞϦαΠζ(RSS)͸35MBytes • Python 3.7.1ɼDjango 2.1.4ɼgunicorn 19.9.0 ※1 • ϓϩηε਺2ɼεϨου਺2ɼ୯ҰͷϓϩηεͷRSS͸33MBytes • Ruby 2.5.1ɼRails 5.2.1ɼPuma 3.12.0 ※2 • ϓϩηε਺2ɼεϨου਺14ɼ୯ҰͷϓϩηεͷRSS͸89MBytes • gemΛࣄલίϯύΠϧ͓ͯ͘͠bootsnapͱ΋ൺֱ 409 ίϯςφ࠶഑ஔ࣌ͷϨεϙϯελΠϜ

Slide 410

Slide 410 text

WordPress on Apache httpd 410 BCίϚϯυͰಉ࣌઀ଓ਺ͷϕϯνϚʔΫΛ͔͚ͳ͕Β ऩ༰ϗετΛJQBUBCMFTͰԾ૝తʹμ΢ϯͤͯ͞ɼผͷऩ༰αʔόʹ࠶഑ஔΛڧ੍తʹൃੜͤͨ͞

Slide 411

Slide 411 text

Django 411 IUUQTNDMPMJQPQ[FOEFTLDPNIDKBBSUJDMFT ݱ࣮తͳن໛ʢݸਓάϧʔϓ಺Ͱͷར༻ͷΞϓϦέʔγϣϯఔ౓ʣͰ%#Λར༻ͨ͠΋ͷΛ࠾༻

Slide 412

Slide 412 text

Ruby on Rails 412 IUUQTHJUIVCDPNFWFSZMFBGFMUSBJOJO ݱ࣮తͳن໛ʢݸਓάϧʔϓ಺Ͱͷར༻ͷΞϓϦέʔγϣϯఔ౓ʣͰ%#Λར༻ͨ͠΋ͷΛ࠾༻

Slide 413

Slide 413 text

5. ·ͱΊ

Slide 414

Slide 414 text

• ୯ҰΠϯελϯεͰՄ༻ੑΛ୲อ͢Δߴ଎ͳεέδϡʔϦϯάख๏ΛఏҊ • ෳ਺ΠϯελϯεΛඞཁͱ͠ͳ͍ͨΊϦιʔείετ͕௿͍ • ࣮ݧ͔Βݱ࣌఺Ͱ΋࣮༻ՄೳͳϨϕϧͷ࠶഑ஔͷੑೳ͕ಘΒΕͨ • ϓϩμΫγϣϯ؀ڥͰԠ༻ • ϗετো֐࣌Ͱ͋ͬͯ΋Ϣʔβ͕ؾ͔ͮͳ͍ϨϕϧͰͷՄ༻ੑ • ΦʔτεέʔϦϯά࣌ʹ΋γʔϜϨεʹίϯςφΛ૿΍ͯ͠ෛՙରࡦՄೳʹ • ΞΫηε܏޲ͱϦιʔεׂΓ౰͕ͯਖ਼֬ʹ௥ਵՄೳʹ • εέʔϦϯά΍ϋʔυ΢ΣΞϓʔϧͷϦιʔεׂΓ౰ͯ΋࠷దԽ 414 ·ͱΊ