HTTPリクエスト単位でコンテナを再配置する仮想化基盤の高速なスケジューリング手法

 HTTPリクエスト単位でコンテナを再配置する仮想化基盤の高速なスケジューリング手法

HTTPリクエスト単位でコンテナを再配置する仮想化基盤の高速なスケジューリング手法
FastContainerアーキテクチャによる仮想化基盤の更なる信頼性向上に向けて

松本亮介,田中諒介,栗林 健太郎 / Pepabo R&D Institute, GMO Pepabo, Inc.
2018.05.17 第41回 インターネットと運用技術研究会

2b692bd83f4418103142a053ecf5ff59?s=128

MATSUMOTO Ryosuke

May 18, 2018
Tweet

Transcript

  1. FastContainerΞʔΩςΫνϟʹΑΔԾ૝Խج൫ͷߋͳΔ৴པੑ޲্ʹ޲͚ͯ দຊ྄հɼాதྒհɼ܀ྛ ݈ଠ࿠ / Pepabo R&D Institute, GMO Pepabo, Inc.

    2018.05.17 ୈ41ճ Πϯλʔωοτͱӡ༻ٕज़ݚڀձ HTTPϦΫΤετ୯ҐͰίϯςφΛ࠶഑ஔ͢Δ Ծ૝Խج൫ͷߴ଎ͳεέδϡʔϦϯάख๏
  2. 1. എܠͱ໨త 2. ؔ࿈ݚڀͷ՝୊ 3. ఏҊख๏ 4. ࣮ݧͱߟ࡯ 5. ·ͱΊͱࠓޙͷల๬

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

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

    4 ݸਓͷWebαΠτ΁ͷΞΫηεूத΍৴པੑ
  5. 1. Πϯελϯε௥Ճॲཧ͕௿଎Ͱ͋Δ͜ͱΛղܾ • Πϯελϯεͷঢ়ଶͷఀࢭɾىಈɾεέʔϦϯάΛߴ଎ʹ॥؀ • ϦΫΤετ୯ҐͰঢ়ଶΛܾఆ 2. ϋʔυ΢ΣΞϦιʔεͷར༻ޮ཰ͷ௿͞Λղܾ • ϦΫΤετ͕ແ͍Πϯελϯε͸Ұఆظؒىಈޙʹఀࢭ

    ΠϯελϯεΛߴूੵʹऩ༰ՄೳͰมԽʹڧ͍Ծ૝Խج൫ͷఏҊ 5 Πϯελϯε͕॥؀͢ΔมԽʹڧ͍ج൫ͷఏҊ※1 ˞দຊ྄հ ۙ౻Ӊஐ࿕ ࡾ୐༔հ ྗ෢݈࣍ ܀ྛ݈ଠ࿠ 'BTU$POUBJOFS࣮ߦ؀ڥͷมԽʹૉૣ͘దԠͰ͖Δ߃ৗੑΛ࣋ ͭγεςϜΞʔΩςΫνϟ Πϯλʔωοτͱӡ༻ٕज़γϯϙδ΢Ϝ࿦จूɼɼʢʣ /PW
  6. • ෳ਺ΠϯελϯεՔಇͤ͞Δ͜ͱʹΑΔίετͷ૿େ • ෳ਺ͷऩ༰αʔόʹΠϯελϯεΛͦΕͧΕՔಇͤ͞Δ͜ͱͰՄ༻ੑΛ୲อ • ߴूੵʹΠϯελϯεऩ༰͢Δ؍఺͔ΒͰ͖Δ͚ͩϦιʔεΛઅ໿͍ͨ͠ • ࣮ӡ༻࣌ͷՄ༻ੑ໨తͱෛՙ෼ࢄ໨తͷࠞࡏʹΑΔෳࡶ͞ • Մ༻ੑ໨తͷΠϯελϯεΛίετΛཧ༝ʹෛՙ෼ࢄʹ΋࢖ͬͯ͠·͏

    • ஌Β͵ؒʹऩ༰αʔόো֐࣌ʹ͸ੑೳ΋ॖୀঢ়ଶʹͳΓೋ࣍ো֐΋ 6 FastContainer͓Αͼؔ࿈ݚڀͷՄ༻ੑͷ՝୊
  7. 1. Πϯελϯε্ͰWordPressͷΑ͏ͳҰൠతͳWebΞϓϦ͕ಈ࡞Մೳ 2. ୯ҰΠϯελϯεͰ΋ऩ༰αʔόো֐࣌ʹ͸ผαʔό΁ࣗಈతʹ࠶഑ஔՄೳ 3. Πϯελϯεͷ࠶഑ஔͷ࣮ߦ࣌Ͱ͋ͬͯ΋਺ඵͷ஗ԆͰHTTPλΠϜΞ΢τ͢ Δ͜ͱͳ͘ΦϯϥΠϯͰϨεϙϯεΛૹ৴Մೳ ߴूੵʢݸਓ޲͚ͷ௿Ձ֨Խʣͱ৴པੑ΍ੑೳͷόϥϯεΛͱΔͨΊͷख๏ 7 ݚڀͷ໨త:

    ϦΫΤετ୯Ґ ͰͷΠϯελϯε࠶഑ஔ
  8. 2. ؔ࿈ݚڀͷ՝୊

  9. • FastContainer ※1͸HTTPϦΫΤετʹԠͯ͡൓Ԡత͔ͭߴ଎ʹΠϯελϯε ͷঢ়ଶʢىಈɺఀࢭɺҠಈɺෳ੡ɺϦιʔε૿ݮ౳ʣΛܾఆ • ΞΫηε਺ʹԠͨ͡ϦΞΫςΟϒͳεέʔϦϯάॲཧ͕Մೳ • Ϋϥ΢υαʔϏεج൫͸༧ΊΠϯελϯεΛىಈͤͯ͞ϦΫΤετΛॲཧ • ΞΫηεूத࣌͸༧ଌత͔ͭϓϩΞΫςΟϒͳεέʔϦϯάॲཧ͕ඞཁ

    9 FastContainerͱΫϥ΢υαʔϏεج൫ͷಛ௃ ˞দຊ྄հ ۙ౻Ӊஐ࿕ ࡾ୐༔հ ྗ෢݈࣍ ܀ྛ݈ଠ࿠ 'BTU$POUBJOFS࣮ߦ؀ڥͷมԽʹૉૣ͘దԠͰ͖ Δ߃ৗੑΛ࣋ͭγεςϜΞʔΩςΫνϟ Πϯλʔωοτͱӡ༻ٕज़γϯϙδ΢Ϝ࿦จूɼɼ ʢʣ ೥݄
  10. 1. WordPressͷΑ͏ͳҰൠతͳWebΞϓϦέʔγϣϯΛར༻Մೳ 2. Πϯελϯεͷऩ༰αʔόͷো֐࣌ʹHTTPλΠϜΞ΢τ͕ੜ͡ͳ͍ϨϕϧͰ αʔϏεΛܧଓͰ͖Δఔ౓ͷՄ༻ੑΛ૝ఆ ௿Ձ֨WebϗεςΟϯάج൫ɺΫϥ΢υج൫ɺFastContainerج൫Ͱ੔ཧ 10 ຊݚڀʹ͓͚ΔԾ૝Խج൫ͱՄ༻ੑͷલఏ

  11. • ҰൠతͳWebΞϓϦέʔγϣϯ͕ར༻Մೳ • ௿Ձ֨Λ࣮ݱ͢ΔͨΊߴूੵʹϗετΛऩ༰ՄೳͳԾ૝ϗετํ͕ࣜҰൠత • ྫɿ୯ҰͷApacheͰ਺ສυϝΠϯͷԾ૝ϗετΛॲཧ • ਺ສυϝΠϯΛॲཧ͢ΔApacheΛෳ਺αʔόʹෳ਺഑ஔͯ͠Մ༻ੑΛ୲อ※1 • ෳ਺Webαʔόϓϩηεͷىಈ͕લఏͱͳΓϦιʔε઎༗ͷίετ͕૿େ

    11 ௿Ձ֨WebϗεςΟϯάج൫ͷՄ༻ੑ ˞দຊ྄հ ઒ݪক࢘ দԬً෉ େن໛ڞ༗ܕ8FCόʔνϟϧϗεςΟϯάج൫ͷηΩϡϦςΟͱӡ༻ٕज़ͷ վળ ৘ใॲཧֶձ࿦จࢽ 7PM /P QQ .BS
  12. • ༷ʑͳWebΞϓϦέʔγϣϯʢϗεςΟϯάΑΓࣗ༝౓͕ߴ͍ʣ͕ར༻Մೳ • IaaS΍PaaSΛར༻ͨ͠Πϯελϯε୯ҐͰͷߏங͓ΑͼՄ༻ੑ୲อ͕Ұൠత • ຊݚڀͷՄ༻ੑ͕લఏͷ৔߹ɺෳ਺ऩ༰αʔόʹͦΕͧΕΠϯελϯεΛϗο τελϯόΠํࣜʢىಈࡁΈͷ଴ػΠϯελϯεʣͰ଴ػ͢Δ͜ͱͰ࣮ݱ • ऩ༰αʔόఀࢭ࣌ʹ΋ଈ࣌αʔϏεΛܧଓ͢ΔͨΊ •

    ෳ਺Πϯελϯεͷىಈ͕લఏͱͳΓϦιʔε઎༗ͷίετ͕૿େ 12 FastContainer΍Ϋϥ΢υج൫ͷՄ༻ੑ
  13. 13 $MJFOU 4FSWFS "QBDIF ʢWIPTU܈ʣ 4UPSBHF $MJFOU 4FSWFS JOTUBODF" JOTUBODF#

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

    JOTUBODF$ 4FSWFS JOTUBODF" 4UPSBHF 4FSWFS "QBDIF ʢWIPTU܈ʣ ௿Ձ֨8FCϗεςΟϯάج൫ͷՄ༻ੑ 'BTU$POUBJOFS΍Ϋϥ΢υج൫ͷՄ༻ੑ )551ϦΫΤετ )551ϦΫΤετ ✗ ✗
  15. • ݶΒΕͨίετʹ͓͚ΔՄ༻ੑͱෛՙ෼ࢄͷཱ͕྆ট͘ো֐࣌ͷॖୀ໰୊ • ϗοτελϯόΠͷίετΛ༗ޮ׆༻͢ΔͨΊʹෛՙ෼ࢄʹ΋׆༻ • ӡ༻ܧଓ͢ΔதͰՄ༻ੑͱෛՙ෼ࢄͷ໨త͕ࠞࡏ͠ɺো֐࣌ʹॖୀঢ়ଶ΁ • ॖୀঢ়ଶͰॲཧ͕௥͍͔ͭͣ෮چલʹαʔϏεఀࢭΛট͘͜ͱ΋ 15 ͦͷଞෳ਺୆ߏ੒ʹΑΔՄ༻ੑ୲อͷ՝୊

  16. 3. ఏҊख๏

  17. 1. Πϯελϯε্ͰWordPressͷΑ͏ͳҰൠతͳWebΞϓϦ͕ಈ࡞Մೳ 2. ୯ҰΠϯελϯεͰ΋ऩ༰αʔόো֐࣌ʹ͸ผαʔό΁ࣗಈతʹ࠶഑ஔՄೳ 3. Πϯελϯεͷ࠶഑ஔͷ࣮ߦ࣌Ͱ͋ͬͯ΋਺ඵͷ஗ԆͰHTTPλΠϜΞ΢τ͢ Δ͜ͱͳ͘ΦϯϥΠϯͰϨεϙϯεΛૹ৴Մೳ ͞ΒʹFastContainerʹΑΓɺ࠶഑ஔ࣌ʹΞΫηε͕ूதͨ͠৔߹͸ىಈ͍ͯ͠ Δαʔό্ͰϦΞΫςΟϒʹεέʔϦϯά΋Մೳʢॖୀ໰୊͕ى͖ͳ͍ʣ 17

    ఏҊख๏: ϦΫΤετ୯Ґ ͰͷΠϯελϯε࠶഑ஔ
  18. 18 4UPSBHF $MJFOU 4FSWFS JOTUBODF" JOTUBODF# JOTUBODF$ 4FSWFS JOTUBODF" 'BTU$POUBJOFS΍Ϋϥ΢υج൫ͷՄ༻ੑ

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

    4UPSBHF $MJFOU 4FSWFS JOTUBODF" JOTUBODF# JOTUBODF$ 4FSWFS ఏҊख๏ʴ'BTU$POUBJOFSͷՄ༻ੑ ఏҊख๏ )551ϦΫΤετ )551ϦΫΤετ JOTUBODF" ✗൓Ԡతʹ ࠶഑ஔ ✗
  20. HTTP FastContainerͷجຊϑϩʔ 20 8FC1SPYZ ʢOHY@NSVCZ $.%# ʴ "1* 8FC%JTQBUDIFS OHY@NSVCZ

    $MJFOU ίϯςφ ίϯςφ ίϯςφ w )551ϦΫΤετͷ)PTUOBNF ΛΩʔʹɺ$.%# ߏ੒؅ཧ%# ͔Βίϯςφͷ৘ใΛऔಘ )551 4  ϦΫΤετ w ίϯςφͷ*1ͱϙʔτʹج͍ ͯίϯςφʹϓϩΩγ w ίϯςφ͕-JTUFO͍ͯ͠ͳ͍ ৔߹͸$.%#͔Βίϯςφ ৘ใΛಘͯىಈ $POUBJOFS&OHJOF IBDPOJXB ऩ༰ϗετ"
  21. 1. Web Proxy͔Βऩ༰αʔόʹICMPͰ1ύέοτͷԠ౴଎౓Λଌఆ 2. Ԡ౴଎౓͕ᮢ஋Λ௒͍͑ͯͨΒผͷऩ༰αʔό΁࠶഑ஔ → ඇৗʹγϯϓϧͳํࣜͰ࣮ݱՄೳ 21 ߴ଎ͳऩ༰ϗετͷࢮ׆؂ࢹͱ࠶഑ஔ

  22. )PTU04 8FC1SPYZ $.%#"1* $POUBJOFS %JTQBUDIFS $POUBJOFS )PTU04 $POUBJOFS %JTQBUDIFS $POUBJOFS

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

    $MJFOU )551 *$.1 *$.1 )551 )551 )551 ✗ ࠷ॳͷ࠶഑ஔ࣌͸ίϯςφͷىಈ͕ඞཁͰ͋Δ͕ɺ ىಈޙ͸Ұఆظؒىಈ͠ଓ͚Δɻ
  24. • ICMPͰᮢ஋νΣοΫ͕Ұ࣌తʹޡݕ஌ͯ͠΋Өڹ͕গͳ͍ • FastContainerͳͷͰޡݕ஌ͷ࠶഑ஔ͕ੜͯ͡΋αʔϏε͕ܧଓ͞ΕΔ • ޡݕ஌Ͱଞαʔόʹىಈͯ͠͠·ͬͯ΋Ұఆ࣌ؒىಈͨ͠Βఀࢭ͢Δ • ݩαʔόʹ࠶഑ஔ͞ΕͯCMDB্͸ݩαʔόͷΈʹϦΫΤετ͕ྲྀΕΔ • Ԡ౴࣌ؒͷᮢ஋΍λΠϜΞ΢τΛΪϦΪϦ·ͰνϡʔχϯάՄೳ

    24 ఏҊख๏ͷϙΠϯτʢICMP؂ࢹͱFastContainerʣ
  25. • ୯ҰͷΠϯελϯεͰ͋ͬͯ΋ProxyʹΑͬͯࣗ཯తʹՄ༻ੑ͕อͨΕΔ • ෛՙ෼ࢄͷΈʹෳ਺Πϯελϯε༻ҙ͢Δɺͱ໨తΛݶఆͰ͖Δ • ݪཧతʹॖୀ໰୊͕ൃੜ͠ͳ͍ 25 ఏҊख๏ͷϙΠϯτʢॖୀ໰୊ͷղܾʣ

  26. 4. ࣮ݧͱߟ࡯

  27. FastContainerͷγεςϜߏ੒ 27

  28. 28

  29. • Web Proxyͱίϯςφऩ༰ϗετؒͷ ICMPԠ౴࣌ؒ • 1ύέοτ1500byteͷԠ౴଎౓Λ1000ճ ଌఆ 29 ༧උ࣮ݧ1ʢICMPͷԠ౴࣌ؒʣ

  30. • 40byteͷHTMLΛฦ͢ Apache+mod_phpͷίϯςφ • ϦΫΤετΛૹ৴ޙɺ൓Ԡతʹ ىಈͯ͠ϨεϙϯεΛฦ͢·Ͱ ͷ࣌ؒΛ500ճଌఆ 30 ༧උ࣮ݧ1ʢίϯςφͷىಈ࣌ؒʣ

  31. • 40όΠτͷHTMLΛฦ͢ίϯςφʢCPUίΞ1ɺϝϞϦ512MBʣ • ಉ࣌઀ଓ਺10૯઀ଓ਺10ສͷϕϯνϚʔΫɺICMPͷᮢ஋10msec • WordPressͷτοϓϖʔδΛฦ͢ίϯςφʢCPUίΞ4ɺϝϞϦ512MBʣ • ಉ࣌઀ଓ਺10૯઀ଓ਺5ઍͷϕϯνϚʔΫɺICMPͷᮢ஋100msec • ϕϯνϚʔΫͷ൒෼ͷ͕࣌ؒܦաͨ͠ஈ֊Ͱऩ༰αʔόΛiptableͰૄ௨੾அ

    31 ຊ࣮ݧ
  32. 40όΠτͷindex.htmlΛฦ͢ίϯςφ 32

  33. WordPressͷτοϓϖʔδΛฦ͢ίϯςφ 33

  34. • ICMP؂ࢹͷᮢ஋νϡʔχϯάʹΑΓߴ଎ͳ࠶഑ஔΛ࣮ݱ • ίϯςφͷىಈ͕࣌ؒࢧ഑త • ίϯςφͷىಈ࣌ؒΛ਺ඦɾ਺ेmsecҎԼʹͰ͖Ε͹WordPressʹ͓͍ͯ ͸Φʔόʔϔου͕ΞϓϦέʔγϣϯ΁ • ݱ࣌఺Ͱ΋Ұ࣌తͳ஗ԆͰ͋ΔͨΊSLA࣍ୈͰ࣮༻Խ΋Մೳ 34

    ߟ࡯
  35. • ProxyͱDispatcherؒͷॲཧதʹϗετ͕ఀࢭͨ͠৔߹͸ϦΫΤετΛऔΓ͜ ΅͢໰୊͸͋Δ • ͜Ε͸ैདྷͷෳ਺ΠϯελϯεͰ΋ಉ༷ 35 ߟ࡯ 8FC1SPYZ ʢOHY@NSVCZ $.%#

    ʴ "1* 8FC%JTQBUDIFS OHY@NSVCZ $MJFOU ίϯςφ ίϯςφ $POUBJOFS&OHJOF IBDPOJXB ໭ΓΛ·ͨͣʹ ऩ༰αʔόμ΢ϯ
  36. 5. ·ͱΊͱࠓޙͷల๬

  37. • ୯ҰΠϯελϯεͰՄ༻ੑΛ୲อ͢Δߴ଎ͳεέδϡʔϦϯάख๏ΛఏҊ • ෳ਺ΠϯελϯεΛඞཁͱ͠ͳ͍ͨΊϦιʔείετ͕௿͍ • ࣮ݧ͔Βݱ࣌఺Ͱ΋࣮༻ՄೳͳϨϕϧͷ࠶഑ஔͷੑೳ͕ಘΒΕͨ • ར༻ऀ͸ෳ਺ͷΠϯελϯεར༻Λෛՙ෼ࢄ༻్ʹूதͰ͖ΔΑ͏ʹͳΔ 37 ·ͱΊ

  38. • ࠶഑ஔͷॲཧ࣌ؒʹ͓͍ͯίϯςφ಺ͷWebαʔόͷىಈ͕࣌ؒࢧ഑త • WebαʔόΛ਺ेmsecͰىಈ͢Δ൚༻తͳىಈ࣌ؒ୹ॖख๏Λݕূத • IOT42Ͱൃද༧ఆ • ຊݚڀͷεέδϡʔϦϯάख๏ΛԠ༻ͯࣗ͠཯తͳෛՙ෼ࢄͷͨΊͷϋʔυ΢Σ ΞεέδϡʔϦϯάख๏΁ൃల͍͖͍ͤͯͨ͞ 38

    ࠓޙͷల๬
  39. Containerͷதͷϛυϧ΢ΣΞͷىಈߴ଎ԽPoC 39 SFGl04ϨΠϠͰ8FCαʔό͕ىಈ࣌ʹ࣮ߦ͢ΔγεςϜίʔϧΛ؂ࢹ͠ىಈ׬ྃ௚લͷϓϩηεΛΠϝʔδԽ͢ΔlIUUQ ICNBUTVNPUPSKQFOUSZ