Pro Yearly is on sale from $80 to $50! »

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

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

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

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

2b692bd83f4418103142a053ecf5ff59?s=128

MATSUMOTO Ryosuke

June 24, 2017
Tweet

Transcript

  1. γεςϜͷཁૉΛ॥؀ͤ͞Δ͜ͱʹΑͬͯՄ༻ੑΛ࣮ݱ͢Δج൫ٕज़ দຊ྄հɺۙ౻Ӊஐ࿕*ɺࡾ୐༔հɺྗ෢݈࣍**ɺ܀ྛ݈ଠ࿠ / ϖύϘݚڀॴ / *GMOϖύϘ / **ྗ෢݈ٕ࣍ज़࢜ࣄ຿ॴ 2017.06.24 ୈ38ճ

    ৘ใॲཧֶձ Πϯλʔωοτͱӡ༻ٕज़ݚڀձ FastContainer: WebΞϓϦέʔγϣϯίϯςφͷঢ়ଶ ΛϦΞΫςΟϒʹܾఆ͢Δίϯςφ؅ཧΞʔΩςΫνϟ
  2. 1. എܠͱ໨త 2. Ծ૝Խج൫ͷεέʔϦϯάͱӡ༻ٕज़ͷ՝୊ 3. FastContainerΞʔΩςΫνϟ 4. ࣮ݧͱߟ࡯ 5. ·ͱΊ

    2 ໨࣍
  3. 1. എܠͱ໨త

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

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

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

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

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

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

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

    10 1. Πϯελϯεͷ௥Ճॲཧ͕௿଎Ͱ͋Δ͜ͱ
  11. • Πϯελϯε͕جຊతʹىಈ͠ϦιʔεΛ઎༗͠ଓ͚Δ • Πϯελϯε͕VMͷ৔߹ʹ࢖༻͢ΔϦιʔεྔ΋ଟ͍ • HTTPϦΫΤετ୯Ґʹىಈ͢Δʹ͸ىಈίετ͕ߴ͍ • Ұൠతʹ͸ৗ࣌Πϯελϯε͕ىಈ͠ଓ͚Δํࣜ • ϝϞϦϦʔΫ͢ΔΑ͏ͳιϑτ΢ΣΞͷ৔߹େม

    11 2. ϋʔυ΢ΣΞϦιʔεͷར༻ޮ཰ͷ௿͞
  12. • ੬ऑੑରԠ΍όʔδϣϯΞοϓͷίετ͕ߴ͍ • αʔϏεͷఀࢭˠόʔδϣϯΞοϓˠىಈͳͲ • ϝϯςφϯε࣌ͷௐ੔ͷίετ͕ߴ͍ • ऩ༰αʔόͷҠಈͷίετ • αʔϏεఀࢭ࣌ؒͷௐ੔ͳͲߴ͍ස౓Ͱͷ࣮ࢪ͕ࠔ೉

    12 ͦͷଞͷӡ༻ٕज़΍ηΩϡϦςΟͷ՝୊
  13. • ಥൃతͳΞΫηε͚࣌ͩεέʔϧ͢Δͷ͸ͳͥ೉͍͠ͷ͔ʁ • γεςϜ͕ෆมੑΛ࣋ͭͱมԽ΁͸େ͖ͳίετ͕൐͏ • γεςϜͷߏ੒ཁૉ΋ෆมੑΛ࣋ͪঢ়ଶมԽͷίετ͕ߴ͍ • ෆมੑΛҡ࣋͢Δ͜ͱ͕γεςϜ؅ཧͷ໨తͰ͋Δ • ૝ఆͷൣғ಺Ͱ඼࣭Λ࠷େԽ͢Δ͜ͱΛ໨తͱ͍ͯ͠Δ

    • ૝ఆͰ͖ͳ͍ΞΫηεूத΍໰୊͕ଟൃ͢Δ࣌୅ʹ͸ෆ޲͖ 13 ෆมੑΛ൐͏γεςϜͷ՝୊
  14. 3. FastContainerΞʔΩςΫνϟ

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

    = Մ༻ੑ͕ߴ͘ৗʹมԽՄೳͳج൫͕࣮ݱͰ͖Δ 15 Մ༻ੑߴ͘มԽʹڧ͍ج൫Λઃܭ͢Δʹ͸ʁ
  16. มԽ͠ଓ͚Δ͜ͱ͔ΒಘΒΕΔ҆ఆੑ 16 ϗετ" ϗετ" ϗετ" ϗετ" ϗετ" Πϯλʔωοτ ϗετ" ϗετ"

    ϗετ" ΍͕ͯఀࢭ ൓Ԡతʹىಈ ൓Ԡతʹ εέʔϧΞοϓ ऩ༰αʔόA ऩ༰αʔόB HTTPϦΫΤετ ൓Ԡతʹ εέʔϧΞ΢τ • ϗετͷىಈͱఀࢭΛ॥؀ • ৗʹ॥؀͠ଓ͚ΔΞʔΩςΫνϟ • มԽ͠ଓ͚Δ͜ͱʹΑΔ҆ఆੑ • ॥؀ͷ଎౓վળΛ௥ٻ ৗʹมԽՄೳͰ͋ΔͨΊಥൃతͳΞ ΫηεूதͷΑ͏ͳมԽʹ΋଱ੑͷ ͋ΔΞʔΩςΫνϟΛ࣮ݱՄೳ
  17. • ϗετͷىಈɾෳ੡ɾఀࢭɾ૿ڧॲཧͷޮ཰ԽΛॏࢹ • ֤छॲཧΛHTTPϦΫΤετ࣌ʹϦΞΫςΟϒʹ࣮ࢪ • ϗετʹ͸ίϯςφܕԾ૝ԽΛ࠾༻ͯ͠ىಈΛߴ଎ʹ࣮ݱ • ίϯςφͷϞχλϦϯά͸ίϯςφࣗ਎͕࣮ࢪͯ͠ݕ஌ • ϦΫΤετʹج͍ͯϦΞΫςΟϒʹίϯςφͷঢ়ଶΛܾఆ

    17 FastContainerΞʔΩςΫνϟͱ໋໊
  18. HTTP FastContainerͷϑϩʔ 18 8FC1SPYZ ʢOHY@NSVCZ $.%# ʴ "1* -PDBM8FC1SPYZ OHY@NSVCZ

    $MJFOU ίϯςφ ίϯςφ ίϯςφ w )551ϦΫΤετͷ)PTUOBNF ΛΩʔʹɺ$.%# ߏ੒؅ཧ%# ͔Βίϯςφͷ৘ใΛऔಘ )551 4  ϦΫΤετ w ίϯςφͷ*1ͱϙʔτʹج͍ ͯίϯςφʹϓϩΩγ w ίϯςφ͕-JTUFO͍ͯ͠ͳ͍ ৔߹͸$.%#͔Βίϯςφ ৘ใΛಘͯىಈ $POUBJOFS&OHJOF IBDPOJXB
  19. HTTPϦΫΤετܖػͰͷ௥Ճɾఀࢭॲཧ 19 -PDBM 8FC1SPYZ $.%# ʴ "1* ίϯςφ ίϯςφ w

    ϦΫΤετॲཧ࣌ʹίϯςφͷϦιʔε࢖༻ྔ͕ߴ ͘ͳͬͨ͜ͱΛݕ஌ͨ͠Β"1*ʹίϯςφͷ௥Ճࢦ ࣔʢ௿͘ͳͬͨΒ࡟আࢦࣔʣ w $.%#ʹίϯςφͷ৘ใ͕͋Ε͹ىಈͯ͠ϦΫΤετ Λసૹ w ىಈॲཧத͸ىಈࡁΈͷίϯςφʹҰ୴ϦΫΤετΛ సૹͯ͠ىಈޙʹৼΓ෼͚։࢝ 8FC1SPYZ w Ϋʔϧμ΢ϯλΠϜͱ͍͏֓೦Λઃ͚ɺසൟʹ௥Ճɾ ఀࢭॲཧ͕ൃੜ͠ͳ͍Α͏ʹࢦࣔڐՄ࣌ؒΛઃఆ ऩ༰αʔό ؂ࢹɾݕ஌
  20. • ϦΫΤετ୯ҐͰߴ଎ʹεέʔϧΞοϓɾεέʔϧΞ΢τՄೳ • εέʔϧՄ൱ͷݕ஌΋ϦΫΤετ୯ҐͰ࣮ࢪ • Ұఆ࣌ؒܦա͔ͭϦΫΤετॲཧ͕ͳ͔ͬͨΒίϯςφఀࢭ • ίϯςφΛ࢖͍ࣺͯՄೳʹ → immutability

    • Ұఆ࣌ؒىಈ͢Δ͜ͱͰ౎౓ىಈΑΓߴ଎Խ → mortality • ίϯςφ͕ϦΫΤετΛॲཧ͍ͯ͠Δ࣌ؒͷΈ՝ۚ౳͕Մೳ 20 FastContainerΞʔΩςΫνϟͷ·ͱΊ
  21. • ίϯςφ͕॥؀͢ΔͷͰϥΠϒϥϦ͕ࣗવʹߋ৽͞Ε͍ͯ͘ • ར༻ऀʹͱͬͯ͸ηΩϡϦςΟ޲্ • ఏڙଆʹͱͬͯ͸੬ऑੑରԠ΍όʔδϣϯΞοϓͷޮ཰Խ • CMDBͷऩ༰ઌ৘ใΛม͑Δ͚ͩͰࣗવʹऩ༰αʔόΛҠಈ • ϝϯςφϯε΍ো֐ରԠ࣌ͷແఀࢭରԠ͕༰қʹͳΔ

    • ߟ͑ํʹΑͬͯ͸ϝϞϦϦʔΫ͢Διϑτ΢ΣΞΛ΋ڐ༰ 21 FastContainerΞʔΩςΫνϟͷ·ͱΊ
  22. 4. ࣮ݧͱߟ࡯

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

    φΛHTTPϦΫΤετ͔ΒϦ ΞΫςΟϒʹىಈ͢Δɻ
  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ສϦΫΤετ͔Βεέʔϧॲ ཧΛߦ͍ɺॲཧ͕٧·Δ͜ͱͳ͘ෛՙ ෼ࢄग़དྷ͍ͯΔ͔Λ֬ೝɻ
  25. 25 10ສϦΫΤετதɺ5ສϦΫΤετ͔Β εέʔϧΞ΢τΛߦ͍ɺϨεϙϯεʹӨ ڹΛ༩͑Δ͜ͱͳ͘ॠ࣌ʹෛՙ෼ࢄ͕Ͱ ͖͍ͯΔɻ 5ສϦΫΤετҎ߱͸2ίϯ ςφʹεέʔϧΞ΢τ͞Εͨ ͨΊɺϨεϙϯελΠϜ͕൒ ෼ҎԼͱͳͬͯ࢒Γͷ5ສϦ ΫΤετ୹࣌ؒͰॲཧ͍ͯ͠

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

    ෼͔Δɻ
  27. 5. ·ͱΊ

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

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

    29 ࠓޙͷ՝୊
  30. ݚڀһɺੵۃతʹืूதʂ http://rand.pepabo.com/