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

CRIUを利用したHTTPリクエスト単位でコンテナを再配置できる低コストで高速なスケジューリング手法

 CRIUを利用したHTTPリクエスト単位でコンテナを再配置できる低コストで高速なスケジューリング手法

CRIUを利用したHTTPリクエスト単位でコンテナを再配置できる低コストで高速なスケジューリング手法

第4回Web System Architecture研究会@京都

2019/04/13
さくらインターネット株式会社
さくらインターネット研究所

上級研究員
松本亮介 / まつもとりー / @matsumotory

MATSUMOTO Ryosuke
PRO

April 15, 2019
Tweet

More Decks by MATSUMOTO Ryosuke

Other Decks in Research

Transcript

  1. ͘͞ΒΠϯλʔωοτגࣜձࣾ
    (C) Copyright 1996-2019 SAKURA Internet Inc
    ͘͞ΒΠϯλʔωοτݚڀॴ
    CRIUΛར༻ͨ͠HTTPϦΫΤετ୯ҐͰίϯςφΛ
    ࠶഑ஔͰ͖Δ௿ίετͰߴ଎ͳεέδϡʔϦϯάख๏
    2019/04/13 ্ڃݚڀһ দຊ ྄հ
    ୈ4ճWeb System Architectureݚڀձˏژ౎

    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
    ˞3ZPTVLF.BUTVNPUP 6DIJP,POEPBOE,FOUBSP,VSJCBZBTIJ 'BTU$POUBJOFS")PNFPTUBUJD4ZTUFN"SDIJUFDUVSF)JHITQFFE
    "EBQUJOH&YFDVUJPO&OWJSPONFOU$IBOHFT 5IFSE"OOVBM*&&&*OUFSOBUJPOBM$PNQVUFST 4PGUXBSF BOE"QQMJDBUJPOT$POGFSFODF
    $0.14"$
    +VMZ UPBQQFBS

    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ͱΫϥ΢υαʔϏεج൫ͷಛ௃
    ˞3ZPTVLF.BUTVNPUP 6DIJP,POEPBOE,FOUBSP,VSJCBZBTIJ 'BTU$POUBJOFS")PNFPTUBUJD4ZTUFN"SDIJUFDUVSF)JHITQFFE
    "EBQUJOH&YFDVUJPO&OWJSPONFOU$IBOHFT 5IFSE"OOVBM*&&&*OUFSOBUJPOBM$PNQVUFST 4PGUXBSF BOE"QQMJDBUJPOT$POGFSFODF
    $0.14"$
    +VMZ UPBQQFBS

    View Slide

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

    View Slide

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

    View Slide

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

    12
    αʔόো֐

    View Slide

  13. 3.
    ఏҊख๏

    View Slide

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

    View Slide

  15. 15
    4UPSBHF
    $MJFOU
    4FSWFS
    JOTUBODF"
    JOTUBODF#
    JOTUBODF$
    4FSWFS
    ఏҊख๏ʴ'BTU$POUBJOFSͷՄ༻ੑ
    )551ϦΫΤετ
    4UPSBHF
    $MJFOU
    4FSWFS
    JOTUBODF"
    JOTUBODF#
    JOTUBODF$
    4FSWFS
    )551ϦΫΤετ
    JOTUBODF"
    ✗൓Ԡతʹ
    ࠶഑ஔ
    αʔόো֐

    View Slide

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

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

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

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

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

    ऩ༰ϗετ"

    View Slide

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

    View Slide

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

    View Slide

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

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

    View Slide

  20. • ICMP/TCPͰᮢ஋νΣοΫ͕Ұ࣌తʹޡݕ஌ͯ͠΋Өڹ͕গͳ͍
    • TCPͷ৔߹͸ࣗ࡞TCPελοΫͰԟ෮3ύέοτͰνΣοΫ[3][4]
    • FastContainerͳͷͰޡݕ஌ͷ࠶഑ஔ͕ੜͯ͡΋αʔϏε͕ܧଓ͞ΕΔ
    • ޡݕ஌Ͱଞαʔόʹىಈͯ͠͠·ͬͯ΋Ұఆ࣌ؒىಈͨ͠Βఀࢭ͢Δ
    • ݩαʔόʹ࠶഑ஔ͞ΕͯCMDB্͸ݩαʔόͷΈʹϦΫΤετ͕ྲྀΕΔ
    • Ԡ౴࣌ؒͷᮢ஋΍λΠϜΞ΢τΛΪϦΪϦ·ͰνϡʔχϯάՄೳ
    20
    ఏҊख๏ͷϙΠϯτʢICMP/TCP؂ࢹʣ
    <>NBUTVNPUPSZ NSVCZGBTUSFNPUFDIFDL IUUQTHJUIVCDPNNBUTVNPUPSZNSVCZGBTUSFNPUFDIFDL
    <>-JOVYΧʔωϧͷ5$1ελοΫͱγεςϜίʔϧͷ૊Έ߹ΘͤʹΑΔख๏ΑΓ΋ߴ଎ʹϙʔτͷ-JTUFOνΣοΫΛ
    ߦ͏ IUUQTICNBUTVNPUPSKQFOUSZ

    View Slide

  21. • ίϯςφ಺ͷWebαʔόϓϩηεΛىಈ׬ྃ௚લͰΠϝʔδԽ(Checkpoint)
    • ఆظతʹඇಉظͰϓϩηεͷىಈ׬ྃ௚લΠϝʔδΛ࡞੒͓ͯ͘͠
    • ϦΫΤετड৴࣌ʹΠϝʔδΛϓϩηεʹ෮ݩ(Restore)
    • αʔόϓϩηεͷॳظԽॲཧΛεΩοϓ
    • ىಈʹ࣌ؒͷ͔͔ΔΞϓϦέʔγϣϯαʔό౳ʹ༗ར
    • Ruby on RailsɼDjangoͳͲ
    21
    ఏҊख๏ͷϙΠϯτʢCheckpoint/Restoreʣ

    View Slide

  22. • αʔόϓϩηεͷىಈ௚ޙΛίϯςφϥϯλΠϜͰϑοΫͯ͠Checkpoint
    • ࢀߟ: seccompͰγεςϜίʔϧΛ؂ࢹ͠ptraceͰҰ࣌ఀࢭ͔ͯ͠ΒCRIUͰ
    CheckpointʹΑΔΠϝʔδԽͱ͍͏ํ๏΋͋Δ
    • CRIUͷதͰseccompΛ࢖͓ͬͯΓύον͕ඞཁͰ൚༻ੑʹ͔͚Δ
    • ϦΫΤετΛड͚ͯίϯςφΛىಈ͢Δ࣌͸Πϝʔδ͔ΒRestoreͯ͠ىಈ
    22
    Checkpoint/RestoreʹΑΔFastContainerͷىಈ

    View Slide

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

    View Slide

  24. 4.
    ࣮ݧͱߟ࡯

    View Slide

  25. FastContainerͷγεςϜߏ੒
    25

    View Slide

  26. 26

    View Slide

  27. • ༧උ࣮ݧ: CRIUͱCheckpoint/Restore͢ΔϓϩηεͷϝϞϦαΠζͱͷؔ܎
    • ୅දతͳΞϓϦέʔγϣϯΛ࢖ͬͨίϯςφ࠶഑ஔ࣌ͷϨεϙϯελΠϜ
    • Apache 2.4.18ɼPHP 7.3.0ɼWordpress 5.0.3ʢσϑΥϧτϖʔδʣ
    • Python 3.7.1ɼDjango 2.1.4ɼgunicorn 19.9.0※1
    • Ruby 2.5.1ɼRails 5.2.1ɼPuma 3.12.0※2
    27
    ࣮ݧ಺༰
    ˞IUUQTNDMPMJQPQ[FOEFTLDPNIDKBBSUJDMFT
    ˞IUUQTHJUIVCDPNFWFSZMFBGFMUSBJOJO
    ݱ࣮తͳن໛ʢݸਓάϧʔϓ಺Ͱͷར༻ͷΞϓϦέʔγϣϯఔ౓ʣͰ%#Λར༻ͨ͠΋ͷΛ࠾

    View Slide

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

    View Slide

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











    .FNPSZVTBHFQFSQSPDFTT<.#>

    $IFDLQPJOU 3FTUPSF
    ୯ҰͷαʔόϓϩηεͷϝϞϦ࢖༻ྔʹԠͨ͡$IFDLQPJOU3FTUPSFʹඞཁ

    View Slide

  30. • Apache 2.4.18ɼPHP 7.3.0ɼWordpress 5.0.3
    • ϓϩηε਺͸3ɼ୯ҰͷϓϩηεͷϝϞϦαΠζ(RSS)͸35MBytes
    • Python 3.7.1ɼDjango 2.1.4ɼgunicorn 19.9.0 ※1
    • ϓϩηε਺2ɼεϨου਺2ɼ୯ҰͷϓϩηεͷRSS͸33MBytes
    • Ruby 2.5.1ɼRails 5.2.1ɼPuma 3.12.0 ※2
    • ϓϩηε਺2ɼεϨου਺14ɼ୯ҰͷϓϩηεͷRSS͸89MBytes
    • gemΛࣄલίϯύΠϧ͓ͯ͘͠bootsnapͱ΋ൺֱ
    30
    ίϯςφ࠶഑ஔ࣌ͷϨεϙϯελΠϜ

    View Slide

  31. WordPress on Apache httpd
    31
    BCίϚϯυͰಉ࣌઀ଓ਺ͷϕϯνϚʔΫΛ͔͚ͳ͕Β
    ऩ༰ϗετΛJQBUBCMFTͰԾ૝తʹμ΢ϯͤͯ͞ɼผͷऩ༰αʔόʹ࠶഑ஔΛڧ੍తʹൃੜͤͨ͞

    View Slide

  32. Django
    32
    IUUQTNDMPMJQPQ[FOEFTLDPNIDKBBSUJDMFT
    ݱ࣮తͳن໛ʢݸਓάϧʔϓ಺Ͱͷར༻ͷΞϓϦέʔγϣϯఔ౓ʣͰ%#Λར༻ͨ͠΋ͷΛ࠾༻

    View Slide

  33. Ruby on Rails
    33
    IUUQTHJUIVCDPNFWFSZMFBGFMUSBJOJO
    ݱ࣮తͳن໛ʢݸਓάϧʔϓ಺Ͱͷར༻ͷΞϓϦέʔγϣϯఔ౓ʣͰ%#Λར༻ͨ͠΋ͷΛ࠾༻

    View Slide

  34. 5.
    ·ͱΊ

    View Slide

  35. • ୯ҰΠϯελϯεͰՄ༻ੑΛ୲อ͢Δߴ଎ͳεέδϡʔϦϯάख๏ΛఏҊ
    • ෳ਺ΠϯελϯεΛඞཁͱ͠ͳ͍ͨΊϦιʔείετ͕௿͍
    • ࣮ݧ͔Βݱ࣌఺Ͱ΋࣮༻ՄೳͳϨϕϧͷ࠶഑ஔͷੑೳ͕ಘΒΕͨ
    • ϓϩμΫγϣϯ؀ڥͰԠ༻
    • ϗετো֐࣌Ͱ͋ͬͯ΋Ϣʔβ͕ؾ͔ͮͳ͍ϨϕϧͰͷՄ༻ੑ
    • ΦʔτεέʔϦϯά࣌ʹ΋γʔϜϨεʹίϯςφΛ૿΍ͯ͠ෛՙରࡦՄೳʹ
    • ΞΫηε܏޲ͱϦιʔεׂΓ౰͕ͯਖ਼֬ʹ௥ਵՄೳʹ
    • εέʔϦϯά΍ϋʔυ΢ΣΞϓʔϧͷϦιʔεׂΓ౰ͯ΋࠷దԽ
    35
    ·ͱΊ

    View Slide