HTTPリクエスト単位でコンテナを再配置する仮想化基盤の高速なスケジューリング手法
FastContainerアーキテクチャによる仮想化基盤の更なる信頼性向上に向けて
松本亮介,田中諒介,栗林 健太郎 / Pepabo R&D Institute, GMO Pepabo, Inc. 2018.05.12 第2回 Web System Architecture 研究会
FastContainerΞʔΩςΫνϟʹΑΔԾԽج൫ͷߋͳΔ৴པੑ্ʹ͚ͯদຊ྄հɼాதྒհɼ܀ྛ ݈ଠ / Pepabo R&D Institute, GMO Pepabo, Inc.2018.05.12 ୈ2ճ Web System Architecture ݚڀձHTTPϦΫΤετ୯ҐͰίϯςφΛ࠶ஔ͢ΔԾԽج൫ͷߴͳεέδϡʔϦϯάख๏
View Slide
1. എܠͱత2. ؔ࿈ݚڀͷ՝3. ఏҊख๏4. ࣮ݧͱߟ5. ·ͱΊͱࠓޙͷల2࣍
1.എܠͱత
• ݸਓ͕ͨΓલʹଟछଟ༷ͳWebαΠτΛ࣋ͭ࣌• ΫϥυɾVPSͷΑ͏ͳࣗ༝ͱִڥʢΠϯελϯεʣʹର͢Δཁٻ• SNSΛհͯ͠ݸਓͷίϯςϯπΛ֦ࢄ͍࣌͢͠• ݸਓͷWebαΠτͷΞΫηεूத͢Δػձͷ૿େ• ݸਓαΠτͰΞΫηεूதোʹڧ͍৴པੑͷ͋Δج൫͕ඞཁ4ݸਓͷWebαΠτͷΞΫηεूத৴པੑ
1. ΠϯελϯεՃॲཧ͕Ͱ͋Δ͜ͱΛղܾ• Πϯελϯεͷঢ়ଶͷఀࢭɾىಈɾεέʔϦϯάΛߴʹ॥• ϦΫΤετ୯ҐͰঢ়ଶΛܾఆ2. ϋʔυΣΞϦιʔεͷར༻ޮͷ͞Λղܾ• ϦΫΤετ͕ແ͍ΠϯελϯεҰఆظؒىಈޙʹఀࢭΠϯελϯεΛߴूੵʹऩ༰ՄೳͰมԽʹڧ͍ԾԽج൫ͷఏҊ5Πϯελϯε͕॥͢ΔมԽʹڧ͍ج൫ͷఏҊ※1˞দຊ྄հ ۙ౻Ӊஐ࿕ ࡾ༔հ ྗ݈࣍ ܀ྛ݈ଠ 'BTU$POUBJOFS࣮ߦڥͷมԽʹૉૣ͘దԠͰ͖Δ߃ৗੑΛ࣋ͭγεςϜΞʔΩςΫνϟ Πϯλʔωοτͱӡ༻ٕज़γϯϙδϜจूɼɼʢʣ /PW
• ෳΠϯελϯεՔಇͤ͞Δ͜ͱʹΑΔίετͷ૿େ• ෳͷऩ༰αʔόʹΠϯελϯεΛͦΕͧΕՔಇͤ͞Δ͜ͱͰՄ༻ੑΛ୲อ• ߴूੵʹΠϯελϯεऩ༰͢Δ؍͔ΒͰ͖Δ͚ͩϦιʔεΛઅ͍ͨ͠• ࣮ӡ༻࣌ͷՄ༻ੑతͱෛՙࢄతͷࠞࡏʹΑΔෳࡶ͞• Մ༻ੑతͷΠϯελϯεΛίετΛཧ༝ʹෛՙࢄʹͬͯ͠·͏• Β͵ؒʹऩ༰αʔόো࣌ʹੑೳॖୀঢ়ଶʹͳΓೋ࣍ো6FastContainer͓Αͼؔ࿈ݚڀͷՄ༻ੑͷ՝
1. Πϯελϯε্ͰWordPressͷΑ͏ͳҰൠతͳWebΞϓϦ͕ಈ࡞Մೳ2. ୯ҰΠϯελϯεͰऩ༰αʔόো࣌ʹผαʔόࣗಈతʹ࠶ஔՄೳ3. Πϯελϯεͷ࠶ஔͷ࣮ߦ࣌Ͱ͋ͬͯඵͷԆͰHTTPλΠϜΞτ͢Δ͜ͱͳ͘ΦϯϥΠϯͰϨεϙϯεΛૹ৴Մೳߴूੵʢݸਓ͚ͷՁ֨Խʣͱ৴པੑੑೳͷόϥϯεΛͱΔͨΊͷख๏7ݚڀͷత: ϦΫΤετ୯Ґ ͰͷΠϯελϯε࠶ஔ
2.ؔ࿈ݚڀͷ՝
• FastContainer ※1HTTPϦΫΤετʹԠͯ͡Ԡత͔ͭߴʹΠϯελϯεͷঢ়ଶʢىಈɺఀࢭɺҠಈɺෳɺϦιʔε૿ݮʣΛܾఆ• ΞΫηεʹԠͨ͡ϦΞΫςΟϒͳεέʔϦϯάॲཧ͕Մೳ• ΫϥυαʔϏεج൫༧ΊΠϯελϯεΛىಈͤͯ͞ϦΫΤετΛॲཧ• ΞΫηεूத࣌༧ଌత͔ͭϓϩΞΫςΟϒͳεέʔϦϯάॲཧ͕ඞཁ9FastContainerͱΫϥυαʔϏεج൫ͷಛ˞দຊ྄հ ۙ౻Ӊஐ࿕ ࡾ༔հ ྗ݈࣍ ܀ྛ݈ଠ 'BTU$POUBJOFS࣮ߦڥͷมԽʹૉૣ͘దԠͰ͖Δ߃ৗੑΛ࣋ͭγεςϜΞʔΩςΫνϟ Πϯλʔωοτͱӡ༻ٕज़γϯϙδϜจूɼɼʢʣ ݄
1. WordPressͷΑ͏ͳҰൠతͳWebΞϓϦέʔγϣϯΛར༻Մೳ2. Πϯελϯεͷऩ༰αʔόͷো࣌ʹHTTPλΠϜΞτ͕ੜ͡ͳ͍ϨϕϧͰαʔϏεΛܧଓͰ͖ΔఔͷՄ༻ੑΛఆՁ֨WebϗεςΟϯάج൫ɺΫϥυج൫ɺFastContainerج൫Ͱཧ10ຊݚڀʹ͓͚ΔԾԽج൫ͱՄ༻ੑͷલఏ
• ҰൠతͳWebΞϓϦέʔγϣϯ͕ར༻Մೳ• Ձ֨Λ࣮ݱ͢ΔͨΊߴूੵʹϗετΛऩ༰ՄೳͳԾϗετํ͕ࣜҰൠత• ྫɿ୯ҰͷApacheͰສυϝΠϯͷԾϗετΛॲཧ• ສυϝΠϯΛॲཧ͢ΔApacheΛෳαʔόʹෳஔͯ͠Մ༻ੑΛ୲อ※1• ෳWebαʔόϓϩηεͷىಈ͕લఏͱͳΓϦιʔε༗ͷίετ͕૿େ11Ձ֨WebϗεςΟϯάج൫ͷՄ༻ੑ˞দຊ྄հ ݪক࢘ দԬً େنڞ༗ܕ8FCόʔνϟϧϗεςΟϯάج൫ͷηΩϡϦςΟͱӡ༻ٕज़ͷվળ ใॲཧֶձจࢽ 7PM /P QQ .BS
• ༷ʑͳWebΞϓϦέʔγϣϯʢϗεςΟϯάΑΓࣗ༝͕ߴ͍ʣ͕ར༻Մೳ• IaaSPaaSΛར༻ͨ͠Πϯελϯε୯ҐͰͷߏங͓ΑͼՄ༻ੑ୲อ͕Ұൠత• ຊݚڀͷՄ༻ੑ͕લఏͷ߹ɺෳऩ༰αʔόʹͦΕͧΕΠϯελϯεΛϗοτελϯόΠํࣜʢىಈࡁΈͷػΠϯελϯεʣͰػ͢Δ͜ͱͰ࣮ݱ• ऩ༰αʔόఀࢭ࣌ʹଈ࣌αʔϏεΛܧଓ͢ΔͨΊ• ෳΠϯελϯεͷىಈ͕લఏͱͳΓϦιʔε༗ͷίετ͕૿େ12FastContainerΫϥυج൫ͷՄ༻ੑ
13$MJFOU4FSWFS"QBDIFʢWIPTU܈ʣ4UPSBHF$MJFOU4FSWFSJOTUBODF"JOTUBODF#JOTUBODF$4FSWFSJOTUBODF"4UPSBHF4FSWFS"QBDIFʢWIPTU܈ʣՁ֨8FCϗεςΟϯάج൫ͷՄ༻ੑ 'BTU$POUBJOFSΫϥυج൫ͷՄ༻ੑ)551ϦΫΤετ )551ϦΫΤετ
14$MJFOU4FSWFS"QBDIFʢWIPTU܈ʣ4UPSBHF$MJFOU4FSWFSJOTUBODF"JOTUBODF#JOTUBODF$4FSWFSJOTUBODF"4UPSBHF4FSWFS"QBDIFʢWIPTU܈ʣՁ֨8FCϗεςΟϯάج൫ͷՄ༻ੑ 'BTU$POUBJOFSΫϥυج൫ͷՄ༻ੑ)551ϦΫΤετ)551ϦΫΤετ✗✗
• ݶΒΕͨίετʹ͓͚ΔՄ༻ੑͱෛՙࢄͷཱ͕྆ট͘ো࣌ͷॖୀ• ϗοτελϯόΠͷίετΛ༗ޮ׆༻͢ΔͨΊʹෛՙࢄʹ׆༻• ӡ༻ܧଓ͢ΔதͰՄ༻ੑͱෛՙࢄͷత͕ࠞࡏ͠ɺো࣌ʹॖୀঢ়ଶ• ॖୀঢ়ଶͰॲཧ͕͍͔ͭͣ෮چલʹαʔϏεఀࢭΛট͘͜ͱ15ͦͷଞෳߏʹΑΔՄ༻ੑ୲อͷ՝
3.ఏҊख๏
1. Πϯελϯε্ͰWordPressͷΑ͏ͳҰൠతͳWebΞϓϦ͕ಈ࡞Մೳ2. ୯ҰΠϯελϯεͰऩ༰αʔόো࣌ʹผαʔόࣗಈతʹ࠶ஔՄೳ3. Πϯελϯεͷ࠶ஔͷ࣮ߦ࣌Ͱ͋ͬͯඵͷԆͰHTTPλΠϜΞτ͢Δ͜ͱͳ͘ΦϯϥΠϯͰϨεϙϯεΛૹ৴Մೳ͞ΒʹFastContainerʹΑΓɺ࠶ஔ࣌ʹΞΫηε͕ूதͨ͠߹ىಈ͍ͯ͠Δαʔό্ͰϦΞΫςΟϒʹεέʔϦϯάՄೳʢॖୀ͕ى͖ͳ͍ʣ17ఏҊख๏: ϦΫΤετ୯Ґ ͰͷΠϯελϯε࠶ஔ
184UPSBHF$MJFOU4FSWFSJOTUBODF"JOTUBODF#JOTUBODF$4FSWFSJOTUBODF"'BTU$POUBJOFSΫϥυج൫ͷՄ༻ੑ4UPSBHF$MJFOU4FSWFSJOTUBODF"JOTUBODF#JOTUBODF$4FSWFSఏҊख๏ʴ'BTU$POUBJOFSͷՄ༻ੑఏҊख๏)551ϦΫΤετ )551ϦΫΤετ
194UPSBHF$MJFOU4FSWFSJOTUBODF"JOTUBODF#JOTUBODF$4FSWFSJOTUBODF"'BTU$POUBJOFSΫϥυج൫ͷՄ༻ੑ4UPSBHF$MJFOU4FSWFSJOTUBODF"JOTUBODF#JOTUBODF$4FSWFSఏҊख๏ʴ'BTU$POUBJOFSͷՄ༻ੑఏҊख๏)551ϦΫΤετ )551ϦΫΤετJOTUBODF"✗Ԡతʹ࠶ஔ✗
HTTP FastContainerͷجຊϑϩʔ208FC1SPYZʢOHY@NSVCZ$.%#ʴ"1*8FC%JTQBUDIFSOHY@NSVCZ$MJFOU ίϯςφίϯςφίϯςφw )551ϦΫΤετͷ)PTUOBNFΛΩʔʹɺ$.%# ߏཧ%#͔ΒίϯςφͷใΛऔಘ)551 4ϦΫΤετw ίϯςφͷ*1ͱϙʔτʹج͍ͯίϯςφʹϓϩΩγw ίϯςφ͕-JTUFO͍ͯ͠ͳ͍߹$.%#͔ΒίϯςφใΛಘͯىಈ$POUBJOFS&OHJOFIBDPOJXBऩ༰ϗετ"
1. Web Proxy͔Βऩ༰αʔόʹICMPͰ1ύέοτͷԠΛଌఆ2. Ԡ͕ᮢΛ͍͑ͯͨΒผͷऩ༰αʔό࠶ஔ→ ඇৗʹγϯϓϧͳํࣜͰ࣮ݱՄೳ21ߴͳऩ༰ϗετͷࢮ׆ࢹͱ࠶ஔ
)PTU048FC1SPYZ$.%#"1*$POUBJOFS%JTQBUDIFS$POUBJOFS)PTU04$POUBJOFS%JTQBUDIFS$POUBJOFS$MJFOU)551 *$.1*$.1)551)551)551
)PTU048FC1SPYZ$.%#"1*$POUBJOFS%JTQBUDIFS$POUBJOFS)PTU04$POUBJOFS%JTQBUDIFS$POUBJOFS$MJFOU)551 *$.1*$.1)551)551)551✗࠷ॳͷ࠶ஔ࣌ίϯςφͷىಈ͕ඞཁͰ͋Δ͕ɺىಈޙҰఆظؒىಈ͠ଓ͚Δɻ
• ICMPͰᮢνΣοΫ͕Ұ࣌తʹޡݕͯ͠Өڹ͕গͳ͍• FastContainerͳͷͰޡݕͷ࠶ஔ͕ੜͯ͡αʔϏε͕ܧଓ͞ΕΔ• ޡݕͰଞαʔόʹىಈͯ͠͠·ͬͯҰఆ࣌ؒىಈͨ͠Βఀࢭ͢Δ• ݩαʔόʹ࠶ஔ͞ΕͯCMDB্ݩαʔόͷΈʹϦΫΤετ͕ྲྀΕΔ• Ԡ࣌ؒͷᮢλΠϜΞτΛΪϦΪϦ·ͰνϡʔχϯάՄೳ24ఏҊख๏ͷϙΠϯτʢICMPࢹͱFastContainerʣ
• ୯ҰͷΠϯελϯεͰ͋ͬͯProxyʹΑͬͯࣗతʹՄ༻ੑ͕อͨΕΔ• ෛՙࢄͷΈʹෳΠϯελϯε༻ҙ͢ΔɺͱతΛݶఆͰ͖Δ• ݪཧతʹॖୀ͕ൃੜ͠ͳ͍25ఏҊख๏ͷϙΠϯτʢॖୀͷղܾʣ
4.࣮ݧͱߟ
FastContainerͷγεςϜߏ27
28
• Web Proxyͱίϯςφऩ༰ϗετؒͷICMPԠ࣌ؒ• 1ύέοτ1500byteͷԠΛ1000ճଌఆ29༧උ࣮ݧ1ʢICMPͷԠ࣌ؒʣ
• 40byteͷHTMLΛฦ͢Apache+mod_phpͷίϯςφ• ϦΫΤετΛૹ৴ޙɺԠతʹىಈͯ͠ϨεϙϯεΛฦ͢·Ͱͷ࣌ؒΛ500ճଌఆ30༧උ࣮ݧ1ʢίϯςφͷىಈ࣌ؒʣ
• 40όΠτͷHTMLΛฦ͢ίϯςφʢCPUίΞ1ɺϝϞϦ512MBʣ• ಉ࣌ଓ10૯ଓ10ສͷϕϯνϚʔΫɺICMPͷᮢ10msec• WordPressͷτοϓϖʔδΛฦ͢ίϯςφʢCPUίΞ4ɺϝϞϦ512MBʣ• ಉ࣌ଓ10૯ଓ5ઍͷϕϯνϚʔΫɺICMPͷᮢ100msec• ϕϯνϚʔΫͷͷ͕࣌ؒܦաͨ͠ஈ֊Ͱऩ༰αʔόΛiptableͰૄ௨அ31ຊ࣮ݧ
40όΠτͷindex.htmlΛฦ͢ίϯςφ32
WordPressͷτοϓϖʔδΛฦ͢ίϯςφ33
• ICMPࢹͷᮢνϡʔχϯάʹΑΓߴͳ࠶ஔΛ࣮ݱ• ίϯςφͷىಈ͕࣌ؒࢧత• ίϯςφͷىಈ࣌ؒΛඦɾेmsecҎԼʹͰ͖ΕWordPressʹ͓͍ͯΦʔόʔϔου͕ΞϓϦέʔγϣϯ• ݱ࣌ͰҰ࣌తͳԆͰ͋ΔͨΊSLA࣍ୈͰ࣮༻ԽՄೳ34ߟ
• ProxyͱDispatcherؒͷॲཧதʹϗετ͕ఀࢭͨ͠߹ϦΫΤετΛऔΓ͜΅͋͢Δ• ͜ΕैདྷͷෳΠϯελϯεͰಉ༷35ߟ8FC1SPYZʢOHY@NSVCZ$.%#ʴ"1*8FC%JTQBUDIFSOHY@NSVCZ$MJFOU ίϯςφίϯςφ$POUBJOFS&OHJOFIBDPOJXBΓΛ·ͨͣʹऩ༰αʔόμϯ
5.·ͱΊͱࠓޙͷల
• ୯ҰΠϯελϯεͰՄ༻ੑΛ୲อ͢ΔߴͳεέδϡʔϦϯάख๏ΛఏҊ• ෳΠϯελϯεΛඞཁͱ͠ͳ͍ͨΊϦιʔείετ͕͍• ࣮ݧ͔Βݱ࣌Ͱ࣮༻ՄೳͳϨϕϧͷ࠶ஔͷੑೳ͕ಘΒΕͨ• ར༻ऀෳͷΠϯελϯεར༻Λෛՙࢄ༻్ʹूதͰ͖ΔΑ͏ʹͳΔ37·ͱΊ
• ࠶ஔͷॲཧ࣌ؒʹ͓͍ͯίϯςφͷWebαʔόͷىಈ͕࣌ؒࢧత• WebαʔόΛेmsecͰىಈ͢Δ൚༻తͳىಈ࣌ؒॖख๏Λݕূத• IOT42Ͱൃද༧ఆ• ຊݚڀͷεέδϡʔϦϯάख๏ΛԠ༻ͯࣗ͠తͳෛՙࢄͷͨΊͷϋʔυΣΞεέδϡʔϦϯάख๏ൃల͍͖͍ͤͯͨ͞38ࠓޙͷల
ContainerͷதͷϛυϧΣΞͷىಈߴԽPoC39SFGl04ϨΠϠͰ8FCαʔό͕ىಈ࣌ʹ࣮ߦ͢ΔγεςϜίʔϧΛࢹ͠ىಈྃલͷϓϩηεΛΠϝʔδԽ͢ΔlIUUQICNBUTVNPUPSKQFOUSZ