なめらかなシステムにおけるWebサービスのユーザ体感と技術者体感に関する研究 ペパボ研究所 主席研究員 シニア・プリンシパルエンジニア 松本亮介 / Pepabo R&D Institute, GMO Pepabo, Inc. 2017.10.16 【福岡U・Iターン希望者向け】エンジニア向けトーク&相談会@東京
ͳΊΒ͔ͳγεςϜʹ͓͚ΔWebαʔϏεͷϢʔβମײͱٕज़ऀମײʹؔ͢ΔݚڀϖύϘݚڀॴ ओ੮ݚڀһ γχΞɾϓϦϯγύϧΤϯδχΞ দຊ྄հ / Pepabo R&D Institute, GMO Pepabo, Inc.2017.10.16 ʲԬUɾIλʔϯرऀ͚ʳΤϯδχΞ͚τʔΫˍ૬ஊձˏ౦ژϖύϘԬͰͷʮମײʯΛ্ͤ͞ΔWebαʔϏεج൫ٕज़ʹؔ͢ΔऔΓΈ
View Slide
• ϖύϘݚڀॴ ओ੮ݚڀһ• ژେֶത࢜ʢใֶʣ• γχΞɾϓϦϯγύϧ ΤϯδχΞ• ݩΠϯϑϥΤϯδχΞ• ຊOSSྭɾใॲཧֶձ ࢁԼه೦ݚڀ2দຊ྄հ / ·ͭͱΓʔ / @matsumotory
ԬͰओʹ׆ಈ͍ͯ͠ΔϖύϘݚڀॴͷऔΓΈͷհ
• ւࢁͱඒຯ͍͠͝Μʹғ·Εͳ͕Βͬ͘͡Γݚڀ։ൃ• ओʹࡋྔ࿑ಇɾϦϞʔτϫʔΫɾ࣌ؒࣗ༝• ձࣾͷٕज़త՝ʹج͍ͯҰൠԽͨ͠ख๏ΛఏҊɾධՁ• ੵۃతʹจࣥචɾࠪಡݚڀձࢀՃɾӡӦ• དྷࠃࡍԽʹ͚ͯੵۃతʹ׆ಈΛ։࢝͢Δ༧ఆ4؆୯ʹϖύϘݚڀॴͷಇ͖ํͱਐḿ
1. ͳΊΒ͔ͳγεςϜ2. WebαʔϏεج൫ٕज़ͷݚڀͱ3. ڞ༗ϗεςΟϯάαʔϏεͷηΩϡϦςΟͱੑೳͷݚڀ4. ৗ࣌HTTPSͷ࣌ͷେنূ໌ॻཧͷݚڀ5. ·ͱΊ5࣍
1.ͳΊΒ͔ͳγεςϜ
• ίϯϐϡʔλΠϯλʔωοτʹؔ͢Δٕज़ൃల͕ͨ͠…• ࠓৗతʹ৮ΕΔγεςϜ༷ʑͳোนʹຬͪᷓΕ͍ͯΔ• োน(ΰπΰπ)ͷऔΓআ͔ΕͨະདྷͷγεςϜΛ࣮ݱ͍ͨ͠• ͳΊΒ͔ͳγεςϜ7ίϯϐϡʔλͷൃలͱোน
1. γεςϜʹͱͬͯͷϢʔβɺγεςϜΛߏ͢Δαʔόͷཁૉ͕ɺͲͷΑ͏ͳΧςΰϦʹଐ͢Δ͔ɺ͍͔ͳΔಛΛ͔࣋ͭΛɺਫ਼៛ʹೝࣝ͢Δ2. ͦͷࡍɺϢʔβγεςϜཧऀͱ͍ͬͨਓؒʹ࿑ۤΛڧ͍ΔΑ͏ͳ໌ࣔతͳૢ࡞Λ՝͞ͳ͍3. 1.͓Αͼ2.ͰಘͨΑΓਫ਼៛ͳΧςΰϦݸผͷಛɺ͋Δ͍ͦΕΒͷؒͷؔੑʹج͖ͮɺͦͷ࣌ʑͷঢ়گʹԠͯ͡࠷దͳαʔϏεΛఏڙ͢ΔͳΊΒ͔ͳγεςϜΛ࣮ݱ͢ΔWebαʔϏεج൫ٕज़ͷݚڀ8ͳΊΒ͔ͳγεςϜҎԼͷཁ݅Λຬͨ͢
2.WebαʔϏεج൫ٕज़ͷݚڀͱ
• ਓؒͷϓϩμΫτͷൃΛࢧ͑ΒΕΔج൫͕ඞཁ• ͜Ε·Ͱ֤छྖҬΛਓखͰΧόʔ͢Δ͜ͱ͕ଟ͔ͬͨ• ੑೳɾηΩϡϦςΟɾϦιʔεཧɾӡ༻ٕज़ͳͲ• ج൫ΛػցͰࢧ͑ࣗಈԽ͠αʔϏεͷݶքΛ͑Δ• ਓؒͷൃͷݶքͱج൫ͷݶքͱͷউෛͷੈքͱ͍͑Δ10WebαʔϏεج൫ٕज़ͷݶքαʔϏεͷݶք
ਓؒͷൃ vs ج൫ٕज़(ػց)ͱࢲͷݚڀ11ج൫ٕज़ ػցϓϩμΫτ ਓؒͷൃਓͷମྗɾਫ਼ਆͷݶքਓͷମྗɾਫ਼ਆͷݶքਓྗͰࢧ͑ଓ͚ΔਓྗͰ͛ଓ͚ΔਓྗͰࢧ͑ଓ͚ΔϓϩμΫτͷݶքͷ෯ج൫ٕज़ ػցϓϩμΫτ ਓؒͷൃػցͰࢧ͑ଓ͚ΔϓϩμΫτͷݶքͷ෯• ॎ࣠ϓϩμΫτ։ൃɾӡ༻ͷίετͱݴ͑Δ• ج൫ٕज़ͷݶքΛ͑Δ͘ਓͰΧόʔ͍ͯ͠Δ• ॎ࣠ͷίετΛ͘ɺԣ࣠ͷݶքͷ෯Λ͛ΔͨΊͷݚڀ։ൃΛߦ͍ͬͯΔদຊͷݚڀ
• WebαʔϏεར༻ऀͷϢʔβʔମײ(User Sensation)ͷվળ• WebαʔϏεར༻ऀͷແҙࣝԼʹ͓͚Δշదͳײ֮ͷఏڙ• ͨΓલʹී௨ʹҧײͳ͍͘ଓ͚ΒΕΔ͜ͱͷշద͞• WebαʔϏεఏڙଆͷٕज़ऀମײ(Engineer Sensation)ͷվળ• ͨΓલʹγεςϜͷ҆ఆੑΛอͪɺਓͷڧ੍հೖΛݮ12ࢲͷݚڀςʔϚ
1. ηΩϡϦςΟͱੑೳͷཱ྆ʹؔ͢Δݚڀ2. HTTPSԽʹ͚ͨӡ༻ٕज़ͱϦιʔε༻ྔվળͷݚڀ13ຊεϥΠυͰ2ͭͷݚڀΛհ
3.ڞ༗ϗεςΟϯάαʔϏεͷηΩϡϦςΟͱੑೳͷݚڀ
1. ηΩϡϦςΟͱੑೳͷཱ྆ʹؔ͢Δݚڀ2. ηΩϡϦςΟͷͨΊͷӡ༻ٕज़ͱੑೳվળͷݚڀ15ຊεϥΠυͰ2ͭͷݚڀΛհদຊ྄հ, Ԭ෦णஉ,εϨου୯ҐͰݖݶΛߦ͏WebαʔόͷΞΫηε੍ޚΞʔΩςΫνϟ,ిࢠใ௨৴ֶձจࢽ Vol.J96-B, No.10, pp.1122-1130, Oct 2013.
• Ձ֨ԽͷͨΊ୯ҰͷαʔόʹߴूੵʹϗετΛऩ༰• Ϣʔβ͕ར༻͢Δϗετ୯ҐͰηΩϡϦςΟΛ୲อ• HTTPϦΫΤετ࣌ʹϓϩηε୯ҐͰݖݶ• ϦΫΤετຖʹϓϩηεͷੜɾഁغ͕ඞཁͰੑೳ• ͍͔ʹϦΫΤετ୯ҐͷݖݶͷίετΛ͘͢Δ͔16ڞ༗ϗεςΟϯάαʔϏεͷηΩϡϦςΟ
• ݖݶΛLinuxεϨουੜɾഁغͷίετͰ࣮ݱ• εϨου୯ҐͰݖݶΛ੍ޚ͢ΔͷͰ࣮ෳࡶ• εϨουͷੜഁغϓϩηεͱൺͯेഒίετ※117εϨου୯ҐͰݖݶ※1 Gu Yan, Bu-Sung Lee, Wentong Cai, "Evaluation of Java thread performance on two different multithreadedkernels." ACM SIGOPS Operating Systems Review, Vol. 33, No. 1, pp. 34-46, 1999.
ຊ൪ڥͰ࣮ӡ༻্ͷධՁ
ҰͷΞΫηε1000ສͷαʔόʹಋೖ19˙TZTUFN˙VTFS˙JEMFैདྷख๏ ఏҊख๏࣮ࡍʹ͜ͷఔͷαʔό͕ඦଘࡏ͢Δ
• ฐࣾϗεςΟϯάαʔϏεʢϨϯλϧαʔόʣʹಋೖࡁΈ• ϩϦϙοϓʂͰ2015͔Βݚڀॴͷٕज़Λੵۃతʹಋೖத• ϔςϜϧ2016͔Βಋೖޙͳ͘Քಇத20ಋೖޙͳ͘Քಇத
ੑೳ͕ߴ͘ͳΓࣗવͱϢʔβʔʮମײʯ্͕
αʔόෛՙཧίετ͕Լ͕Γࣗવͱٕज़ऀʮମײʯ্
3.ৗ࣌HTTPSͷ࣌ͷূ໌ॻཧͷݚڀ
1. ηΩϡϦςΟͱੑೳͷཱ྆ʹؔ͢Δݚڀ2. ηΩϡϦςΟͷͨΊͷӡ༻ٕज़ͱੑೳվળͷݚڀ24ຊεϥΠυͰ2ͭͷݚڀΛհ• দຊ ྄հ, Ԭ෦ णஉ, mod_mruby: εΫϦϓτݴޠͰߴ͔ͭলϝϞϦʹ֦ுՄೳͳWebαʔόͷػೳ֦ுࢧԉػߏ, ใॲཧֶձจࢽɼVol.55, No.11, pp.2451-2460, Nov 2014.• দຊ ྄հ, ฏݪ ਖ਼༟, ࡾ ༔հ, ྗ ݈࣍, ܀ྛ ݈ଠ, ߴूੵϚϧνςφϯτWebαʔόͷେنূ໌ॻཧͱ࣮ӡ༻্ͷධՁ, ใॲཧֶձݚڀใࠂΠϯλʔωοτͱӡ༻ٕज़ʢIOTʣ,2017-IOT-39,Vol.14, pp.1-8, 20179݄.
• υϝΠϯϗετΛେྔʹ࣋ͭαʔϏεରԠࠔ• ݱࡏͷαʔόιϑτΣΞେྔͷূ໌ॻͷѻ͍ʹෆ͖• ͜ͷ··ͰECϗεςΟϯάͷHTTPSಋೖ͕ۃΊͯࠔ• Ͱେྔূ໌ॻʹରԠͨ͠ιϑτΣΞΛ࡞Γ·͠ΐ͏25ৗ࣌HTTPSԽʹରԠ͍ͯ͘͠ඞཁ༗Γ
• αʔόϓϩηεىಈ࣌ʹશͯͷূ໌ॻΛಡΈࠐΉ• ىಈ͕࣌ؒ͘ઃఆө࣌ͷӡ༻͕ࠔ• ৽͍͠ϗετͱূ໌ॻՃ࣌ʹϓϩηε࠶ىಈ͕ඞཁ• αʔόϓϩηεͷϝϞϦ༻ྔଟ͍26ैདྷख๏ͷ՝
• αʔόϓϩηεىಈ࣌ʹূ໌ॻಡΈࠐ·ͳ͍• αʔόϓϩηεͷ࠶ىಈ/࠶ಡΈࠐΈ࣌ؒΛߴԽ• TLSϋϯυγΣΠΫ࣌ʹඞཁͳূ໌ॻͱઃఆΛಈతʹಡΈࠐΈ• ߴͳϓϩηε࠶ಡΈࠐΈʹΑΔϝϞϦղ์Մೳ• ূ໌ॻϗετͷ৽نՃઃఆʹ࠶ىಈ͕ෆཁ27ఏҊख๏
• 10ສϗετͷ4096bitsͷ伴ͷൿີ伴ͱαʔόূ໌ॻΛnginxόʔδϣϯ1.11.13ͰಡΈࠐΈ• ैདྷख๏࠶ಡΈࠐΈॲཧͰαʔϏεఀࢭʹܨ͕Δ28ैདྷख๏ͱఏҊख๏ͷىಈ࣌ؒͷ࣮ݧ߲ ैདྷख๏ ఏҊख๏ϓϩηεىಈͷ࣮࣌ؒ ඵ ϓϩηεىಈͷϢʔβ$16༻࣌ؒ ඵ ϓϩηεىಈͷγεςϜ$16༻࣌ؒ ඵ
10ສϗετऩ༰࣌ͷ੩తϑΝΠϧͷੑೳൺֱ29ेCZUFTͷܰྔͳ)5.-ϑΝΠϧͷϦΫΤετ3FRVFTUTFDಉ࣌ଓ ैདྷख๏ ఏҊख๏
• ैདྷख๏ͱఏҊख๏ͷ1ϲ݄ؒͷϦιʔε༻ྔΛൺֱ• ैདྷख๏20173݄͔Β4݄ɺఏҊख๏7݄͔Β8݄• ෳͷಉҰϋʔυΣΞ্ʹ4݄ΛػʹϦϓϨʔε• ैདྷख๏Apache2.4ɺఏҊख๏nginx1.11Ͱ࣮• ূ໌ॻͷ૿ՃϦΫΤετॲཧͷมԽͱൺֱ͠ͳ͕Βߟ31ແྉূ໌ॻαʔϏεΛػʹ࣮ӡ༻্ͷධՁ
ैདྷख๏ͰऔΓΜͰ͍ͨΒͲΕ͙Β͍େม͔ͩͬͨΛ͖ͪΜͱධՁ
͏·͍͍ͬͯ͘Δ࣌ͦͦ͜ͷ༗ޮੑΛఆྔతʹ໌Β͔ʹ͢Δ
1ϲ݄ؒͷূ໌ॻͷભҠ3405000100001500020000250001 6 11 16 21 26 31The number of cer-ficatesdayThe number of cer-ficate in a monthdynamic load preloadΘ͔Γʹ͍͕͘Ұϲ݄Ͱ͔Βͱূ໌ॻఔ૿͍͑ͯΔূ໌ॻϦϓϨʔεલͷഒ͔Βഒ
1ϲ݄ؒͷCPU༻ͷભҠ350.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༻ඍ͕ࠩͩݮ
1ϲ݄ؒͷϝϞϦ༻ͷભҠ360100020003000400050006000700080001 6 11 16 21 26 31Memory usage(MBytes)dayMemory usage in a mouthdycamic load preloadূ໌ॻ͔ΒഒʹؔΘΒͣϝϞϦ༻ݮఏҊख๏ສҎ্૿Ճ͍ͯ͠Δূ໌ॻʹ΄΅ґଘ͍ͯ͠ͳ͍ূ໌ॻ૿Ճʹ͍ϝϞϦ༻ྔαʔόશମͰ(#ZUFTఔ૿Ճ
• ैདྷख๏20ສূ໌ॻΛॲཧ͢Δͷʹ500Gbytesඞཁ• 32GBytesͷαʔό͕15Ҏ্ඞཁ• ఏҊख๏20ສূ໌ॻͰ1ͰॲཧՄೳͷݟࠐΈ• 1ສূ໌ॻ૿Ճͯ͠ϝϞϦ༻ྔ3GBytesͰ҆ఆ• ఏҊख๏ʹΑΓඞཁϋʔυΣΞίετΛେ෯ʹݮՄೳ37ϝϞϦ༻ྔ͔ΒඞཁͳϋʔυΣΞΛݟੵΓ
Β͵ؒʹϋʔυΣΞӡ༻ίετ͕ݮ͞Εٕͯज़ऀʮମײʯ্͕
5.·ͱΊ
ਓؒͷൃ vs ج൫ٕज़(ػց)ͱࢲͷݚڀ40ج൫ٕज़ ػցϓϩμΫτ ਓؒͷൃਓͷମྗɾਫ਼ਆͷݶքਓͷମྗɾਫ਼ਆͷݶքਓྗͰࢧ͑ଓ͚ΔਓྗͰ͛ଓ͚ΔਓྗͰࢧ͑ଓ͚ΔϓϩμΫτͷݶքͷ෯ج൫ٕज़ ػցϓϩμΫτ ਓؒͷൃػցͰࢧ͑ଓ͚ΔϓϩμΫτͷݶքͷ෯• ॎ࣠ϓϩμΫτ։ൃɾӡ༻ͷίετͱݴ͑Δ• ج൫ٕज़ͷݶքΛ͑Δ͘ਓͰΧόʔ͍ͯ͠Δ• ॎ࣠ͷίετΛ͘ɺԣ࣠ͷݶքͷ෯Λ͛ΔͨΊͷݚڀ։ൃΛߦ͍ͬͯΔদຊͷݚڀ
ਓؒͷൃ vs ج൫ٕज़(ػց)ͱࢲͷݚڀ41ج൫ٕज़ ػցϓϩμΫτ ਓؒͷൃਓͷମྗɾਫ਼ਆͷݶքਓͷମྗɾਫ਼ਆͷݶքਓྗͰࢧ͑ଓ͚ΔਓྗͰ͛ଓ͚ΔਓྗͰࢧ͑ଓ͚ΔϓϩμΫτͷݶքͷ෯ج൫ٕज़ ػցϓϩμΫτ ਓؒͷൃػցͰࢧ͑ଓ͚ΔϓϩμΫτͷݶքͷ෯• ॎ࣠ϓϩμΫτ։ൃɾӡ༻ͷίετͱݴ͑Δ• ج൫ٕज़ͷݶքΛ͑Δ͘ਓͰΧόʔ͍ͯ͠Δ• ॎ࣠ͷίετΛ͘ɺԣ࣠ͷݶքͷ෯Λ͛ΔͨΊͷݚڀ։ൃΛߦ͍ͬͯΔদຊͷݚڀ࣮ӡ༻্ͷධՁΛେʹ͔ͦ͜͠Β৽نੑɾ༗ޮੑɾ৴པੑΛࣔ͢
• WebαʔϏεར༻ऀͷϢʔβʔମײ(User Sensation)ͷվળ• WebαʔϏεఏڙଆͷٕज़ऀମײ(Engineer Sensation)ͷվળ• ݚڀ։ൃΛ௨ͯ྆͠ํͷମײΛվળ͍ͯ͘͠• ج൫ٕज़ͷվળΛ௨ͯ͠ਓ͕ࢧ͑Δ͖ྖҬΛΑΓߴʹ• WebαʔϏεج൫ͷݶքΛ͑ɺϓϩμΫτͷݶքΛ͑Δ42WebαʔϏεج൫ٕज़ͷݚڀհ
ݚڀһɺੵۃతʹืूதʂhttp://rand.pepabo.com/