FastContainerをメール基盤へ適用 - 精緻に制御可能な恒常性のある高集積マルチアカウント型のメール基盤
第3回Web System Architecture研究会@東京 #wsa研
さくらインターネット研究所 上級研究員 松本亮介 / まつもとりー / @matsumotory
͘͞ΒΠϯλʔωοτגࣜձࣾ(C) Copyright 1996-2018 SAKURA Internet Inc͘͞ΒΠϯλʔωοτݚڀॴFastContainerΛϝʔϧج൫ద༻ -ਫ਼៛ʹ੍ޚՄೳͳ߃ৗੑͷ͋ΔߴूੵϚϧνΞΧϯτܕͷϝʔϧج൫2018/11/17 ্ڃݚڀһ দຊ ྄հୈ3ճWeb System Architectureݚڀձˏ౦ژ #wsaݚ
View Slide
2ɾ͘͞ΒΠϯλʔωοτݚڀॴ ্ڃݚڀһɾגࣜձࣾGrooves Forkewll ٕज़ސɾϖύϘݚڀॴ ٬һݚڀһ ݚڀސɾηΩϡϦςΟɾΩϟϯϓߨࢣɾใॲཧֶձ Πϯλʔωοτͱӡ༻ٕज़ݚڀձ ֤छҕһɾژେֶത࢜ʢใֶʣদຊ྄հ / ·ͭͱΓʔ / @matsumotory
31. എܠͱత2. ఏҊख๏ͷઃܭͱ࣮3. ·ͱΊͱࠓޙͷ՝࣍ຊൃදҎԼͷݚڀൃදΛൃలͤͨ͞ͷͰ͋Δɻদຊ ྄հ, খా ԝ, ּݪ ٛߊ, ౢ٢ ོ, ۚࢠߊհ, ܀ྛ ݈ଠ, Ԭଜ ߞೋ, ਫ਼៛ʹ੍ޚՄೳͳ߃ৗੑͷ͋ΔߴूੵϚϧνΞΧϯτܕͷϝʔϧج൫, ϚϧνϝσΟΞɺࢄɺڠௐͱϞόΠϧʢDICOMO2018ʣγϯϙδϜ, 7C-1, Jul 2018.
1.എܠͱత
5ɾࠓ͘ΘΕ͍ͯΔϝʔϧɾϝʔϧαʔϏεࣄۀऀ·ͩ·ͩݱɾϋʔυΣΞίετΛޮར༻͢ΔͨΊʹΞΧϯτΛߴूੵԽɾେྔૹ৴ɺspamϝʔϧɺϝʔϧԆɺΞΧϯτͬऔΓɾ݁ՌతʹγεςϜཧɾϢʔβαϙʔτίετͷ૿ՃɾಛఆͷΞΧϯτυϝΠϯͷϦιʔεઐ༗ʹΑΔෆ҆ఆੑ͕՝ݚڀͷഎܠ
61. ߴूੵԽͷͨΊʹ୯Ұͷαʔόϓϩηε܈ͰෳͷυϝΠϯΛॲཧɾυϝΠϯʢԾυϝΠϯʣ୯ҐͰͷ੍ޚػೳ͕ݶఆతɾશͯͷυϝΠϯʹରͯ͠ಉҰͷಉ࣌ଓͷ੍ݶΛ੩తʹઃఆɾ੍ݶաʹΑΓαʔόϦιʔεΛेʹ͍Δ͜ͱ͕͍͠2. υϝΠϯ୯ҐͰαʔόϓϩηε܈ΛىಈɾϝʔϧιϑτΣΞϓϩηε୯Ґͷશͯͷ੍ݶઃఆ͕Մೳɾϓϩηε͕υϝΠϯʹґଘͯ͠ߴूੵʹऩ༰Ͱ͖ͳ͍ैདྷख๏ɿߴूੵϚϧνΞΧϯτܕͷ੍ݶ
71. αʔόϓϩηεΛෳͷυϝΠϯͰڞ༗͢Δํࣜɾϝʔϧηογϣϯ୯ҐͰͷϦιʔεɾྲྀྔ੍ݶखஈ͕গͳ͍ɾߴूੵʹऩ༰Ͱ͖ͯϦιʔεڝ߹ʹΑΔෆ҆ఆঢ়ଶ͕ੜ͍͢͡2. υϝΠϯ୯ҐͰαʔόϓϩηεΛىಈɾϓϩηε͕υϝΠϯʹԠͯ͡୯ௐ૿Ճɾߴूੵʹऩ༰͕Ͱ͖ͳ͍ैདྷख๏ͷ՝·ͱΊ
8ɾୈҰճ ࣮ߦڥͷมԽʹૉૣ͘దԠͰ͖Δ߃ৗੑΛ࣋ͭγεςϜΞʔΩςΫνϟͱࠓޙͷ՝ɾίϯςφΛϦΞΫςΟϒʹঢ়ଶΛม͑ΒΕΔΞʔΩςΫνϟͷհɾ→ FastContainerΞʔΩςΫνϟɾୈೋճ HTTPϦΫΤετ୯ҐͰίϯςφΛ࠶ஔ͢ΔԾԽج൫ͷߴͳεέδϡʔϦϯάख๏ɾFastContainerͷಛΛ׆͔ͯ͠ϦΞΫςΟϒʹऩ༰ϗετΛ࠶ஔɾHTTPαʔόʹͱΒΘΕͣʹ࣮ߦج൫ͱͯ͠ͷ൚༻ԽΛਐΊͨwsaݚ#1ͱ#2ͷൃද
9ɾਫ਼៛ʹղੳՄೳͳ߃ৗੑͷ͋Δϝʔϧج൫ɾυϝΠϯ୯ҐͰαʔόϓϩηεΛىಈͭͭ͠ΞΫςΟϒͰͳ͍ϓϩηεੵۃతʹఀࢭͤͯ͞ߴूੵԽΛཱ྆ɾηογϣϯΛܖػʹҰఆظؒىಈ͠ɺঢ়ଶͷมԽʹૉૣ͘ରԠՄೳͳίϯςφΞʔΩςΫνϟFastContainer*1ΛԠ༻ɾυϝΠϯ୯ҐͰਫ਼៛ʹղੳྲྀ༻ɾϦιʔε੍ޚ͕Մೳͳج൫ɾίϯςφʹΑΔϋʔυΣΞϦιʔε੍ޚΛυϝΠϯ୯ҐͰ࣮ࢪఏҊख๏˞দຊ྄հ தా༟و ܀ྛ݈ଠ )551ϦΫΤετ୯ҐͰΠϯελϯεͷ࠶ஔ͕ՄೳͳίετͰߴͳεέδϡʔϦϯάख๏ ݚڀใࠂΠϯλʔωοτͱӡ༻ٕज़ʢ*05ʣ 7PM*05 QQ +VO
2.ఏҊख๏ͷઃܭͱ࣮
11ɾߴूੵʹΞΧϯτɾυϝΠϯΛऩ༰Մೳʢ୯ҰͷαʔόʹສʣɾCPUཧίΞ24ίΞɺϝϞϦ32GBఔͷPCαʔόΛఆɾυϝΠϯ୯ҐͰݸผʹਫ਼៛ͰಈతͳΓιʔε੍ޚΛ࣮ݱɾҰൠతͳϝʔϧϛυϧΣΞͷ੍ޚػೳΛυϝΠϯ୯ҐɾεέʔϧΞοϓɾΞτɾμϯɾΠϯʹΑΔϦιʔε੍ޚՄೳɾҟͳΔϋʔυΣΞͷಁաతͳҠಈఆɾυϝΠϯ୯ҐͰݸผʹਫ਼៛ͳηογϣϯใऩूʢࠓޙͷํʣ࣮ݱ͍ͨ͜͠ͱɿՁ֨Խͱ҆ఆԽʹ͚ͯ
12ɾυϝΠϯ୯ҐͰαʔόϓϩηεΛىಈͭͭ͠ΞΫςΟϒͰͳ͍ϓϩηεੵۃతʹఀࢭͤͯ͞ߴूੵԽΛཱ྆ɾηογϣϯ୯ҐͰϦΞΫςΟϒʹҰఆ࣌ؒىಈ͠ɺঢ়ଶมԽʹૉૣ͘ରԠՄೳͳFastContainerΞʔΩςΫνϟΛԠ༻ɾυϝΠϯ୯ҐͰίϯςφΛىಈ͠ਫ਼៛ʹྲྀྔɾϦιʔε੍ޚ͕ՄೳɾϛυϧΣΞͷ੍ݶશͯΛυϝΠϯʹରͯ͠ద༻ՄೳɾίϯςφʹΑΔϋʔυΣΞϦιʔεΛυϝΠϯ୯ҐͰ੍ޚՄೳɾίϯςφ୯ҐͰͷϦιʔεෆ࣌ʹߴʹεέʔϦϯάՄೳఏҊ͢Δ߃ৗੑͷ͋Δϝʔϧج൫
13FastContainerɿ߃ৗੑ͔ΒಘΒΕΔ҆ఆੑϗετ"ϗετ"ϗετ"ϗετ" ϗετ"Πϯλʔωοτϗετ"ϗετ"ϗετ"͕ͯఀࢭԠతʹىಈԠతʹεέʔϧΞοϓऩ༰αʔόAऩ༰αʔόBϦΫΤετԠతʹεέʔϧΞτ• ϗετͷىಈͱఀࢭΛ॥• ৗʹ॥͠ଓ͚ΔΞʔΩςΫνϟ• มԽ͠ଓ͚Δ͜ͱʹΑΔ҆ఆੑঢ়ଶͷมԽͷվળΛٻৗʹมԽՄೳͰ͋ΔͨΊಥൃతͳΞΫηεूதͷΑ͏ͳมԽʹੑͷ͋ΔΞʔΩςΫνϟΛ࣮ݱՄೳ
14ɾΞΫςΟϒͳηογϣϯͷΈ͕ίϯςφͱͯ͠ىಈɾൺֱతϗεςΟϯάαʔϏεͷΞΫςΟϒϢʔβ͕গͳ͍ࣄʹணɾSMTPͱIMAPͷηογϣϯใΛσʔλϕʔεʹอଘɾকདྷతʹσʔλΛղੳͯ͠ద༻తʹྲྀྔΛ੍ޚ͍ͨ͠ɾߏใ੍ޚઃఆશͯσʔλϕʔεԽͯ͠ݸผ͔ͭಈతʹ੍ޚՄೳɾϗετOS͕ఀࢭͯ͠ίϯςφ͕ࣗಈతʹผϗετʹҠಈՄೳFastContainerͱऩ༰ͷߴूੵԽ
15ఏҊ͢Δϝʔϧج൫ͷશମϑϩʔ֓ཁ*."1'BTU$POUBJOFS4ZTUFN$.%#"1*4.51-.51 'BTU$POUBJOFS4ZTUFN4.51'BTU$POUBJOFS4ZTUFN.6" -# -# .5".BJM%BUB
16ఏҊ͢Δϝʔϧج൫ͷશମϑϩʔ֓ཁ*."1'BTU$POUBJOFS4ZTUFN$.%#"1*4.51-.51 'BTU$POUBJOFS4ZTUFN4.51'BTU$POUBJOFS4ZTUFN.6" -# -# .5".BJM%BUB
17ϝʔϧج൫ͷSMTPૹ৴ϑϩʔৄࡉಉҰϗετ4.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
18ఏҊ͢Δϝʔϧج൫ͷશମϑϩʔ֓ཁ*."1'BTU$POUBJOFS4ZTUFN$.%#"1*4.51-.51 'BTU$POUBJOFS4ZTUFN4.51'BTU$POUBJOFS4ZTUFN.6" -# -# .5".BJM%BUB
19ϝʔϧج൫ͷSMTPड৴ϑϩʔৄࡉ)PTU04$.%#"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
20ఏҊ͢Δϝʔϧج൫ͷશମϑϩʔ֓ཁ*."1'BTU$POUBJOFS4ZTUFN$.%#"1*4.51-.51 'BTU$POUBJOFS4ZTUFN4.51'BTU$POUBJOFS4ZTUFN.6" -# -# .5".BJM%BUB
21ϝʔϧج൫ͷIMAPड৴ϑϩʔৄࡉ)PTU04*."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༻Λ੍ݶ ηογϣϯใίϚϯυͷৼΔ͍Λཧ
22ϓϩτλΠϓ࣮
3.·ͱΊ
24ɾઃܭͱ࣮ݧత࣮ྃɾϓϩτλΠϓ࣮Λߦͬͯ༗ޮੑΛධՁɾϦιʔεޮੑೳධՁɺΩϡʔԆͷධՁɾϓϩμΫγϣϯڥʹ͓͚ΔϦιʔε੍ޚͷ༗ޮੑΛධՁɾηογϣϯσʔλͷղੳख๏ͷઃܭɾηογϣϯσʔλʹجͮ͘υϝΠϯ୯ҐͰͷదԠతͳ੍ޚઃఆɾϗετOSҟৗ࣌ʹผϗετʹಁաతʹίϯςφΛϚΠάϨʔγϣϯ·ͱΊͱࠓޙͷ՝
25ɾຊݚڀͰ༻ͨ͠Ϋϥυࢿݯɼฏ29ࠃཱใֶݚڀॴΫϥυར׆༻࣮ূ࣮ݧʹ͓͍ͯఏڙ͞Εͨɽɾ·ͨɼຊݚڀɼҎԼͷݚڀॿΛड͚͍ͯΔɽɾদຊ྄հ,খాԝ,ۙ౻Ӊஐ࿕,ּݪٛߊ,Ԭଜߞೋ,ౢ٢ོ,ۚࢠߊհ, mrubyΛར༻ͨܰ͠ྔίϯςφΫϥυج൫ͷݚڀ։ൃΛհͨ͠mrubyͷେنɾߴෛՙςετ, 2017Ruby Association։ൃॿ, 201710݄.ँࣙ