$30 off During Our Annual Pro Sale. View Details »

HTTPリクエスト単位でインスタンスの再配置が可能な低コストで高速なスケジューリング手法

 HTTPリクエスト単位でインスタンスの再配置が可能な低コストで高速なスケジューリング手法

サーバプロセスのChekpoint/Restoreによるコンテナ起動処理の高速化

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

予稿: http://id.nii.ac.jp/1001/00190206/

MATSUMOTO Ryosuke
PRO

June 28, 2018
Tweet

More Decks by MATSUMOTO Ryosuke

Other Decks in Technology

Transcript

  1. αʔόϓϩηεͷChekpoint/RestoreʹΑΔίϯςφىಈॲཧͷߴ଎Խ
    দຊ྄հɼதా ༟وɼ܀ྛ ݈ଠ࿠ / Pepabo R&D Institute, GMO Pepabo, Inc.
    2018.06.28 ୈ42ճ Πϯλʔωοτͱӡ༻ٕज़ݚڀձ
    HTTPϦΫΤετ୯ҐͰΠϯελϯεͷ࠶഑ஔ͕
    Մೳͳ௿ίετͰߴ଎ͳεέδϡʔϦϯάख๏

    View Slide

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

    View Slide

  3. 1.
    എܠͱ໨త

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. 2.
    ؔ࿈ݚڀͷ՝୊

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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


    View Slide

  15. 3.
    ఏҊख๏

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. HTTP FastContainerͷجຊϑϩʔ
    19
    8FC1SPYZ
    ʢOHY@NSVCZ

    $.%#
    ʴ
    "1*
    8FC%JTQBUDIFS
    OHY@NSVCZ

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

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

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

    ऩ༰ϗετ"

    View Slide

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

    View Slide

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

    View Slide

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

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

    View Slide

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

    View Slide

  24. • ίϯςφ಺ͷWebαʔόϓϩηεΛىಈ׬ྃ௚લͰΠϝʔδԽ(Checkpoint)
    • ఆظతʹඇಉظͰϓϩηεͷىಈ׬ྃ௚લΠϝʔδΛ࡞੒͓ͯ͘͠
    • ϦΫΤετड৴࣌ʹΠϝʔδΛϓϩηεʹ෮ݩ(Restore)
    • αʔόϓϩηεͷॳظԽॲཧΛεΩοϓ
    24
    ఏҊख๏ͷϙΠϯτʢCheckpoint/Restoreʣ

    View Slide

  25. • αʔόϓϩηε͸ىಈ׬ྃ௚લʹಉ༷ͷγεςϜίʔϧΛ࣮ߦ͢Δ͜ͱʹண໨
    • Webαʔόͷ৔߹ɺbind()ɺlisten()ɺsocket()ɺsetsockopt()ͳͲ
    • αʔόϓϩηεͷىಈ׬ྃ௚લͷγεςϜίʔϧΛ؂ࢹͯ͠Checkpoint
    • seccompͰγεςϜίʔϧΛ؂ࢹ͠ptraceͰҰ࣌ఀࢭ͔ͯ͠ΒCRIUͰ
    CheckpointʹΑΔΠϝʔδԽ
    • ϦΫΤετΛड͚ͯίϯςφΛىಈ͢Δ࣌͸Πϝʔδ͔ΒRestoreͯ͠ىಈ
    25
    Checkpoint/RestoreʹΑΔFastContainerͷىಈ

    View Slide

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

    View Slide

  27. 4.
    ࣮ݧͱߟ࡯

    View Slide

  28. FastContainerͷγεςϜߏ੒
    28

    View Slide

  29. 29

    View Slide

  30. • ༧උ࣮ݧ1ɿICMPͷԠ౴࣌ؒ
    • ༧උ࣮ݧ2ɿίϯςφͷىಈ࣌ؒ
    • ༧උ࣮ݧ3ɿϓϩηεͷΠϝʔδԽ(Checkpoint/Restore)ͷ࣮ݧ
    • ຊ࣮ݧɿWordPressΛ഑ஔͨ͠Webαʔόίϯςφ(Checkpoint/Restoreແ͠)
    30
    ࣮ݧ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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











    .FNPSZVTBHFQFSQSPDFTT<.#>

    $IFDLQPJOU 3FTUPSF

    View Slide

  35. • WordPressͷτοϓϖʔδΛฦ͢ίϯςφʢCPUίΞ4ɺϝϞϦ512MBʣ
    • ಉ࣌઀ଓ਺10૯઀ଓ਺5ઍͷϕϯνϚʔΫɺICMPͷᮢ஋100msec
    • Checkpoint/Restoreͷಋೖ͕ؒʹ߹͓ͬͯΒͣΠϝʔδԽΛߦΘͣʹ࣮ࢪ
    • ϕϯνϚʔΫͷ൒෼ͷ͕࣌ؒܦաͨ͠ஈ֊Ͱऩ༰αʔόΛiptableͰૄ௨੾அ
    35
    ຊ࣮ݧ

    View Slide

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

    View Slide

  37. • ίϯςφͷىಈ͕࣌ؒࢧ഑త
    • ίϯςφͷىಈ࣌ؒΛ਺ඦɾ਺ेmsecҎԼʹͰ͖Ε͹WordPressʹ͓͍ͯ͸
    Φʔόʔϔου͕WebΞϓϦέʔγϣϯଆ΁
    • ϓϩηεͷCheckpoint/RestoreͰରԠՄೳ͔ → γεςϜʹӶҙ࣮૷த
    • ݱ࣌఺Ͱ΋2ඵҎ಺ͱҰ࣌తͳ஗Ԇ(ϒϥ΢βͰ΋λΠϜΞ΢τ͠ͳ͍ఔ౓)Ͱ
    ͋ΔͨΊSLA࣍ୈͰ࣮༻Խ΋Մೳ
    37
    ߟ࡯

    View Slide

  38. 5.
    ·ͱΊ

    View Slide

  39. • ୯ҰΠϯελϯεͰՄ༻ੑΛ୲อ͢Δߴ଎ͳεέδϡʔϦϯάख๏ΛఏҊ
    • ෳ਺ΠϯελϯεΛඞཁͱ͠ͳ͍ͨΊϦιʔείετ͕௿͍
    • ࣮ݧ͔Βݱ࣌఺Ͱ΋࣮༻ՄೳͳϨϕϧͷ࠶഑ஔͷੑೳ͕ಘΒΕͨ
    • Checkpoint/Restoreͷ૊ΈࠐΈʹΑͬͯ͞ΒͳΔ࠶഑ஔͷߴ଎Խ΁
    39
    ·ͱΊ

    View Slide