研究開発によってサーバ台数を100分の1にする技術を生み出す
ペパボ研究所 主席研究員 兼 シニアプリンシパルエンジニア 松本 亮介 / Pepabo R&D Institute, GMO Pepabo, Inc. 2017.11.25 Fukuoka RubyKaigi 02
ݚڀ։ൃʹΑͬͯαʔόΛ100ͷ1ʹ͢Δٕज़ΛੜΈग़͢ϖύϘݚڀॴ ओ੮ݚڀһ ݉ γχΞϓϦϯγύϧΤϯδχΞ দຊ ྄հ / Pepabo R&D Institute, GMO Pepabo, Inc.2017.11.25 Fukuoka RubyKaigi 02200ສυϝΠϯͷHTTPSԽΛݟਾ͑ͨmrubyʹΑΔେنূ໌ॻཧΞʔΩςΫνϟ
View Slide
• ژେֶത࢜ʢใֶʣ• ϖύϘݚڀॴ ओ੮ݚڀһ• GMOϖύϘ γχΞɾϓϦϯγύϧΤϯδχΞ• ݩΠϯϑϥΤϯδχΞ• ຊOSSྭɾใॲཧֶձ ࢁԼه೦ݚڀͳͲଟ2দຊ྄հ / ·ͭͱΓʔ / @matsumotory
1.ৗ࣌HTTPSԽͷഎܠͱຊݚڀͷత2.ैདྷͷWebαʔόͷূ໌ॻઃఆͷ՝3.ߴूੵϚϧνςφϯτWebαʔόͷେنূ໌ॻཧ4.࣮ݧͱ࣮ӡ༻্ͷධՁ5.·ͱΊ3࣍
1.ৗ࣌HTTPSԽͷഎܠͱຊݚڀͷత
• HTTP/2ͷRFC࠾ͱ࣮༻ԽͷऔΓΈ• GoogleʹΑΔৗ࣌HTTPSԽͷਪਐ• Let’s EncryptʹΑΔແྉͷDVূ໌ॻͷఏڙ• اۀ͚ͩͰͳ͘ݸਓͷWebαΠτͷHTTPSԽඞਢ5ݚڀͷഎܠ
• ݸਓ͚ͷՁ֨ϗεςΟϯάͰ࠾༻͞ΕΔ͜ͱͷଟ͍ํࣜ※1• ୯ҰͷWebαʔόʹߴूੵ(ສυϝΠϯ)ʹϗετΛऩ༰• ԾϗετํࣜʹΑΓେྔͷϗετΛಉҰϓϩηεͰॲཧ• ϦόʔεϓϩΩγͷ߹ߋʹߴूੵ(ेɺඦສυϝΠϯ)• ߴूੵϚϧνςφϯτํࣜͷHTTPSରԠٸ6ߴूੵϚϧνςφϯτํࣜͷWebαʔό˞দຊ྄հ തֶ࢜Ґจ8FCαʔόͷߴूੵϚϧνςφϯτΞʔΩςΫνϟʹؔ͢Δݚڀ IUUQTSFQPTJUPSZLVMJCLZPUPVBDKQETQBDFIBOEMF ژେֶ ݄
• Webαʔόϓϩηεىಈ࣌ʹશͯͷূ໌ॻΛಡΈࠐΉํࣜ• ߴूੵϚϧνςφϯτํࣜͰূ໌ॻ͕େ• ϝϞϦ༻ྔ͕ূ໌ॻʹґଘͯ͠ϋʔυΣΞίετ૿Ճ• ϓϩηεىಈʹ͕͔͔࣌ؒΓઃఆมߋ࣌ͷӡ༻໘ʹ՝• ࠓޙΛݟਾ͑ͯݚڀऀͱͯ͠ૣΊʹखΛ͏ͭඞཁ͕͋Δ7ैདྷͷߴूੵϚϧνςφϯτํࣜͷূ໌ॻઃఆͷ՝
2015Լظ͔ΒऔΓΈ։࢝ޙ20161݄ϦϦʔε8SFGIUUQICNBUTVNPUPSKQFOUSZ
࣮·Ͱ2લʹ΄΅Ͱ͖͍͕࣮ͯͨӡ༻্Ͱͷ༗ޮੑͷධՁ͕େࣄ
جຊతʹHTTPSԽ༗ྉͩͬͨͷͰࢁͷٞΛܦͯࠓͷ্ظʹແྉԽ
ߴूੵϚϧνςφϯτWebαʔόͷେنূ໌ॻཧ• ূ໌ॻͷ૿Ճʹ͏Ϧιʔε༻ྔͷ૿ՃΛݮ• αʔϏεఀࢭ͢Δ͜ͱͳ͘৽نઃఆΛөՄೳ• ϗεςΟϯάαʔϏεͷϓϩμΫγϣϯڥʹಋೖͯ͠ධՁ200ສυϝΠϯͷHTTPSԽʹඞཁͳαʔόΛ100ͷ111ຊݚڀͷత
2.ैདྷͷWebαʔόͷূ໌ॻઃఆͷ՝
ߴूੵϚϧνςφϯτํࣜΛલఏͱͨ͠HTTPSԽͷ՝
େྔͷυϝΠϯΛHTTPSԽ͢Δࡍͷ՝Λ໌֬ʹ͢Δ
1. HTTPSԽʹ͏ϋʔυΣΞίετͷ૿Ճ2. ূ໌ॻՃͷઃఆมߋద༻࣌ؒͷ૿Ճ15ߴूੵϚϧνςφϯτํࣜͷऩ༰ͱӡ༻໘ͷ՝
• ϗετͷʹൺྫͯ͠ϗετઃఆɾূ໌ॻൿີ伴ͷσʔλɾHTTP/HTTPSॲཧʹඞཁͳϝϞϦ༻ྔ͕૿େ• ΄ͱΜͲΞΫηεͷແ͍ϗετʹରͯ͠ઃఆใΛอ࣋• Մ༻ੑͱอकੑΛߴΊΔͨΊʹHTTPS༻ͷϓϩΩγΛલஈʹஔ͍ͨ߹όοΫΤϯυͷυϝΠϯΛશͯू͢Δඞཁ͋Γ• ฐࣾϗεςΟϯάαʔϏεͰ200ສυϝΠϯҎ্161. HTTPSԽʹ͏ϋʔυΣΞίετͷ૿Ճ
• αʔόϓϩηεىಈ࣌ʹશͯͷূ໌ॻઃఆΛಡΈࠐΈ• ϗετ୯ҐͰରԠ͢Δূ໌ॻͷϑΝΠϧઃఆΛهड़• ߴूੵԽʹ͍ઃఆߦͷ૿େཧίετͷ૿େ• ઃఆ૿Ճʹ͍αʔόϓϩηεͷ࠶ىಈ͕࣌ؒ૿Ճ• ઃఆͷ࠶ಡΈࠐΈॲཧ͢ΒαʔϏεఀࢭʹܨ͕ΔڪΕ༗Γ172. ূ໌ॻՃͷઃఆมߋద༻࣌ؒͷ૿Ճ
3.ߴूੵϚϧνςφϯτWebαʔόͷେنূ໌ॻཧΞʔΩςΫνϟ
·ͱΊͨ՝Λղܾ͢ΔํࣜΛ·ͣఏҊ͢Δ
• αʔόϓϩηεىಈ࣌ʹূ໌ॻҰಡΈࠐ·ͳ͍• αʔόϓϩηεͷ࠶ىಈ/࠶ಡΈࠐΈ࣌ؒͷԽΛճආ• TLSϋϯυγΣΠΫ࣌ʹඞཁͳূ໌ॻͱઃఆΛಈతʹಡΈࠐΈ• ߴͳϓϩηε࠶ಡΈࠐΈʹΑΔϝϞϦղ์Մೳ• ূ໌ॻϗετͷ৽نՃઃఆʹϓϩηε࠶ىಈ͕ෆཁ20ఏҊख๏
ΞʔΩςΫνϟʢํࣜʣͷఏҊ21'JMF,74IUUQE QSPDFTT$MJFOU4/*ʹΑͬͯTFSWFSOBNF͕FYBNQMFKQͷυϝΠϯʹର͢Δ5-4ϋϯυγΣΠΫ͕։࢝5-4ϋϯυγΣΠΫ࣌ʹυϝΠϯFYBNQMFKQʹඥͮ͘ূ໌ॻͱൿີ伴ΛϑΝΠϧ,FZ7BMVF4UPSF ,74ͳͲ͔ΒಈతʹಡΈࠐΈ͍ͨ
ΞʔΩςΫνϟʢํࣜʣͷఏҊ22'JMF,74IUUQE QSPDFTT$MJFOU5-4ϋϯυγΣΠΫ࣌ʹҙͷؔΛ࣮ߦͰ͖Εྑ͍ؔͷதͰυϝΠϯͱඥͮ͘αʔόূ໌ॻͱൿີ伴ΛಡΈࠐΉؔΛ࣮ߦͰ͖Εྑ͍
ํࣜΛ࣮ݱ͢ΔͨΊͷ࣮Λݕ౼͢Δ
ΤϯδχΞͱͯ͠ͷͷݟͤͲ͜Ζ
• 3ͿΓͷϝδϟʔϦϦʔε• https://www.openssl.org/news/openssl-1.0.2-notes.html• OpenSSLͷίʔυΛٱʑʹோΊ͍ͯͨ• TLSϋϯυγΣΠΫ࣌ʹؔΛίʔϧόοΫ͢Δ͕ؔՃ• SSL_CTX_set_client_cert_cb() ͳͲ25OpenSSL 1.0.2͕20151݄22ʹϦϦʔε
࣌ͷྲྀΕͱࣗͷߟ͕͑ಉظ͞Εͨ
• RubyͰΠϯϑϥઃܭʹԠͨ͡ಈతઃఆΛՄೳʹ͢ΔͨΊ• όοΫΤϯυͷܾఆRubyͰॻ͍ͯnginxͷઃఆΛ؆ૉԽ• ূ໌ॻσʔλͷऔΓग़͠Λࣗ༝ʹબͰ͖ΔΑ͏ʹ͢ΔͨΊ• RedisɺMySQLɺlocalmemcacheɺAPIͳͲmrbgemͷ׆༻• ੑೳʹ͕ແ͚ΕRubyͰॻ͖͍ͨ27͞Βʹngx_mruby׆༻͍ͨ͠
ngx_mruby × OpenSSL 1.0.2
• ngx_mruby※1ʹTLSϋϯυγΣΠΫͷRubyϑοΫઃఆΛ࣮• TLSϋϯυγΣΠΫ࣌ʹϑοΫ͞ΕͨRubyͷίʔυΛ࣮ߦ• RubyϝιουͰOpenSSLͱσʔλͷड͚͠Λ࣮ߦ• KVS/File͔Βূ໌ॻൿີ伴ΛRubyܦ༝ͰಡΈࠐΈՄ29ngx_mruby v1.16.0ʢ20162݄ʣͰՃ࣮˞দຊ྄հ Ԭ෦णஉ NPE@NSVCZεΫϦϓτݴޠͰߴ͔ͭলϝϞϦʹ֦ுՄೳͳ8FCαʔόͷػೳ֦ுࢧԉػߏ ใॲཧֶձจࢽɼ7PM /P QQ /PW
ngx_mrubyͷূ໌ॻಈతಡΈࠐΈ࣮ϑϩʔ3044-@$59@TFU@DFSU@DC ʹ3VCZͷόΠτίʔυΛ࣮ߦ͢ΔIBOEMFSͷؔϙΠϯλͱίϯςΩετߏମϙΠϯλΛηοτOHJOYDPOGͷઃఆ͔ΒಡΈࠐΜͩ3VCZεΫϦϓτΛόΠτίʔυԽͯ͠ίϯςΩετߏମʹอଘ5-4ϋϯυγΣΠΫ࣌ʹIBOEMFS͕ίʔϧόοΫ͞ΕόΠτίʔυΛ࣮ߦόΠτίʔυͰ࣮ߦ͞ΕΔ3VCZͷϝιουܦ༝Ͱূ໌ॻൿີ伴σʔλ͕ίϯςΩετߏମʹηοτ͢Δূ໌ॻͱൿີ伴σʔλʹج͍ͯ#*0ܦ༝ͰσʔλΛಡΈࠐΜͰϋϯυγΣΠΫΛଓߦOHJOYىಈ࣌ͷॲཧ OHJOY͕ϦΫΤετड৴ͨ࣌͠ͷॲཧNSVCZͷ5-4ϋϯυγΣΠΫϑοΫσΟϨΫςΟϒ͕ଘࡏͨ͠Β44-@$59@TFU@DFSU@DC Λݺͼग़͢
lua-nginx-module΄΅ಉ࣌ظʹ։ൃ31݄ʹͲͪΒϚʔδ͕ࣗཉ͍͠ͱࢥͬͨ࣌ʹͳ͔ͬͨ͜ͱͱ3VCZͰॻ͖͔ͨͬͨͷͰOHY@NSVCZʹ࣮
• ϦΫΤετͷ͋ͬͨOpenSSLͷservernameͰఆ• ඥͮ͘ূ໌ॻͱϓϩΩγઌΛRubyͷίʔυͰܾఆ• RubyͰಈతʹઃఆ(mruby_set $hostͱproxy_pass $host)• ୯ҰͷઃఆͰສͷΦʔμʔͷυϝΠϯΛಈతʹॲཧ• ઃఆͱূ໌ॻʹؔ͢ΔϝϞϦ༻ྔΛઅ32ngx_mrubyͷಈతͳઃఆͱূ໌ॻಡΈࠐΈ
33ϦΫΤετ͞ΕͨυϝΠϯ͔Βಈతʹূ໌ॻΛಡΈସ͑Δ͜ͱʹΑΓόοΫΤϯυͷϓϩΩγઃఆؚΊ୯ҰͷઃఆʹूՄೳϑΝΠϧϕʔεͷಈతূ໌ॻಡΈࠐΈྫ3VCZͰϓϩάϥϚϒϧʹهड़Մೳ
34ϦΫΤετ͞ΕͨυϝΠϯ͔Βಈతʹূ໌ॻΛಡΈସ͑Δ͜ͱʹΑΓ୯ҰͷઃఆʹूՄೳ,74ϕʔεͷಈతূ໌ॻಡΈࠐΈྫ
1. αʔόϓϩηεىಈ࣌ʹূ໌ॻಡΈࠐ·ͳ͍2. υϝΠϯͱূ໌ॻɺϓϩΩγͷઃఆ୯Ұͷઃఆʹѹॖ3. ΞΫηεͷ͋ͬͨυϝΠϯͷΈͷূ໌ॻΛಡΈࠐΉ• 200ສυϝΠϯͰΞΫηεͷແ͍υϝΠϯଟଘࡏ4. ఆظతͳϓϩηεϦϩʔυʹΑΓূ໌ॻσʔλΛղ์35HTTPSԽʹؔ͢ΔϝϞϦ༻ྔޮԽ·ͱΊ
ํࣜͱ࣮Ͱ͖ͨͷͰޙ༗ޮੑΛࣔ͢
4.࣮ݧͱ࣮ӡ༻্ͷධՁ
ఆྔతͳ࣮ݧͱߟʹΑͬͯఏҊख๏ͷ༗ޮੑΛ໌֬ʹࣔ͢
༗ޮੑΛࣔ͢ओு͔Β৴པੑΛಘΔ
1. ࣮ݧڥͰैདྷख๏ͱఏҊख๏ͷىಈ࣌ؒͷ࣮ݧ2. ࣮ݧڥͰैདྷख๏ͱఏҊख๏ͷੑೳൺֱ࣮ݧɾಈతূ໌ॻಡΈࠐΈͷΦʔόʔϔουͲͷఔ͔ʁ3. ຊ൪ڥͰ࣮ӡ༻্ͷධՁɾແྉHTTPSΦϓγϣϯαʔϏεͷ։࢝ͱͦͷޙ40࣮ݧͱ࣮ӡ༻্ͷධՁ
1. ैདྷख๏ͱఏҊख๏ͷىಈ࣌ؒͷ࣮ݧ
࣮ݧڥ42༷$16 *OUFM9FPO&W()[DPSF.FNPSZ (CZUFT4FSWFS /&$&YQSFTT3G&04 $FOU04-JOVY,FSOFM
• 10ສϗετͷ4096bitsͷ伴ͷൿີ伴ͱαʔόূ໌ॻΛnginxόʔδϣϯ1.11.13ͰಡΈࠐΈ• ैདྷख๏࠶ಡΈࠐΈॲཧͰαʔϏεఀࢭʹܨ͕Δ43ैདྷख๏ͱఏҊख๏ͷىಈ࣌ؒͷ࣮ݧ߲ ैདྷख๏ ఏҊख๏ϓϩηεىಈͷ࣮࣌ؒ ඵ ϓϩηεىಈͷϢʔβ$16༻࣌ؒ ඵ ϓϩηεىಈͷγεςϜ$16༻࣌ؒ ඵ
2. ैདྷख๏ͱఏҊख๏ͷੑೳൺֱ࣮ݧ
•ैདྷͷࣄલূ໌ॻಡΈࠐΈख๏ͱఏҊख๏ͷTLSϋϯυγΣΠΫ࣌ʹಈతʹಡΈࠐΉख๏(KVSϕʔε)ͱൺֱ•ಉ࣌ଓΛมԽͤ͞ͳ͕ΒੑೳΛධՁ•nginxʹॳظಉ෧͞Ε͍ͯΔ612Bytesͷindex.html•cipher suitesECDHE-RSA-AES128-GCM-SHA25645ఏҊख๏ͷੑೳධՁ
ఏҊํࣜͱैདྷํࣜͷੑೳൺֱ46ಉ࣌ଓैདྷํࣜQSFMPBESFRTFDఏҊํࣜEZOBNJDMPBESFRTFD $(*ͷΑ͏ͳϓϩηεෳ͕ੜ͡ͳ͍ܰྔͳ੩తϑΝΠϧͷϦΫΤετͰɺূ໌ॻͷಈతಡΈࠐΈैདྷख๏ͷ੩తಡΈࠐΈͱൺֱͯ͠΄΅͕ࠩͳ͍
10ສϗετऩ༰࣌ͷ੩తϑΝΠϧͷੑೳൺֱ47ेCZUFTͷܰྔͳ)5.-ϑΝΠϧͷϦΫΤετ3FRVFTUTFDಉ࣌ଓ ैདྷख๏ ఏҊख๏
• TLSϨεϙϯεੜॲཧͱൺֱͯ͠ಈతূ໌ॻಡΈࠐΈॲཧ࣮༻্ʹͳΒͳ͍ఔͷॲཧίετ• TLSϋϯυγΣΠΫ࣌ͷ҉߸ɾ෮߸ॲཧͷίετ͕େ͖͍48ߟ
3. ຊ൪ڥͰ࣮ӡ༻্ͷධՁ
࣮ӡ༻ޙʹ͓͍ͯఏҊख๏ͷ༗ޮੑΛ͖ͪΜͱࣔ͢
ͦͷͨΊʹैདྷख๏ͷ߹Ͳ͏ͳΔ͔Λ͖ͪΜͱܭଌ͠ߟ͢Δ
ͦΕ͕ݚڀ։ൃͷࠜڌʹܨ͕Δ
͞ΒͳΔվળʹܨ͕͍ͬͯ͘
• ैདྷख๏ͱఏҊख๏ͷ1ϲ݄ؒͷϦιʔε༻ྔΛൺֱ• ैདྷख๏20173݄͔Β4݄ɺఏҊख๏7݄͔Β8݄• ෳͷಉҰϋʔυΣΞ্ʹ4݄ΛػʹϦϓϨʔε• ैདྷख๏Apache2.4ɺఏҊख๏nginx1.11Ͱ࣮• ূ໌ॻͷ૿ՃϦΫΤετॲཧͷมԽͱൺֱ͠ͳ͕Βߟ54ແྉূ໌ॻαʔϏεΛػʹ࣮ӡ༻্ͷධՁ
ຊ൪ڥͷఏҊख๏ʹΑΔγεςϜߏ֓ཁ55ఏҊख๏ͷద༻Օॴ
ຊ൪ڥͷϦόʔεϓϩΩγαʔόͷ༷56༷$16 *OUFM9FPO&W()[UISFBE.FNPSZ (CZUFT4FSWFS /&$&YQSFTT&F.04 $FOU04
1ϲ݄ؒͷূ໌ॻͷભҠ5705000100001500020000250001 6 11 16 21 26 31The number of cer-ficatesdayThe number of cer-ficate in a monthdynamic load preloadΘ͔Γʹ͍͕͘Ұϲ݄Ͱ͔Βͱূ໌ॻఔ૿͍͑ͯΔূ໌ॻϦϓϨʔεલͷഒ͔Βഒ
1ϲ݄ؒͷ1αʔόͷඵؒHTTPϦΫΤετ58020040060080010001200140016001 6 11 16 21 26 31Requests/secdayRequest/sec in a mouthdynamic load preloadϦϓϨʔεޙʹ-#ͷׂΓͯൺ͕มΘͬͨͨΊ)551ʴ)5514ϦΫΤετॲཧഒ͔Βഒ
1ϲ݄ؒͷCPU༻ͷભҠ590.001.002.003.004.005.006.007.008.009.001 6 11 16 21 26 31CPU usage(%)dayCPU usage in a mouthdynamic load preloadূ໌ॻ͕͔ΒഒʹؔΘΒͣ$16༻ඍ͕ࠩͩݮສূ໌ॻ૿ՃͰ$16ఔඍ૿
1ϲ݄ؒͷϝϞϦ༻ͷભҠ600100020003000400050006000700080001 6 11 16 21 26 31Memory usage(MBytes)dayMemory usage in a mouthdycamic load preloadূ໌ॻ͔ΒഒʹؔΘΒͣϝϞϦ༻ݮఏҊख๏ສҎ্૿Ճ͍ͯ͠Δূ໌ॻʹ΄΅ґଘ͍ͯ͠ͳ͍ূ໌ॻ૿Ճʹ͍ϝϞϦ༻ྔαʔόશମͰ(#ZUFTఔ૿Ճ
• ैདྷख๏(preload)1ϗετՃ͋ͨΓϝϞϦ2.5MBytes૿Ճ• 2ສূ໌ॻͷ߹50GBytesҎ্ͷϝϞϦ͕ඞཁ• ϝϞϦ32GbytesͷαʔόͳͷͰैདྷख๏Ͱطʹա• ఏҊख๏2ສূ໌ॻΛ͑ͯ3GbytesͰ΄΅Ұఆ• ຖͷreload͕ՄೳʹͳΓͦͷΈ߹ΘͤʹΑ࣮ͬͯݱ611ϲ݄ͷ࣮ӡ༻্ͷධՁ͔ΒϝϞϦͷ༻ྔΛߟ
• ैདྷख๏20ສূ໌ॻΛॲཧ͢Δͷʹ500Gbytesඞཁ• 32GBytesͷαʔό͕15Ҏ্ඞཁ• ఏҊख๏20ສূ໌ॻͰ1ͰॲཧՄೳͷݟࠐΈ• 1ɺ2ສূ໌ॻ૿Ճͯ͠ϝϞϦ༻ྔ3GBytesͰ΄΅ҰఆɺCPU༻0.2ʙ0.5%૿Ճఔ62ϝϞϦ༻ྔ͔ΒඞཁͳϋʔυΣΞΛݟੵΓ
ఏҊख๏ʹΑΓαʔόΛ15ͷ1ͱେ෯ʹݮՄೳͳݟੵΓ
15ͷ1ʁ
͞Βʹઌ
100ͷ1Λࢦ͢
ݕূ͍ͯ͘͠ͱվળ͢ΔՕॴ͕ݟ͖͑ͯͨ
• ϝϞϦ༻ྔΛ͞Βʹݮͤ͞ΔઓུΛͱΔ• reloadͷΈ߹ΘͤͰ૿ՃྔΛߋʹݮΒͤͨΒޮԽՄೳ• reloadΛΊͯ·ͣ૿ՃྔΛ֬ೝ• ͔ͦ͜Βո͍͠ίʔυͱઃఆΛϦϑΝΫλϦϯά͍ͯ͘͠• 4ϲ݄ؒͷϝϞϦભҠΛάϥϑԽ…..༧֎ʹϦʔΫ͍ͯͨ͠68ϝϞϦόϯυͷ՝Λߋʹվળ͍ͨ͠
690500010000150002000025000300002017/07/02-09:002017/07/04-09:002017/07/06-09:002017/07/08-09:002017/07/10-09:002017/07/12-09:002017/07/14-09:002017/07/16-09:002017/07/18-09:002017/07/20-09:002017/07/22-09:002017/07/24-09:002017/07/26-09:002017/07/28-09:002017/07/30-09:002017/08/01-09:002017/08/03-09:002017/08/05-09:002017/08/07-09:002017/08/09-09:002017/08/11-09:002017/08/13-09:002017/08/15-09:002017/08/17-09:002017/08/19-09:002017/08/21-09:002017/08/23-09:002017/08/25-09:002017/08/27-09:002017/08/29-09:002017/08/31-09:002017/09/02-09:002017/09/04-09:002017/09/06-09:002017/09/08-09:002017/09/10-09:002017/09/12-09:002017/09/14-09:002017/09/16-09:002017/09/18-09:002017/09/20-09:002017/09/22-09:002017/09/24-09:002017/09/26-09:002017/09/28-09:002017/09/30-09:002017/10/02-09:002017/10/04-09:002017/10/06-09:002017/10/08-09:002017/10/10-09:002017/10/12-09:002017/10/14-09:002017/10/16-09:002017/10/18-09:002017/10/20-09:002017/10/22-09:002017/10/24-09:002017/10/26-09:002017/10/28-09:002017/10/30-09:002017/11/01-09:00Memory Usage [MBytes]DayMemory Usage for Four MonthsMemory UsageಈతॲཧຖSFMPBE SFMPBEఀࢭத SFMPBEఀࢭதϦϑΝΫλϦϯάສυϝΠϯ)5514ԽສυϝΠϯ)5514ԽSFMPBEఀࢭ
• ngx_mrubyͷcacheΦϓγϣϯͰϦʔΫ͢Δύλʔϯ͋Δʁ• ݱࡏௐࠪதʢҟৗॲཧ࣌ʹϦʔΫ͍ͯ͠Δ͔ʣ• mruby_setͰͳ͘mruby_set_codeͳͲʹॻ͖͑• ΫϥεϞδϡʔϧΛmrbgemԽͯ͠Ϗϧυ࣌ʹΈࠐΈ• ྫ֎ॲཧҟৗͳΞΫηεͷΤϥʔॲཧͷݟ͠70ϦϑΝΫλϦϯάͰͬͨ͜ͱ
710500010000150002000025000300002017/07/02-09:002017/07/04-09:002017/07/06-09:002017/07/08-09:002017/07/10-09:002017/07/12-09:002017/07/14-09:002017/07/16-09:002017/07/18-09:002017/07/20-09:002017/07/22-09:002017/07/24-09:002017/07/26-09:002017/07/28-09:002017/07/30-09:002017/08/01-09:002017/08/03-09:002017/08/05-09:002017/08/07-09:002017/08/09-09:002017/08/11-09:002017/08/13-09:002017/08/15-09:002017/08/17-09:002017/08/19-09:002017/08/21-09:002017/08/23-09:002017/08/25-09:002017/08/27-09:002017/08/29-09:002017/08/31-09:002017/09/02-09:002017/09/04-09:002017/09/06-09:002017/09/08-09:002017/09/10-09:002017/09/12-09:002017/09/14-09:002017/09/16-09:002017/09/18-09:002017/09/20-09:002017/09/22-09:002017/09/24-09:002017/09/26-09:002017/09/28-09:002017/09/30-09:002017/10/02-09:002017/10/04-09:002017/10/06-09:002017/10/08-09:002017/10/10-09:002017/10/12-09:002017/10/14-09:002017/10/16-09:002017/10/18-09:002017/10/20-09:002017/10/22-09:002017/10/24-09:002017/10/26-09:002017/10/28-09:002017/10/30-09:002017/11/01-09:00Memory Usage [MBytes]DayMemory Usage for Four MonthsMemory UsageಈతॲཧຖSFMPBE SFMPBEఀࢭத SFMPBEఀࢭதϦϑΝΫλϦϯάສυϝΠϯ)5514ԽສυϝΠϯ)5514ԽSFMPBEఀࢭ
• ϦϑΝΫλϦϯάલ5Ͱ10GBఔϦʔΫ(12GB)• ىಈ࣌αʔόશମͰϝϞϦ2GB༗͠1Ͱ2GBϦʔΫ͢Δঢ়گΛຖreloadͯ͠ฏۉ3GBͰ҆ఆ͍ͤͯͨ͞• ϦʔΫରԠޙ5Ͱ250MBఔͷϦʔΫ(150MB)• reloadͱΈ߹ΘͤΔͱฏۉ2GBͰ҆ఆͰ͖ΔՄೳੑ͋Γ72ϦʔΫͷߟ
• ैདྷख๏200ສυϝΠϯͰ32GBytesαʔό͕150ඞཁ• ఏҊख๏ϝϞϦόϯυͷ؍Ͱ1ʹऩ·ΔՄೳੑ͋Γ• 6ສυϝΠϯ૿ՃͰ150MBͷϝϞϦ૿Ճʹऩ·Δܭࢉ• 200ສυϝΠϯͰ12GBͷϝϞϦ૿Ճʹऩ·ΔՄೳੑ͋Γ• ϝϞϦҎ֎ͷΦʔόʔϔου͕Ͳ͜ʹग़ͯ͘Δ͔Λਵ࣌ධՁ73ཧతʹαʔόͷ100ͷ1͕ࢹʹ
7݄͔Β8݄ͷ2ϲ݄ؒͷτϥϑΟοΫมԽ74ূ໌ॻສ૿Ճ͕ͨ͠ɺͱͱ)551ͱ)5514྆ํॲཧ͍ͯ͠ΔͨΊ)551ͷυϝΠϯ͕)5514Խ͞ΕͯͦΕ΄ͲۃͳӨڹແ͍ɻ
ܧଓతͳվળʹΑΓαʔό100ͷ1Λݱ࣮
·ͱΊ
• ߴूੵϚϧνςφϯτํࣜͷେྔূ໌ॻཧͷఏҊͱධՁ• ඞཁͳυϝΠϯͷΈͷಈతূ໌ॻಡΈࠐΈͱαʔόϓϩηε࠶ಡΈࠐΈͷԽࢭʹΑΔϝϞϦղ์ͷΈ߹ΘͤͰ࣮ݱ• ϋʔυΣΞίετΛݮՄೳ(কདྷతʹ200ສυϝΠϯ)• ॲཧੑೳʹ࣮༻্ͳ͘ઃఆөਝʹՄೳ77·ͱΊ
• 201711݄Ͱ200ສυϝΠϯத7ສυϝΠϯ͕HTTPSԽ• ϝϞϦ༻ྔʹج͍ͯreloadΛ࣮ࢪ͢ΔػೳΛՃ༧ఆ• ngx_mrubyࣗମ͕ࣗಈͰ࣮ࢪͰ͖ΔΑ͏ʹ͢Δ• reload͠ͳͯ͘ఆظతʹূ໌ॻσʔλΛύʔδͤ͞Δػೳ• τϥϑΟοΫόϯυʹͳΓͦ͏ͳͷͰͦͷ؍Ͱݚڀ։ൃ78ࠓޙͷ՝
• ϓϩμΫτͷޙΛݟਾ͑ͯઌߦͯ͠ݚڀ։ൃ• ࣍ࠃࡍձٞΛ௨ͯ͠ੈքڞ༗͍ͯ͘͠• ৗʹઌΛߦ͖ϓϩμΫτ͕ग़ձ͏Ͱ͋Ζ͏นΛΓӽ͑ଓ͚Δ• ࠓճී௨ʹ͍ͬͯͨΒେมίετ͕͔͔͍ͬͯͨ• ී௨ͩͱࢥ͑ͯ͠·͏ʮͨΓલͷݶքʯ͕͋Δ• ࠓ͋Δٕज़ৗࣝΛৗʹ͍ٙվળΛ৴ͯ͡औΓΈଓ͚Δ79ਓͷൃʹج൫ٕज़͕͑͏Δঢ়ଶΛࢦ͢
ʮͨΓલͷݶքʯΛ͍͑ͯ͘