精緻な解析と制御が可能な恒常性のあるメール基盤の設計 高集積マルチアカウント基盤と流量制御の両立
松本亮介, 小田知央 (ペパボ研究所), 笠原義晃, 嶋吉隆夫, 金子晃介 (九州大学), 栗林健太郎 (ペパボ研究所), 岡村耕二 (九州大学) 2018.03.05 情報処理学会 第40回インターネットと運用技術研究発表会
ߴूੵϚϧνΞΧϯτج൫ͱྲྀྔ੍ޚͷཱ྆দຊ྄հ, খాԝ (ϖύϘݚڀॴ), ּݪٛߊ, ౢ٢ོ, ۚࢠߊհ (भେֶ),܀ྛ݈ଠ (ϖύϘݚڀॴ), Ԭଜߞೋ (भେֶ)2018.03.05 ใॲཧֶձ ୈ40ճΠϯλʔωοτͱӡ༻ٕज़ݚڀൃදձਫ਼៛ͳղੳͱ੍ޚ͕Մೳͳ߃ৗੑͷ͋Δϝʔϧج൫ͷઃܭ
View Slide
1. എܠͱత2. ؔ࿈ݚڀ3. ఏҊख๏ͷઃܭͱ࣮ݧతͳ࣮Ҋ4. ·ͱΊͱࠓޙͷ՝2࣍
1.എܠͱత
• ࠓ͘ΘΕ͍ͯΔϝʔϧ• ϝʔϧαʔϏεࣄۀऀ·ͩ·ͩݱ• ϋʔυΣΞίετΛޮར༻͢ΔͨΊʹΞΧϯτυϝΠϯΛߴूੵԽ• େྔૹ৴ɺspamϝʔϧɺϝʔϧԆɺΞΧϯτͬऔΓ• ݁ՌతʹγεςϜཧɾϢʔβαϙʔτίετͷ૿Ճ• ಛఆͷΞΧϯτυϝΠϯͷϦιʔεྲྀྔ༗ʹΑΔෆ҆ఆੑ͕՝4ݚڀͷഎܠ
• ߴूੵԽͷͨΊʹ୯Ұͷαʔόϓϩηε܈ͰෳͷυϝΠϯΛॲཧ• υϝΠϯʢԾυϝΠϯʣ୯ҐͰͷ੍ޚػೳ͕ݶఆత• શͯͷυϝΠϯʹରͯ͠ಉҰͷಉ࣌ଓͷ੍ݶΛ੩తʹઃఆ• ੍ݶաʹΑΓαʔόϦιʔεΛेʹ͍Δ͜ͱ͕͍͠• υϝΠϯ୯ҐͰαʔόϓϩηε܈Λىಈ• ϝʔϧιϑτΣΞϓϩηε୯Ґͷશͯͷ੍ޚઃఆ͕Մೳ• ϓϩηε͕υϝΠϯʹґଘͯ͠ߴूੵʹऩ༰Ͱ͖ͳ͍5ैདྷख๏ɿߴूੵϚϧνΞΧϯτܕͷྲྀྔ੍ݶ
• υϝΠϯ୯ҐͰαʔόϓϩηεΛىಈͤͭͭ͞ߴूੵԽΛ࣮ݱ͢Δج൫• ͱ͋ΔηογϣϯͰҰఆظؒىಈ͠ɺঢ়ଶͷมԽʹૉૣ͘ରԠՄೳͳίϯςφΞʔΩςΫνϟΛԠ༻ → FastContainerΞʔΩςΫνϟ※1• υϝΠϯ୯ҐͰਫ਼៛ʹղੳྲྀྔɾϦιʔε੍ޚ͕Մೳͳج൫• ίϯςφʹΑΔϋʔυΣΞϦιʔε੍ޚΛυϝΠϯ୯ҐͰ࣮ࢪՄೳ• ίϯςφ୯ҐͰͷϦιʔεෆߴʹεέʔϧΞτՄೳ6ఏҊख๏ɿਫ਼៛ʹղੳՄೳͳ߃ৗੑͷ͋Δϝʔϧج൫˞দຊ྄հ ۙ౻Ӊஐ࿕ ࡾ༔հ ྗ݈࣍ ܀ྛ݈ଠ 'BTU$POUBJOFS࣮ߦڥͷมԽʹૉૣ͘దԠͰ͖Δ߃ৗੑΛ࣋ͭγεςϜΞʔΩςΫνϟ Πϯλʔωοτͱӡ༻ٕज़γϯϙδϜจूɼɼʢʣ ݄
2.ؔ࿈ݚڀ
• શυϝΠϯશମ·ͨଓΫϥΠΞϯτ୯Ґͷ੍ޚʢPostfixSendmailʣ• ಉ࣌ଓɺ͋Δ͍୯Ґ࣌ؒ͋ͨΓͷଓ• ୯Ґ࣌ؒ͋ͨΓͷϝοηʔδૹཁٻ• ୯Ґ࣌ؒ͋ͨΓͷૹ৴Մೳͳड৴ऀΞυϨε• αʔόϦιʔε༻ྔͱϝʔϧྲྀྔΛཱ྆͢Δ࠷దͳઃఆ͕͍͠• ֤υϝΠϯʹݸผʹҟͳΔͰͳ͘ڞ௨੍ͨ͠ݶΛ੩తʹઃఆ• αʔόΛकΔ੍ݶͰ͖Δ͕ϦιʔεΛेʹ͍Δ͜ͱ͕͍͠8ԾυϝΠϯʹ͓͚ΔҰൠతͳૹ৴੍ޚख๏ͱ՝
• ֎෦MTA͔ΒϝʔϧϘοΫεͷૹ• ֤υϝΠϯʹݸผͰͳ͘ڞ௨੍ͨ͠ݶΛ੩తʹઃఆʢૹ৴ͱಉ༷ʣ• ֎෦MUA͔ΒϝʔϧϘοΫεͷσʔλΛड৴• ֤υϝΠϯʹݸผͰͳ͘ڞ௨੍ͨ͠ݶΛ੩తʹઃఆʢૹ৴ͱಉ༷ʣ• ݕࡧϦετͷͨΊͷIMAPίϚϯυʹΑΔϦιʔε༗ͷ੍ޚ͕ࠔ• αʔόϦιʔεΛेʹ͍Δ͜ͱ͕͍͠9ԾυϝΠϯʹ͓͚Δड৴੍ޚઃఆͱ՝
• υϝΠϯ͓٬༷୯ҐͰαʔόϓϩηεԾڥΛ্ཱͪ͛Δ• ϛυϧΣΞϓϩηε୯ҐͰݸผͷ๛ͳ੍ޚ͕ར༻Մೳ• υϝΠϯͷʹൺྫͯ͠αʔόϓϩηε܈͕૿Ճ͢ΔͨΊߴूੵԽ͕͍͠• αʔόϓϩηε͕ेݸͰ͋ͬͯυϝΠϯ͕ສͷ߹ɺϓϩηε͕ඦສݸʹ૿Ճ• inetdxinetdͷΑ͏ͳʮଓΫϥΠΞϯτ×αʔόϓϩηε܈ʯΛηογϣϯຖʹߦ͏ॲཧੑೳϦιʔε໘Ͱޮ͕ѱ͍10ߴूੵऩ༰ͱͷؔੑ
• αʔόϓϩηεΛෳͷυϝΠϯͰڞ༗͢Δํࣜ• ϓϩηεΛڞ༗͢ΔͨΊϝʔϧηογϣϯ୯ҐͰͷ੍ޚखஈ͕গͳ͍• ߴूੵʹऩ༰Ͱ͖ͯϦιʔεڝ߹ʹΑΔෆ҆ఆঢ়ଶ͕ੜ͍͢͡• υϝΠϯ୯ҐͰαʔόϓϩηεΛىಈ• ߴूੵʹऩ༰͕Ͱ͖ͳ͍11՝·ͱΊ
3.ఏҊख๏ͷઃܭͱ࣮ݧతͳ࣮Ҋ
• ߴूੵʹΞΧϯτɾυϝΠϯΛऩ༰Մೳʢ୯ҰͷαʔόʹສυϝΠϯʣ• CPUཧίΞ24ݸɺϝϞϦ32GBఔͷPCαʔόΛఆ• υϝΠϯ୯ҐͰݸผʹਫ਼៛ͰಈతͳϦιʔε੍ޚΛ࣮ݱ• ҰൠతͳϝʔϧϛυϧΣΞͷ੍ޚػೳΛυϝΠϯ୯Ґʹઃఆ͍ͨ͠• εέʔϧΞοϓɾΞτ/μϯɾΠϯʹΑΔϦιʔε૿ڧɾ੍ݶՄೳ• ҟͳΔϋʔυΣΞͷಁաతͳҠಈఆ• υϝΠϯ୯ҐͰݸผʹਫ਼៛ͳηογϣϯใऩूʢࠓޙͷదԠత੍ޚʹܨ͛Δʣ13࣮ݱ͍ͨ͜͠ͱɿՁ֨Խͱ҆ఆԽʹ͚ͯ
• υϝΠϯ୯ҐͰαʔόϓϩηεΛىಈͤͭͭ͞ߴूੵԽΛ࣮ݱ͢Δج൫• ηογϣϯ୯ҐͰҰఆظؒىಈ͠ɺঢ়ଶͷมԽʹૉૣ͘ରԠՄೳͳίϯςφΞʔΩςΫνϟΛԠ༻ → FastContainerΞʔΩςΫνϟ• υϝΠϯ୯ҐͰίϯςφΛىಈ͠ਫ਼៛ʹྲྀྔɾϦιʔε੍ޚ͕Մೳͳج൫• ϛυϧΣΞͷ੍ݶશͯΛυϝΠϯʹରͯ͠ద༻Մೳ• ίϯςφʹΑΔϋʔυΣΞϦιʔε੍ޚΛυϝΠϯ୯ҐͰ࣮ࢪՄೳ• ίϯςφ୯ҐͰͷϦιʔεෆ࣌ʹߴʹεέʔϧΞτՄೳ14ఏҊख๏ɿਫ਼៛ʹղੳՄೳͳ߃ৗੑͷ͋Δϝʔϧج൫
FastContainer: ߃ৗੑ͔ΒಘΒΕΔ҆ఆੑ15ϗετ"ϗετ"ϗετ"ϗετ" ϗετ"Πϯλʔωοτϗετ"ϗετ"ϗετ"͕ͯఀࢭԠతʹىಈԠతʹεέʔϧΞοϓऩ༰αʔόAऩ༰αʔόBϦΫΤετԠతʹεέʔϧΞτ• ϗετͷىಈͱఀࢭΛ॥• ৗʹ॥͠ଓ͚ΔΞʔΩςΫνϟ• มԽ͠ଓ͚Δ͜ͱʹΑΔ҆ఆੑঢ়ଶͷมԽͷվળΛٻৗʹมԽՄೳͰ͋ΔͨΊಥൃతͳΞΫηεूதͷΑ͏ͳมԽʹੑͷ͋ΔΞʔΩςΫνϟΛ࣮ݱՄೳ
• ΞΫςΟϒͳηογϣϯͷΈ͕ίϯςφͱͯ͠ىಈ• ݸਓ͚ϗεςΟϯάαʔϏεͷΞΫςΟϒϢʔβ͕গͳ͍ࣄʹண• SMTPͱIMAPͰηογϣϯใΛσʔλϕʔεʹอଘ• কདྷతʹσʔλΛղੳͯ͠దԠతʹྲྀྔΛ੍ޚ͍ͨ͠• ߏใ੍ޚઃఆશͯσʔλϕʔεԽͯ͠ݸผ͔ͭಈతʹ੍ޚՄೳ• কདྷతʹϗετOS͕ఀࢭͯ͠ίϯςφ͕ࣗಈతʹผϗετʹҠಈՄೳ16FastContainerͱߴूੵऩ༰
ఏҊ͢Δϝʔϧج൫ͷશମϑϩʔ֓ཁ17*."1'BTU$POUBJOFS4ZTUFN$.%#"1*4.51-.51 'BTU$POUBJOFS4ZTUFN4.51'BTU$POUBJOFS4ZTUFN.6" -# -# .5".BJM%BUB
ఏҊ͢Δϝʔϧج൫ͷશମϑϩʔ֓ཁ18*."1'BTU$POUBJOFS4ZTUFN$.%#"1*4.51-.51 'BTU$POUBJOFS4ZTUFN4.51'BTU$POUBJOFS4ZTUFN.6" -# -# .5".BJM%BUB
ಉҰϗετϝʔϧج൫ͷSMTPૹ৴ϑϩʔৄࡉ194.513PVUFS[email protected]$.%#"1*4.51ίϯςφʢυϝΠϯ୯Ґʣ4.51ίϯςφʢυϝΠϯ୯Ґʣ4.51ίϯςφʢυϝΠϯ୯Ґʣ4.51'BTU$POQFSEPNBJO1PTUpY4.510VU1PTUpY4.51'JMUFS0VU7JSVTHX.6".5"4.51%JTQBUDIFS[email protected]υϝΠϯʹج͖ͮ)551ܦ༝ͰͷΞΧϯτɾυϝΠϯೝূͱϓϩΩγઌऔಘΛ࣮ࢪηογϣϯใऩू4.51ίϯςφ͕ىಈ͍ͯ͠ͳ͚ΕϦΞΫςΟϒʹҰఆظؒىಈσʔλऩूɾղੳͱߏཧ$PMMFDU4FTTJPO%BUB1NJMUFS
ఏҊ͢Δϝʔϧج൫ͷશମϑϩʔ֓ཁ20*."1'BTU$POUBJOFS4ZTUFN$.%#"1*4.51-.51 'BTU$POUBJOFS4ZTUFN4.51'BTU$POUBJOFS4ZTUFN.6" -# -# .5".BJM%BUB
)PTU04ϝʔϧج൫ͷSMTPड৴ϑϩʔৄࡉ21$.%#"1**."1ίϯςφʢυϝΠϯ୯Ґʣ*."1ίϯςφʢυϝΠϯ୯Ґʣ*."1ίϯςφʢυϝΠϯ୯Ґʣ-.51'BT$POQFSEPNBJO%PWFDPU4.51*O1PTUpY-.513PVUFS 1PTUpYNSVCZ4.51'JMUFS*O7JSVTHX.5"-.51%JTQBUDIFS1PTUpYNSVCZ.BJMEJS*OEFY4UPSBHF4.51JOFU-.516%4$PMMFDU4FTTJPO%BUB1NJMUFS4.51JOFU4.51JOFU
ఏҊ͢Δϝʔϧج൫ͷશମϑϩʔ֓ཁ22*."1'BTU$POUBJOFS4ZTUFN$.%#"1*4.51-.51 'BTU$POUBJOFS4ZTUFN4.51'BTU$POUBJOFS4ZTUFN.6" -# -# .5".BJM%BUB
)PTU04ϝʔϧج൫ͷIMAPड৴ϑϩʔৄࡉ23*."13PVUFS[email protected]$.%#"1*.6"*."1ίϯςφʢυϝΠϯ୯Ґʣ*."1ίϯςφʢυϝΠϯ୯Ґʣ*."1ίϯςφʢυϝΠϯ୯Ґʣ*."1'BT$POQFSEPNBJOEPWFDPU*."1%JTQBUDIFS[email protected].BJMEJS*OEFY4UPSBHF*."1ίϯςφʢυϝΠϯ୯Ґʣ*."1ίϯςφʢυϝΠϯ୯Ґʣ*."1ίϯςφʢυϝΠϯ୯Ґʣ$POUSPM3FTPVSDFNSVCZ*."1JOFU*."1JOFU%PWFDPU1MVHJOσʔλऩूɾղੳͱߏཧEPWFDPUNSVCZQMVHJO ίϚϯυ୯ҐͰ$16༻Λ੍ݶ ηογϣϯใίϚϯυͷৼΔ͍Λཧ
4.·ͱΊ
• ઃܭͱ࣮ݧత࣮ྃ• ϓϩτλΠϓ࣮Λߦͬͯ༗ޮੑͷධՁ• ϦιʔεޮੑೳධՁ• ϓϩμΫγϣϯڥʹ͓͚ΔϦιʔε੍ޚͷ༗ޮੑΛධՁ• ηογϣϯσʔλͷղੳख๏ͷઃܭ• ηογϣϯσʔλʹجͮ͘υϝΠϯ୯ҐͰͷదԠతͳ੍ޚઃఆ• ϗετOSҟৗ࣌ʹผϗετʹಁաతʹίϯςφΛϚΠάϨʔγϣϯ25·ͱΊͱࠓޙͷ՝
• ຊݚڀͰ༻ͨ͠Ϋϥυࢿݯɼฏ29ࠃཱใֶݚڀॴΫϥυར׆༻࣮ূ࣮ݧʹ͓͍ͯఏڙ͞Εͨɽ·ͨɼຊݚڀɼҎԼͷݚڀॿΛड͚͍ͯΔɽ• দຊ྄հ,খాԝ,ۙ౻Ӊஐ࿕,ּݪٛߊ,Ԭଜߞೋ,ౢ٢ོ,ۚࢠߊհ,mrubyΛར༻ͨܰ͠ྔίϯςφΫϥυج൫ͷݚڀ։ൃΛհͨ͠mrubyͷେنɾߴෛՙςετ, 2017Ruby Association։ൃॿ, 201710݄.26ँࣙ