Upgrade to Pro — share decks privately, control downloads, hide ads and more …

クラウド・Webホスティングサービスのセキュリティと運用技術の研究

 クラウド・Webホスティングサービスのセキュリティと運用技術の研究

クラウド・Webホスティングサービスのセキュリティと運用技術の研究

セキュリティ・キャンプ2018 全国大会
セキュリティ・ミニキャンプ2019 福岡

2019/03/03
さくらインターネット株式会社
さくらインターネット研究所

上級研究員松本亮介 / @matsumotory / まつもとりー

MATSUMOTO Ryosuke
PRO

March 03, 2019
Tweet

More Decks by MATSUMOTO Ryosuke

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. 1.
    ͸͡Ίʹ

    View Slide

  6. ߨٛ֓ཁ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. ߨٛͷਐΊํ

    View Slide

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

    View Slide

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

    View Slide

  16. ࣗݾ঺հ

    View Slide

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

    View Slide

  18. 18

    View Slide

  19. 19

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. ਓؒͷൃ૝ vs ج൫ٕज़(ػց)ͱদຊͷݚڀ
    26
    ج൫ٕज़ ػց

    ϓϩμΫτ ਓؒͷൃ૝

    ਓͷମྗɾਫ਼ਆͷݶք
    ਓͷମྗɾਫ਼ਆͷݶք
    ਓྗͰࢧ͑ଓ͚Δ
    ਓྗͰ޿͛ଓ͚Δ
    ਓྗͰࢧ͑ଓ͚Δ
    ϓϩμΫτͷݶքͷ෯
    ج൫ٕज़ ػց

    ϓϩμΫτ ਓؒͷൃ૝

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

    View Slide

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

    View Slide

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

    View Slide

  29. ηΫγϣϯͷ֓ཁ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  44. ηΫγϣϯͷ·ͱΊ

    View Slide

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

    View Slide

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

    View Slide

  47. ηΫγϣϯͷ֓ཁ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  64. CGI࣮ߦํࣜ
    64
    $(*QSPDFTT QIQDHJJOEFYQIQ
    $(*QSPDFTT
    GPSL

    UFSNJOBUFQSPDFTT
    FYFDWF

    1BSFOUIUUQEQSPDFTT
    PXOFSSPPU

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF

    ϦΫΤετຖʹϓϩηεͷੜ੒ɾഁغͱൺֱతେ͖ͳ
    ΠϯλϓϦλόΠφϦʢ1)1ͩͱQIQDHJʣͷ
    FYFDWF
    ͕ඞཁ

    View Slide

  65. DSO࣮ߦํࣜ
    65
    1BSFOUIUUQEQSPDFTT
    PXOFSSPPU

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF
    JOEFYQIQ
    QBSTFSVO
    αʔόϓϩηεʹΠϯλϓϦλΛϥΠϒϥϦ
    ͱͯ͠௚઀૊ΈࠐΜͰ͓͘

    View Slide

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

    View Slide

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

    View Slide

  68. WebαʔόͷجຊతͳϞσϧʢpreforkʣ
    1BSFOUIUUQEQSPDFTT
    PXOFSSPPU

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF

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

    View Slide

  69. WebαʔόͷجຊతͳϞσϧʢworkerʣ
    1BSFOUIUUQEQSPDFTT
    PXOFSSPPU

    $IJMEIUUQEUISFBE
    PXOFSBQBDIF

    $IJMEIUUQEUISFBE
    PXOFSBQBDIF

    $IJMEIUUQEUISBE
    PXOFSBQBDIF

    $MJFOU
    ϦΫΤετ
    Ϩεϙϯε
    6/*9ܥ04ͷ৔߹ࣄલʹϦΫΤετΛड͚Δ
    εϨουΛෳ਺GPSL
    ͯ͠ϓʔϧ͓ͯ͘͠
    69
    ϦΫΤετ
    Ϩεϙϯε
    ϦΫΤετ
    Ϩεϙϯε

    View Slide

  70. WebαʔόͷجຊతͳϞσϧʢϊϯϒϩοΩϯάʣ
    1BSFOUOHJOYQSPDFTT
    PXOFSSPPU

    $IJMEOHJOYQSPDFTT
    PXOFSOHJOY

    $IJMEOHJOYQSPDFTT
    PXOFSOHJOY

    $MJFOU
    ϦΫΤετ
    Ϩεϙϯε
    6/*9ܥ04ͷ৔߹ࣄલʹϦΫΤετΛड͚Δ
    ϓϩηεΛෳ਺GPSL
    ͯ͠ϓʔϧ͓ͯ͘͠
    ୯ҰͷϓϩηεͰෳ਺ͷϦΫΤετΛฒߦॲཧ
    70
    ϦΫΤετ
    Ϩεϙϯε
    ϦΫΤετ
    Ϩεϙϯε

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  74. ηΫγϣϯͷ·ͱΊ

    View Slide

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

    View Slide

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

    View Slide

  77. ηΫγϣϯͷ֓ཁ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  88. 88

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  93. mod_vlimitઃఆྫ
    93

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  101. 101

    View Slide

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

    View Slide

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

    View Slide

  104. mod_mrubyͱcgroupͷ࣮૷
    "QBDIF1SPDFTT
    [email protected]
    NSVCZ
    MJCNSVCZB

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

    View Slide

  105. Apacheͱmod_mrubyʹΑΔ࣮૷֓ཁ
    105

    View Slide

  106. Ϧιʔε੍ޚͷઃఆྫ
    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ͱͯ͠εέδϡʔϧ͢Δઃఆ

    View Slide

  107. Ϧιʔε੍ޚͷઃఆྫ
    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

    View Slide

  108. Ϧιʔε੍ޚͷઃఆྫ
    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

    View Slide

  109. Ϧιʔε੍ޚͷઃఆྫ
    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

    View Slide

  110. Ϧιʔε੍ޚͷઃఆྫ
    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

    View Slide

  111. Ϧιʔε੍ޚͷઃఆྫ
    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

    View Slide

  112. Ϧιʔε੍ޚͷઃఆྫ
    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

    View Slide

  113. Ϧιʔε੍ޚͷઃఆྫ
    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

    View Slide

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

    View Slide

  115. ࣮ݧ؀ڥ
    115

    View Slide

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

    View Slide

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

    View Slide

  118. 118

    View Slide

  119. ͦͷଞ࠷৽ͷݚڀಈ޲

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  128. ॏΈ෇͚Ϧετͷσʔλߏ଄ྫ
    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,
    },
    },
    },
    }
    ϑΝΠϧ΁ͷϦΫΤετʹରͯ͠ܭࢉͨ͠είΞΛɺ֘౰
    ͢ΔϗετͱϑΝΠϧͷείΞʹͦΕͧΕՃࢉ͢Δ

    View Slide

  129. มԽ఺είΞܭࢉྫ
    129
    > cf = ChangeFinder.new 5, 0.01, 10, 0.01, 7
    => #@change_point_analyze=#,
    @smooth_term=5, @outlier_analyze=#0x7fad5c80be20>>
    > 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

    View Slide

  130. 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

    View Slide

  131. มԽ఺ݕग़ΤϯδϯͷॳظԽ࣮૷ྫ
    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

    View Slide

  132. ϗετ୯ҐͷมԽ఺είΞͷܭࢉྫ
    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}”

    View Slide

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

    View Slide

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

    View Slide

  135. ηΫγϣϯͷ·ͱΊ

    View Slide

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

    View Slide

  137. 5.
    ηΩϡϦςΟͱੑೳ

    View Slide

  138. ηΫγϣϯͷ֓ཁ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  147. CGI࣮ߦํࣜ
    $(*QSPDFTT QIQDHJJOEFYQIQ
    $(*QSPDFTT
    GPSL

    UFSNJOBUFQSPDFTT
    FYFDWF

    1BSFOUIUUQEQSPDFTT
    PXOFSSPPU

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF

    ϦΫΤετຖʹϓϩηεͷੜ੒ɾഁغͱ
    ൺֱతେ͖ͳόΠφϦʢ1)1ͩͱQIQDHJόΠφϦʣͷ
    FYFDWF
    ͕ඞཁ
    147

    View Slide

  148. $(*QSPDFTT
    PXOFSVTFS

    $(*QSPDFTT
    PXOFSSPPU

    QIQDHJJOEFYQIQ
    PXOFSVTFS

    $(*QSPDFTT
    PXOFSVTFS

    ੩తʹઃఆ͞ΕͨVJEΛݩʹTFUVJE
    TFUHJE

    GPSL

    FYFDWF
    TVFYFDQSPHSBN TFUVJESPPU

    UFSNJOBUFQSPDFTT
    FYFDWF

    1BSFOUIUUQEQSPDFTT
    PXOFSSPPU

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF

    ϦΫΤετຖʹ$(*༻ϓϩηεͷ
    ੜ੒ഁغ͕ඞཁ
    ˞$(*TV&9&$
    148

    View Slide

  149. 149

    View Slide

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

    View Slide

  151. $(*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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  155. DSO࣮ߦํࣜ
    155
    1BSFOUIUUQEQSPDFTT
    PXOFSSPPU

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF
    JOEFYQIQ
    QBSTFSVO
    αʔόϓϩηεʹΠϯλϓϦλΛϥΠϒϥϦ
    ͱͯ͠௚઀૊ΈࠐΜͰ͓͘

    View Slide

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

    View Slide

  157. 157

    View Slide

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

    View Slide

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

    View Slide

  160. DSO࣮ߦํࣜ
    160
    1BSFOUIUUQEQSPDFTT
    PXOFSSPPU

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF
    JOEFYQIQ
    QBSTFSVO
    αʔόϓϩηεʹΠϯλϓϦλΛϥΠϒϥϦ
    ͱͯ͠௚઀૊ΈࠐΜͰ͓͘

    View Slide

  161. 1BSFOUIUUQEQSPDFTT
    PXOFSSPPU

    $IJMEIUUQEQSPDFTT
    PXOFSSPPU

    JOEFYQIQ
    PXOFSVTFS

    TFUVJE
    TFUHJE

    QBSTF SVO
    ˞[email protected]
    $IJMEIUUQEQSPDFTT
    PXOFSVTFS

    $IJMEIUUQEQSPDFTT
    PXOFSVTFS

    UFSNJOBUFQSPDFTT
    ϦΫΤετຖͷࢠIUUQEϓϩηεͷੜ੒ഁغ͕ඞཁ


    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  165. ࣮ݧ؀ڥ
    165

    View Slide

  166. 166

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  177. 177
    1BSFOUIUUQEQSPDFTT
    PXOFSBQBDIF

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF

    JOEFYQIQ
    PXOFSVTFS

    TFUVJE
    TFUHJE

    QBSTF SVO
    ˞[email protected]
    $IJMEIUUQEQSPDFTT
    PXOFSVTFS

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF

    ϦΫΤετຖʹϓϩηεͷੜ੒ഁغ͕ෆཁʁʁʁ
    QSDUM
    TFUVJETFUHJEDBQT
    TFUVJE
    TFUHJE

    View Slide

  178. 178
    1BSFOUIUUQEQSPDFTT
    PXOFSBQBDIF

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF

    JOEFYQIQ
    PXOFSVTFS

    TFUVJE
    TFUHJE

    QBSTF SVO
    ˞[email protected]
    $IJMEIUUQEQSPDFTT
    PXOFSVTFS

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF

    ϦΫΤετຖʹϓϩηεͷੜ੒ഁغ͕ෆཁʁʁʁ
    QSDUM
    TFUVJETFUHJEDBQT
    TFUVJE
    TFUHJE

    ίϯςϯπΛαʔϏεར༻ऀ͕࡞੒Ͱ͖Δ
    ৔߹͸੬ऑੑʹͳΔ

    View Slide

  179. 179
    1BSFOUIUUQEQSPDFTT
    PXOFSBQBDIF

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF

    JOEFYQIQ
    PXOFSVTFS

    TFUVJE
    TFUHJE

    QBSTF SVO
    ˞[email protected]
    $IJMEIUUQEQSPDFTT
    PXOFSVTFS

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF

    ࣮ߦϓϩηε͕ΦʔφมߋͷಛݖΛ࣋ͬ
    ͍ͯΔͨΊɺίϯςϯπܦ༝Ͱݖݶมߋ
    ͕Մೳʂʂ
    ˣ
    QSDUM
    TFUVJETFUHJEDBQT
    TFUVJE
    TFUHJE

    ίϯςϯπ࣮ߦલʹಛݖΛམͱ͞ͳ͍ͱ͍͚
    ͳ͍ɻͭ·ΓɺϓϩηεͷΦʔφมߋޙ͸ݩ
    ͷΦʔφʹ໭Εͳ͍ͨΊϓϩηεഁغ͕ඞཁ
    VOTFUDBQT

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  187. 1BSFOUIUUQEQSPDFTT
    PXOFSSPPU

    $IJMEIUUQEQSPDFTT
    PXOFSBQBDIF

    UISFBE
    PXOFSVTFS

    UISFBE
    PXOFSBQBDIF

    JOEFYQIQ
    PXOFSVTFS

    TFUVJE
    TFUHJE
    ʜ VOTFUDBQT
    DSFBUFUISFBE TFUDBQT
    EFTUSPZUISFBE
    QBSTF SVO
    QSDUM
    TFUVJETFUHJEDBQT
    UISFBE
    PXOFSVTFS

    ˞%40দຊΒͷΞΫηε੍ޚΞʔΩςΫνϟ


    View Slide

  188. 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


    View Slide

  189. 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



    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  193. ࣮ݧ؀ڥ
    193

    View Slide

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

    View Slide

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

    View Slide

  196. ࣮ߦํࣜ ΞΫηε੍ޚద༻ʹΑΔεϧʔϓοτ௿Լ཰
    $(*
    TV&9&$
    [email protected]@TFDVSJUZ
    %40
    [email protected]
    [email protected]@TFDVSJUZ
    196

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  200. ͦͷଞ࠷৽ͷݚڀಈ޲

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  205. ϑΝΠϧΛPQFO

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

    View Slide

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

    View Slide

  207. ηΫγϣϯͷ·ͱΊ

    View Slide

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

    View Slide

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

    View Slide

  210. ηΫγϣϯͷ֓ཁ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  231. VM
    • 
    • 
    • 
    231

    View Slide

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

    View Slide

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

    233

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  237. mod_mrubyͷػೳ֦ுͷ֓ཁਤ
    237

    View Slide

  238. mod_mrubyઃఆྫ
    # Normal hook

    mrubyHandlerMiddle /path/to/test.rb

    # ByteCode Caching at Start up

    mrubyHandlerMiddle /path/to/test.rb cache

    238

    View Slide

  239. mod_mrubyઃఆྫ
    # Normal hook

    mrubyHandlerMiddle /path/to/test.rb

    # ByteCode Caching at Start up

    mrubyHandlerMiddle /path/to/test.rb cache

    239

    View Slide

  240. 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

    View Slide

  241. 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

    View Slide

  242. 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

    View Slide

  243. 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

    View Slide

  244. ҟͳΔWebαʔόͷ౷Ұత֦ுهड़
    "QBDIF
    "1*
    3VCZTDSJQU
    [email protected]
    3VCZTDSJQU
    ɾ
    ɾ
    ɾ
    ɾ

    3VCZTDSJQUO
    /HJOY
    "1*
    [email protected]
    3VCZTDSJQU
    "QBDIF
    $PSF
    /HJOY
    $PSF
    3VCZ
    %4-
    GPS8FC
    "QBDIF
    5SB⒏D
    4FSWFS
    "1*
    [email protected]
    "QBDIF
    5SB⒏D
    4FSWFS
    $PSF
    [email protected]
    244

    View Slide

  245. ౷Ұతهड़ྫ
    # 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

    View Slide

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

    View Slide

  247. ࣮ݧ؀ڥ
    247

    View Slide

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

    248

    View Slide

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


    View Slide

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


    View Slide

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

    View Slide

  252. ͦͷଞ࠷৽ͷݚڀಈ޲

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  256. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  261. 3VCZ4DSJQUʢ3VCZXPSMEʣ
    1SPD
    'JCFSSFTVNF
    mruby૊ΈࠐΈͷϛυϧ΢ΣΞͷϊϯϒϩοΩϯά
    261
    NJEEMFXBSF $XPSME

    [email protected]
    'JCFS
    3VCZCZUFDPEFJODMVEFE
    CMPDLJOHNFUIPE
    DGVODPGCMPDLJOHNFUIPE
    SVOCMPDLJOHPQFSBUJPOXJUIOPOCMPDLJOHNPEF
    TFUDBMMCBDLDGVODUPFWFOUMPPQPGNJEEMFXBSF
    DGVODPGNJEEMFXBSFPOFWFOUMPPQ
    QSPDFTTPUIFSSFRVFTUPOFWFOUMPPQ
    DBMMCBDLDGVOD
    SVOSFTVNFCZSVOOJOHQSPDPCKFDUGSPN$
    [email protected]
    SVOQSPDPCKFDUGSPN$










    $VSSFOUNSVCZOPOCMPDLJOHNPEFM
    3FRVFTU
    'JCFSZJFME


    View Slide

  262. non-blocking sleep sample script
    262

    View Slide

  263. async sleepͷαϯϓϧ
    263

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  268. RubyଆͷAsync.sleepͷ࣮૷
    268

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  275. ηΫγϣϯͷ·ͱΊ

    View Slide

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

    View Slide

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

    View Slide

  278. ηΫγϣϯͷ֓ཁ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  291. • αʔόϓϩηεىಈ࣌ʹূ໌ॻ͸Ұ੾ಡΈࠐ·ͳ͍
    • αʔόϓϩηεͷ࠶ىಈ/࠶ಡΈࠐΈ࣌ؒͷ௿଎ԽΛճආ
    • 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

    View Slide

  292. ΞʔΩςΫνϟʢํࣜʣͷఏҊ
    292
    'JMF,74
    IUUQE

    QSPDFTT
    $MJFOU
    4/*ʹΑͬͯTFSWFSOBNF͕FYBNQMFKQͷ
    υϝΠϯʹର͢Δ5-4ϋϯυγΣΠΫ͕։࢝
    5-4ϋϯυγΣΠΫ࣌ʹυϝΠϯFYBNQMFKQʹඥͮ͘ূ
    ໌ॻͱൿີ伴ΛϑΝΠϧ΍,FZ7BMVF4UPSF ,74
    ͳͲ
    ͔ΒಈతʹಡΈࠐΈ͍ͨ

    View Slide

  293. ΞʔΩςΫνϟʢํࣜʣͷఏҊ
    293
    'JMF,74
    IUUQE

    QSPDFTT
    $MJFOU
    5-4ϋϯυγΣΠΫ࣌ʹ೚ҙͷؔ਺Λ࣮ߦͰ͖Ε͹ྑ͍
    ؔ਺ͷதͰυϝΠϯͱඥͮ͘αʔόূ໌ॻͱൿີ伴Λ
    ಡΈࠐΉؔ਺Λ࣮ߦͰ͖Ε͹ྑ͍

    View Slide

  294. • 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೔ʹϦϦʔε

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  310. ੩తಡΈࠐΈͱಈతಡΈࠐΈͷੑೳൺֱ
    310
    ಉ࣌઀ଓ਺
    ੩తಡΈࠐΈख๏
    SFRTFD

    ಈతಡΈࠐΈख๏
    SFRTFD





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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  316. 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
    Θ͔Γʹ͍͕͘Ұϲ݄Ͱ͔Β΁ͱ
    ূ໌ॻఔ౓૿͍͑ͯΔ
    ূ໌ॻ਺͸ϦϓϨʔεલͷഒ͔Βഒ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  323. 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ఀࢭ

    View Slide

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

    View Slide

  325. 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ఀࢭ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  330. ηΫγϣϯͷ·ͱΊ

    View Slide

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

    View Slide

  332. 8.
    ͓ΘΓʹ

    View Slide

  333. ຊߨ࠲ͷ·ͱΊ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  340. ηΫγϣϯͷ֓ཁ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  344. 1.
    എܠͱ໨త

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  355. 3.
    FastContainerΞʔΩςΫνϟ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  359. ίϯςφ࣌୅ͷ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*

    View Slide

  360. HTTP FastContainerͷϑϩʔ
    360
    8FC1SPYZ
    ʢ[email protected]

    $.%#
    ʴ
    "1*
    -PDBM8FC1SPYZ
    [email protected]

    $MJFOU ίϯςφ
    ίϯςφ
    ίϯςφ
    w )551ϦΫΤετͷ)PTUOBNF
    ΛΩʔʹɺ$.%# ߏ੒؅ཧ%#

    ͔Βίϯςφͷ৘ใΛऔಘ
    )551 4

    ϦΫΤετ
    w ίϯςφͷ*1ͱϙʔτʹج͍
    ͯίϯςφʹϓϩΩγ
    w ίϯςφ͕-JTUFO͍ͯ͠ͳ͍
    ৔߹͸$.%#͔Βίϯςφ
    ৘ใΛಘͯىಈ
    $POUBJOFS&OHJOF
    IBDPOJXB

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  364. 4.
    ࣮ݧͱߟ࡯

    View Slide

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

    View Slide

  366. ࣮ݧ؀ڥ ߲໨ ࢓༷
    $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ສϦΫΤετ͔Βεέʔϧॲ
    ཧΛߦ͍ɺॲཧ͕٧·Δ͜ͱͳ͘ෛՙ
    ෼ࢄग़དྷ͍ͯΔ͔Λ֬ೝɻ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  370. 5.
    ·ͱΊ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  377. 1.
    എܠͱ໨త

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  382. 2.
    ؔ࿈ݚڀͷ՝୊

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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


    View Slide

  389. 3.
    ఏҊख๏

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  393. HTTP FastContainerͷجຊϑϩʔ
    393
    8FC1SPYZ
    ʢ[email protected]

    $.%#
    ʴ
    "1*
    8FC%JTQBUDIFS
    [email protected]

    $MJFOU ίϯςφ
    ίϯςφ
    ίϯςφ
    w )551ϦΫΤετͷ)PTUOBNF
    ΛΩʔʹɺ$.%# ߏ੒؅ཧ%#

    ͔Βίϯςφͷ৘ใΛऔಘ
    )551 4

    ϦΫΤετ
    w ίϯςφͷ*1ͱϙʔτʹج͍
    ͯίϯςφʹϓϩΩγ
    w ίϯςφ͕-JTUFO͍ͯ͠ͳ͍
    ৔߹͸$.%#͔Βίϯςφ
    ৘ใΛಘͯىಈ
    $POUBJOFS&OHJOF
    IBDPOJXB

    ऩ༰ϗετ"

    View Slide

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

    View Slide

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

    View Slide

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

    ࠷ॳͷ࠶഑ஔ࣌͸ίϯςφͷىಈ͕ඞཁͰ͋Δ͕ɺ
    ىಈޙ͸Ұఆظؒىಈ͠ଓ͚Δɻ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  401. 4.
    ࣮ݧͱߟ࡯

    View Slide

  402. FastContainerͷγεςϜߏ੒
    402

    View Slide

  403. 403

    View Slide

  404. • ༧උ࣮ݧ: 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
    ݱ࣮తͳن໛ʢݸਓάϧʔϓ಺Ͱͷར༻ͷΞϓϦέʔγϣϯఔ౓ʣͰ%#Λར༻ͨ͠΋ͷΛ࠾

    View Slide

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

    View Slide

  406. αʔόϓϩηεͷΠϝʔδԽ(Checkpoint/Restore)
    406
    $IFDLQPJOU3FTUPSF1SPDFTTJOH5JNFEVFUP.FNPSZ6TBHF
    1SPDFTTJOHUJNF











    .FNPSZVTBHFQFSQSPDFTT<.#>

    $IFDLQPJOU 3FTUPSF

    View Slide

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

    View Slide

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

    View Slide

  409. • 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
    ίϯςφ࠶഑ஔ࣌ͷϨεϙϯελΠϜ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  413. 5.
    ·ͱΊ

    View Slide

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

    View Slide