Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

1. എܠͱ໨త

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

2. ؔ࿈ݚڀͷ՝୊

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

3. ఏҊख๏

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

HTTP FastContainerͷجຊϑϩʔ 19 8FC1SPYZ ʢOHY@NSVCZ $.%# ʴ "1* 8FC%JTQBUDIFS OHY@NSVCZ $MJFOU ίϯςφ ίϯςφ ίϯςφ w )551ϦΫΤετͷ)PTUOBNF ΛΩʔʹɺ$.%# ߏ੒؅ཧ%# ͔Βίϯςφͷ৘ใΛऔಘ )551 4 ϦΫΤετ w ίϯςφͷ*1ͱϙʔτʹج͍ ͯίϯςφʹϓϩΩγ w ίϯςφ͕-JTUFO͍ͯ͠ͳ͍ ৔߹͸$.%#͔Βίϯςφ ৘ใΛಘͯىಈ $POUBJOFS&OHJOF IBDPOJXB ऩ༰ϗετ"

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

)PTU04 8FC1SPYZ $.%#"1* $POUBJOFS %JTQBUDIFS $POUBJOFS )PTU04 $POUBJOFS %JTQBUDIFS $POUBJOFS $MJFOU )551 *$.1 *$.1 )551 )551 )551 ✗ ࠷ॳͷ࠶഑ஔ࣌͸ίϯςφͷىಈ͕ඞཁͰ͋Δ͕ɺ ىಈޙ͸Ұఆظؒىಈ͠ଓ͚Δɻ

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

4. ࣮ݧͱߟ࡯

Slide 28

Slide 28 text

FastContainerͷγεςϜߏ੒ 28

Slide 29

Slide 29 text

29

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

αʔόϓϩηεͷΠϝʔδԽ(Checkpoint/Restore) 34 $IFDLQPJOU3FTUPSF1SPDFTTJOH5JNFEVFUP.FNPSZ6TBHF 1SPDFTTJOHUJNF .FNPSZVTBHFQFSQSPDFTT<.#> $IFDLQPJOU 3FTUPSF

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

5. ·ͱΊ

Slide 39

Slide 39 text

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