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

FastContainer: Webアプリケーションコンテナの状態をリアクティブに決定するコンテナ管理アーキテクチャ / FastContainer at IOT38

FastContainer: Webアプリケーションコンテナの状態をリアクティブに決定するコンテナ管理アーキテクチャ / FastContainer at IOT38

システムの要素を循環させることによって可用性を実現する基盤技術

松本亮介、近藤宇智朗*、三宅悠介、力武健次**、栗林健太郎 / ペパボ研究所 / *GMOペパボ / **力武健次技術士事務所
2017.06.24 第38回 情報処理学会 インターネットと運用技術研究会

MATSUMOTO Ryosuke
PRO

June 24, 2017
Tweet

More Decks by MATSUMOTO Ryosuke

Other Decks in Research

Transcript

  1. γεςϜͷཁૉΛ॥؀ͤ͞Δ͜ͱʹΑͬͯՄ༻ੑΛ࣮ݱ͢Δج൫ٕज़
    দຊ྄հɺۙ౻Ӊஐ࿕*ɺࡾ୐༔հɺྗ෢݈࣍**ɺ܀ྛ݈ଠ࿠ / ϖύϘݚڀॴ / *GMOϖύϘ / **ྗ෢݈ٕ࣍ज़࢜ࣄ຿ॴ
    2017.06.24 ୈ38ճ ৘ใॲཧֶձ Πϯλʔωοτͱӡ༻ٕज़ݚڀձ
    FastContainer: WebΞϓϦέʔγϣϯίϯςφͷঢ়ଶ
    ΛϦΞΫςΟϒʹܾఆ͢Δίϯςφ؅ཧΞʔΩςΫνϟ

    View Slide

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

    View Slide

  3. 1.
    എܠͱ໨త

    View Slide

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

    View Slide

  5. 1. Πϯελϯε௥Ճॲཧ͕௿଎Ͱ͋Δ͜ͱ
    2. ϋʔυ΢ΣΞϦιʔεͷར༻ޮ཰ͷ௿͞
    3. ۭ͖Ϧιʔε֬ೝͷͨΊͷεέδϡʔϦϯάॲཧͷ஗Ԇ
    5
    ҰൠతͳԾ૝Խج൫ͷΦʔτεέʔϧͷ՝୊
    1.ͱ2.ͷ՝୊ΛղܾͰ͖ΔΞʔΩςΫνϟͷఏҊ

    View Slide

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

    View Slide

  7. ηΩϡϦςΟ΍ӡ༻ٕज़ͷ՝୊΋ಉ࣌ʹղܾ
    • ϗετ͕॥؀͢ΔͷͰϥΠϒϥϦ͕ࣗવʹߋ৽͞Ε͍ͯ͘
    • ऩ༰ઌ৘ใΛม͑Δ͚ͩͰࣗવʹऩ༰αʔόؒΛҠಈՄೳ
    • ϝϯςφϯε΍ো֐ରԠ͕༰қ
    7
    Πϯελϯε͕॥؀͢ΔมԽʹڧ͍ج൫ͷఏҊ

    View Slide

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

    View Slide

  9. 1. Πϯελϯε௥Ճॲཧ͕௿଎Ͱ͋Δ͜ͱ
    2. ϋʔυ΢ΣΞϦιʔεͷར༻ޮ཰ͷ௿͞
    3. ۭ͖Ϧιʔε֬ೝͷͨΊͷεέδϡʔϦϯάॲཧͷ஗Ԇ
    9
    ಥൃతͳΞΫηεूதʹର͢Δෛՙ෼ࢄ͕ࠔ೉
    ຊൃදͰ͸1.ͱ2.ͷ՝୊Λείʔϓͱ͢Δ

    View Slide

  10. • Φʔτεέʔϧ࣌ͷݕ஌͔Βεέʔϧࢦࣔͷཻ౓͕ૈ͍
    • ֎෦͔ΒͷఆظతͳϦιʔε؂ࢹʹΑΔݕ஌ͱ௥Ճࢦࣔ
    • ؂ࢹର৅ͷ૿Ճʹ൐͍؂ࢹִؒ΍؂ࢹޮ཰͕௿Լ
    • VMͷ৔߹ɺݕ஌͔ΒͷΠϯελϯεىಈʹ͕͔͔࣌ؒΔ
    • ಥൃతͳΞΫηε࣌ʹεέʔϧॲཧ͕ؒʹ߹Θͳ͍
    10
    1. Πϯελϯεͷ௥Ճॲཧ͕௿଎Ͱ͋Δ͜ͱ

    View Slide

  11. • Πϯελϯε͕جຊతʹىಈ͠ϦιʔεΛ઎༗͠ଓ͚Δ
    • Πϯελϯε͕VMͷ৔߹ʹ࢖༻͢ΔϦιʔεྔ΋ଟ͍
    • HTTPϦΫΤετ୯Ґʹىಈ͢Δʹ͸ىಈίετ͕ߴ͍
    • Ұൠతʹ͸ৗ࣌Πϯελϯε͕ىಈ͠ଓ͚Δํࣜ
    • ϝϞϦϦʔΫ͢ΔΑ͏ͳιϑτ΢ΣΞͷ৔߹େม
    11
    2. ϋʔυ΢ΣΞϦιʔεͷར༻ޮ཰ͷ௿͞

    View Slide

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

    View Slide

  13. • ಥൃతͳΞΫηε͚࣌ͩεέʔϧ͢Δͷ͸ͳͥ೉͍͠ͷ͔ʁ
    • γεςϜ͕ෆมੑΛ࣋ͭͱมԽ΁͸େ͖ͳίετ͕൐͏
    • γεςϜͷߏ੒ཁૉ΋ෆมੑΛ࣋ͪঢ়ଶมԽͷίετ͕ߴ͍
    • ෆมੑΛҡ࣋͢Δ͜ͱ͕γεςϜ؅ཧͷ໨తͰ͋Δ
    • ૝ఆͷൣғ಺Ͱ඼࣭Λ࠷େԽ͢Δ͜ͱΛ໨తͱ͍ͯ͠Δ
    • ૝ఆͰ͖ͳ͍ΞΫηεूத΍໰୊͕ଟൃ͢Δ࣌୅ʹ͸ෆ޲͖
    13
    ෆมੑΛ൐͏γεςϜͷ՝୊

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. • ϗετͷىಈɾෳ੡ɾఀࢭɾ૿ڧॲཧͷޮ཰ԽΛॏࢹ
    • ֤छॲཧΛHTTPϦΫΤετ࣌ʹϦΞΫςΟϒʹ࣮ࢪ
    • ϗετʹ͸ίϯςφܕԾ૝ԽΛ࠾༻ͯ͠ىಈΛߴ଎ʹ࣮ݱ
    • ίϯςφͷϞχλϦϯά͸ίϯςφࣗ਎͕࣮ࢪͯ͠ݕ஌
    • ϦΫΤετʹج͍ͯϦΞΫςΟϒʹίϯςφͷঢ়ଶΛܾఆ
    17
    FastContainerΞʔΩςΫνϟͱ໋໊

    View Slide

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

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

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

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

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

    View Slide

  19. HTTPϦΫΤετܖػͰͷ௥Ճɾఀࢭॲཧ
    19
    -PDBM
    8FC1SPYZ
    $.%#
    ʴ
    "1*
    ίϯςφ
    ίϯςφ
    w ϦΫΤετॲཧ࣌ʹίϯςφͷϦιʔε࢖༻ྔ͕ߴ
    ͘ͳͬͨ͜ͱΛݕ஌ͨ͠Β"1*ʹίϯςφͷ௥Ճࢦ
    ࣔʢ௿͘ͳͬͨΒ࡟আࢦࣔʣ
    w $.%#ʹίϯςφͷ৘ใ͕͋Ε͹ىಈͯ͠ϦΫΤετ
    Λసૹ
    w ىಈॲཧத͸ىಈࡁΈͷίϯςφʹҰ୴ϦΫΤετΛ
    సૹͯ͠ىಈޙʹৼΓ෼͚։࢝
    8FC1SPYZ
    w Ϋʔϧμ΢ϯλΠϜͱ͍͏֓೦Λઃ͚ɺසൟʹ௥Ճɾ
    ఀࢭॲཧ͕ൃੜ͠ͳ͍Α͏ʹࢦࣔڐՄ࣌ؒΛઃఆ
    ऩ༰αʔό
    ؂ࢹɾݕ஌

    View Slide

  20. • ϦΫΤετ୯ҐͰߴ଎ʹεέʔϧΞοϓɾεέʔϧΞ΢τՄೳ
    • εέʔϧՄ൱ͷݕ஌΋ϦΫΤετ୯ҐͰ࣮ࢪ
    • Ұఆ࣌ؒܦա͔ͭϦΫΤετॲཧ͕ͳ͔ͬͨΒίϯςφఀࢭ
    • ίϯςφΛ࢖͍ࣺͯՄೳʹ → immutability
    • Ұఆ࣌ؒىಈ͢Δ͜ͱͰ౎౓ىಈΑΓߴ଎Խ → mortality
    • ίϯςφ͕ϦΫΤετΛॲཧ͍ͯ͠Δ࣌ؒͷΈ՝ۚ౳͕Մೳ
    20
    FastContainerΞʔΩςΫνϟͷ·ͱΊ

    View Slide

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

    View Slide

  22. 4.
    ࣮ݧͱߟ࡯

    View Slide

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

    View Slide

  24. 24
    ࣮ݧ؀ڥ ߲໨ ࢓༷
    $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

  25. 25
    10ສϦΫΤετதɺ5ສϦΫΤετ͔Β
    εέʔϧΞ΢τΛߦ͍ɺϨεϙϯεʹӨ
    ڹΛ༩͑Δ͜ͱͳ͘ॠ࣌ʹෛՙ෼ࢄ͕Ͱ
    ͖͍ͯΔɻ
    5ສϦΫΤετҎ߱͸2ίϯ
    ςφʹεέʔϧΞ΢τ͞Εͨ
    ͨΊɺϨεϙϯελΠϜ͕൒
    ෼ҎԼͱͳͬͯ࢒Γͷ5ສϦ
    ΫΤετ୹࣌ؒͰॲཧ͍ͯ͠
    Δ͜ͱ͕෼͔Δɻ

    View Slide

  26. 26
    10ສϦΫΤετதɺ5ສϦΫΤετ
    ͔ΒCPU2ഒͷεέʔϧΞοϓΛߦ
    ͍ɺϨεϙϯεʹӨڹΛ༩͑Δ͜ͱ
    ͳ͘ॠ࣌ʹෛՙ෼ࢄ͕Ͱ͖͍ͯΔɻ
    5ສϦΫΤετҎ߱͸CPU͕
    ݩͷ2ഒʹڧԽ͞ΕͨͨΊɺ
    ϨεϙϯελΠϜ͕໿൒෼ͱ
    ͳͬͯ࢒Γͷ5ສϦΫΤετ
    ୹࣌ؒͰॲཧ͍ͯ͠Δ͜ͱ͕
    ෼͔Δɻ

    View Slide

  27. 5.
    ·ͱΊ

    View Slide

  28. • ΦʔτεέʔϧͷॲཧίετͱϦιʔεޮ཰Խͷ՝୊ʹண໨
    • ෆมੑΛ൐͏ج൫ͷηΩϡϦςΟͱӡ༻ٕज़ͷ՝୊ʹண໨
    • Πϯελϯε͕॥؀͠มԽʹڧ͍Ծ૝Խج൫ٕज़ͷఏҊ
    • immutabilityɺmortalityɺreactivity͕ಛ௃
    • Πϯελϯεͷঢ়ଶมԽͷίετޮ཰Խʹண໨
    28
    ·ͱΊ

    View Slide

  29. • ϓϩμΫτͱͯ͠ϦϦʔε࣮͠ӡ༻্ͷޮՌΛଌఆ
    • Πϯελϯεͷ॥؀ʹGCͷΑ͏ͳϞσϧΛద༻ͯ͠ޮ཰Խ
    • CRIUʹΑΓ൓ԠతىಈΛαεϖϯυతىಈʹରԠ
    • ىಈͷ஗͍ίϯςφ(JVMͳͲ)ʹ΋ରԠՄೳ͔ݕূ
    • ະղܾͷϋʔυ΢ΣΞεέδϡʔϦϯάͷ՝୊ͷରԠ
    29
    ࠓޙͷ՝୊

    View Slide

  30. ݚڀһɺੵۃతʹืूதʂ
    http://rand.pepabo.com/

    View Slide