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

FastContainer:実行環境の変化に素早く適応できる恒常性を持つシステムアーキテクチャ

 FastContainer:実行環境の変化に素早く適応できる恒常性を持つシステムアーキテクチャ

FastContainer:実行環境の変化に素早く適応できる恒常性を持つシステムアーキテクチャ

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

松本亮介、近藤宇智朗、三宅悠介、力武健次*、栗林健太郎 / ペパボ研究所 / *力武健次技術士事務所
2017.12.08 第10回インターネットと運用技術シンポジウム IOTS2017

2b692bd83f4418103142a053ecf5ff59?s=128

MATSUMOTO Ryosuke

December 08, 2017
Tweet

Transcript

  1. γεςϜͷཁૉΛ॥؀ͤ͞Δ͜ͱʹΑͬͯՄ༻ੑΛ࣮ݱ͢Δج൫ٕज़ দຊ྄հɺۙ౻Ӊஐ࿕ɺࡾ୐༔հɺྗ෢݈࣍*ɺ܀ྛ݈ଠ࿠ / ϖύϘݚڀॴ / *ྗ෢݈ٕ࣍ज़࢜ࣄ຿ॴ 2017.12.08 ୈ10ճΠϯλʔωοτͱӡ༻ٕज़γϯϙδ΢Ϝ IOTS2017 FastContainer:࣮ߦ؀ڥͷมԽʹૉૣ͘దԠͰ͖Δ

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

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

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

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

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

    ຊൃදͰ͸1.ͱ2.ͷ՝୊ΛղܾͰ͖ΔΞʔΩςΫνϟͷఏҊ → ݸਓ͕ҙࣝͤͣͱ΋࢖͑ΔαʔϏε΁ͷ࣮૷Λ໨ࢦ͢
  7. 1. Πϯελϯε௥Ճॲཧ͕௿଎Ͱ͋Δ͜ͱΛղܾ • Πϯελϯεͷঢ়ଶͷఀࢭɾىಈɾมߋΛߴ଎ʹ॥؀ • ϦΫΤετ୯ҐͰঢ়ଶΛܾఆ 2. ϋʔυ΢ΣΞϦιʔεͷར༻ޮ཰ͷ௿͞Λղܾ • ϦΫΤετ͕ແ͍Πϯελϯε͸Ұఆظؒىಈޙʹఀࢭ

    ϦΫΤετ୯ҐͰΠϯελϯεͷঢ়ଶΛܾఆ͢Δख๏ͷఏҊ 7 Πϯελϯε͕॥؀͢ΔมԽʹڧ͍ج൫ͷఏҊ
  8. • ϗετ͕॥؀͢ΔͷͰϥΠϒϥϦ͕ࣗવʹߋ৽͞Ε͍ͯ͘ • ऩ༰ઌ৘ใΛม͑Δ͚ͩͰࣗવʹऩ༰αʔόؒΛҠಈՄೳ • WordPress౳ͷҰൠతͳCMSΛ഑ஔɾΦʔτεέʔϧՄೳ • Ϋϥ΢υϓϩόΠμࢦఆͷίʔσΟϯάͷඞཁ΋ͳ͍ • ྫɿAWS

    lambdaʹྨ͢ΔServerless Architecture౳ 8 ηΩϡϦςΟ΍ӡ༻ٕज़ͷ՝୊΋ಉ࣌ʹղܾ
  9. 2. Ծ૝Խج൫ͷεέʔϦϯάͱ ӡ༻ٕज़ͷ՝୊

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

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

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

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

    13 ͦͷଞͷӡ༻ٕज़΍ηΩϡϦςΟͷ՝୊
  14. 3. FastContainerΞʔΩςΫνϟ

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

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

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

  18. ίϯςφ࣌୅ͷWebαʔϏεج൫Ϟσϧ 18 ΦʔέετϨʔγϣϯ૚ (,& &$4 .BSBUIPO LT %PDLFS4XBSN /)).4UBDL ετϥςδʔ૚

    3BODIFS 'BTU$POUBJOFS αʔϏε૚ ίϯςφʹ৐Δ۩ମతͳ8FCΞϓϦ΍αʔϏε ΠϯϑϥετϥΫνϟ૚ ($1 "[VSF "84 0QFO4UBDL .FTPT #BSF.FUBM -JOVY,JU /ZBI ίϯςφϥϯλΠϜ૚ %PDLFS .PCZ DPOUBJOFSE -9$ SLU )BDPOJXB $POUBJOFS3VOUJNF*OUFSGBDF $3* ຊΞʔΩςΫνϟͷείʔϓ FastContainer͸ཧ૝తʹ͸ ΦʔέετϨʔγϣϯ૚ҎԼͷ πʔϧ܈Ͱ࣮૷ՄೳͰ͋Δ
  19. HTTP FastContainerͷϑϩʔ 19 8FC1SPYZ ʢOHY@NSVCZ $.%# ʴ "1* -PDBM8FC1SPYZ OHY@NSVCZ

    $MJFOU ίϯςφ ίϯςφ ίϯςφ w )551ϦΫΤετͷ)PTUOBNF ΛΩʔʹɺ$.%# ߏ੒؅ཧ%# ͔Βίϯςφͷ৘ใΛऔಘ )551 4  ϦΫΤετ w ίϯςφͷ*1ͱϙʔτʹج͍ ͯίϯςφʹϓϩΩγ w ίϯςφ͕-JTUFO͍ͯ͠ͳ͍ ৔߹͸$.%#͔Βίϯςφ ৘ใΛಘͯىಈ $POUBJOFS&OHJOF IBDPOJXB
  20. ΦʔτεέʔϦϯάݕ஌ͷΞʔΩςΫνϟ 20

  21. • ϦΫΤετ୯ҐͰߴ଎ʹεέʔϧΞοϓɾεέʔϧΞ΢τՄೳ • ίϯςφʹ߃ৗੑΛ࣋ͨͤΔ͜ͱͰϦιʔεͷޮ཰Խ • ίϯςφΛ࢖͍ࣺͯՄೳʹ → immutability • Ұఆ࣌ؒىಈ͢Δ͜ͱͰ౎౓ىಈΑΓߴ଎Խ

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

    22 FastContainerΞʔΩςΫνϟͷ·ͱΊ
  23. 4. ࣮ݧͱߟ࡯

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

    ίϯςφΛHTTPϦΫΤετ ͔ΒϦΞΫςΟϒʹىಈ͢Δɻ
  25. 25 ࣮ݧ؀ڥ ߲໨ ࢓༷ $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ສϦΫΤετ͔Βεέʔϧॲ ཧΛߦ͍ɺॲཧ͕٧·Δ͜ͱͳ͘ෛՙ ෼ࢄग़དྷ͍ͯΔ͔Λ֬ೝɻ
  26. 26 335ඵ࣌఺ͰεέʔϧΞ΢τΛ࣮ࢪ͠ɺ 340ඵ࣌఺Ͱෛՙ෼ࢄ͕։࢝͞Ε͍ͯΔɻ 5ສϦΫΤετҎ߱͸2ίϯ ςφʹεέʔϧΞ΢τ͞Εͨ ͨΊɺϨεϙϯελΠϜ͕൒ ෼ҎԼͱͳͬͯ࢒Γͷ5ສϦ ΫΤετ୹࣌ؒͰॲཧ͍ͯ͠ Δ͜ͱ͕෼͔Δɻ

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

    ෼͔Δɻ
  28. 5. ·ͱΊ

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

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

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

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

    32 εέʔϦϯά͢΂͖ঢ়گͷݕ஌ʹؔ͢Δ՝୊