ソフトウェアエンジニアリングシンポジウム 2018
IPSJ/SIGSE Software Engineering Symposium (SES2018)

Madoop: MapReduce ͱ WebAssembly Λ༻͍ͨWeb ϒϥ΢βϕʔε෼ࢄॲཧϑϨʔϜϫʔΫদඌ ༟޾1,a)㤟ຊ ਅ༎1,b)ೇຊ ਅೋ1,c)֓ཁɿࣗ༝ࢀՃ‫ܕ‬ͷ෼ࢄॲཧύϥμΠϜͰ͋Δैདྷͷ VC: Volunteer Computing Λ Web ϒϥ΢β্ʹ֦
ுͨ͠ɼBBVC: Browser-Based Volunteer Computing ͱ͍͏ΞΠσΟΞ͕ొ৔͍ͯ͠ΔɽBBVC Ͱ͸ɼίʔυΛຒΊࠐΜͩϖʔδʹϒϥ΢β͔ΒΞΫηε͢Δ͚ͩͰࢀՃՄೳͱ͍͏खܰ͞ʹՃ͑ɼੈքதͷΠϯλʔωοτϢʔβ͕ର৅ʹͳΔͱ͍͏ੌ·͍͡જࡏతॲཧೳྗ͕ଘࡏ͢Δɽ͔͠͠ͳ͕ΒɼBBVC ʹ͸‫͔ͭز‬ͷ՝୊͕ଘࡏ͢Δɽ՝୊ͷҰͭ໨ʹ෼ࢄॲཧϓϩάϥϜͷ։ൃ༰қੑͷ௿͕͞‫͛ڍ‬ΒΕΔɽ෼ࢄॲཧͷ࣮‫ʹݱ‬͸ɼೖྗσʔλͷద੾ͳ഑৴΍ΫϥΠΞϯτؒͷಉ‫༷Ͳͳظ‬ʑͳࣄฑΛߟྀ͠ͳ͚Ε͹ͳΒͣɼ։ൃ༰қੑΛԼ͛ΔҰҼͱͳ͍ͬͯΔɽ՝୊ͷೋͭ໨ʹ࣮ߦ࣌ੑೳͷ௿͕͞‫͛ڍ‬ΒΕΔɽBBVC Ͱ͸ͦͷಛੑ্ JavaScript ͰॲཧΛߦ͏͕ɼJavaScript ͸࣮ߦ࣌ʹιʔείʔυղੳΛඞཁͱ͢ΔͨΊɼίϯύΠϥ‫ͱޠݴܕ‬ൺ΂ͯੑೳ͕௿͘਺஋‫ʹࢉܭ‬͸޲͍͍ͯͳ͍ɽຊߘͰ͸ɼ͜ΕΒͷ՝୊ͷղܾΛ໨తͱͨ͠৽
͍͠ BBVC ϑϨʔϜϫʔΫ Madoop ΛఏҊ͢ΔɽMadoop Ͱ͸ MapReduce ͱ WebAssembly Λ༻͍Δ͜
ͱͰɼ։ൃ༰қੑͷ֬อͱ࣮ߦ࣌ੑೳͷվળΛ࣮‫͢ݱ‬Δɽ·ͨධՁ࣮‫ͯ͠ͱݧ‬ɼఏҊख๏Λ༻͍࣮ͯࡍʹ෼ࢄॲཧΛ࣮ߦ͠ɼ࣮ߦ࣌ؒͷ௕͞Λ‫ܭ‬ଌɾൺֱ͢Δ͜ͱͰɼैདྷख๏͔Βͷੑೳͷվળ౓߹͍Λ͔֬Ί
Δɽ࣮‫ݧ‬ͷ݁Ռɼ࠷΋ੑೳ͕޲্࣮ͨ͠‫ݧ‬ର৅Ͱ͸ɼ࣮ߦ࣌ؒͷ௕͕͞ 60 %Ҏ্վળͨ͠ɽ
ΩʔϫʔυɿVolunteer computing, web browser, MapReduce, WebAssembly, JavaScript

1. ͸͡Ίʹ
ٕज़ͷൃలʹ൐͍ɼ‫ݸ‬ਓ͕ॴ༗͢Δ‫ػࢉܭ‬ͷॲཧੑೳ͸ඈ༂తʹ޲্ͨ͠ɽ·ͨɼੈքதͰՔಇ͍ͯ͠Δ‫ػࢉܭ‬ͷϧ͞Ε͍ͯΔ Web ϒϥ΢βͰಛఆͷ URL ʹΞΫηε͢Δ
͚ͩͰಈ࡞ͤ͞Δ͜ͱ͕Ͱ͖ΔɽैͬͯɼBBVC ͸ੈքதͷωοταʔϑΟϯϢʔβ͕ର৅Ͱ͋Γɼͦ͜ʹ͸ലେͳજࡏతॲཧೳྗ͕ଘࡏ͢Δ [11]ɽ

਺΋ඇৗʹଟ͘ɼ߇͑Ίʹ‫ੵݟ‬΋ͬͨ৔߹Ͱ΋‫ ࡏݱ‬1 ԯ୆͔͠͠ͳ͕ΒɼBBVC ʹ͸‫͔ͭز‬ͷ՝୊͕ଘࡏ͢ΔɽҰҎ্ͷ‫͞༻࢖͕ػࢉܭ‬Ε͍ͯΔ [5]ɽੈքதͰՔಇ͍ͯ͠

ͭ໨ͷ՝୊ͱͯ͠ɼ෼ࢄॲཧϓϩάϥϜͦͷ΋ͷͷ։ൃ༰Δશ‫ػࢉܭ‬ΛଋͶͨ૯ॲཧೳྗ͸ੌ·͍͕͡ɼҰൠతͳ‫ܭ‬қੑͷ௿͕͞‫͛ڍ‬ΒΕΔɽҰൠʹ෼ࢄॲཧΛߦ͏ͨΊʹ͸ɼࢉ‫ػ‬͸ͦͷ‫ى‬ಈ࣌ؒͷଟ͕͘ΞΠυϧঢ়ଶͰ͋Γɼͦͷ༨ೖྗσʔλͷద੾ͳ഑৴΍ɼΫϥΠΞϯτϊʔυؒͷಉ‫ظ‬ɼ৒ॲཧೳྗͷຆͲ͕ແବʹͳ͍ͬͯΔ [5]ɽ‫݁ࢉܭ‬Ռͷ౷߹ͳͲΛߦ͏࢓૊Έ͕ඞཁͱͳΔ [5], [11]ɽ

Պֶٕज़ͷ෼໺ʹ͓͍ͯɼ͜ͷ༨৒ॲཧೳྗʹண໨ͨ͠։ൃऀ͸࣮ࡍʹॲཧର৅ͱͳΔϓϩάϥϜʹՃ͑ͯ͜Ε෼ࢄॲཧख๏͕ఏҊ͞Ε͍ͯΔɽ͜ΕΛ Volunteer Com-Βͷ࢓૊ΈΛ༻ҙ͢Δඞཁ͕͋Γɼͦͷ࣮૷͸։ൃऀʹ

putingʢҎԼɼVCʣͱ͍͏ɽۙ೥ɼ͜ͷ VC Λ Web ϒϥ΢ͱͬͯඇৗʹେ͖ͳෛ୲ͱͳΔɽೋͭ໨ͷ՝୊ʹɼॲཧβ্Ͱ࣮ߦ͢ΔΑ͏ʹ֦ுͨ͠ Browser-Based Volunteer‫͋Ͱޠݴ‬Δ JavaScript ͷ࣮ߦ࣌ੑೳͷ௿͕͞‫͛ڍ‬ΒΕΔɽ

ComputingʢҎԼɼBBVCʣͱ͍͏ख๏΋ొ৔͍ͯ͠Δɽ

JavaScript ͸࣮ߦ࣌ʹಈతͳιʔείʔυͷղੳΛඞཁͱ

ैདྷɼVC ʹࢀՃ͢ΔͨΊʹ͸ಛผͳΫϥΠΞϯτΞϓϦ

͢ΔͨΊɼ͜Ε͕ΦʔόϔουͱͳΓίϯύΠϧ‫ͱޠݴܕ‬έʔγϣϯͷΠϯετʔϧ͕ඞཁෆՄܽͰ͋ͬͨɽҰํɼൺ΂ͯύϑΥʔϚϯεʹྼΔɽͱΓΘ͚ɼJavaScript ͸਺BBVC ͸ϢʔβʹΫϥΠΞϯτΞϓϦέʔγϣϯͷΠϯε

஋‫ʹࢉܭ‬͸޲͍͍ͯͳ͍͜ͱ͕ࢦఠ͞Ε͍ͯΔ [9]ɽτʔϧΛཁ‫ͣͤٻ‬ɼଟ͘ͷίϯϐϡʔλʹ༧ΊΠϯετʔ
1
a)
b)
c)

େࡕେֶ େֶӃ৘ใՊֶ‫ڀݚ‬Պh-matsuo@ist.osaka-u.ac.jp
shinsuke@ist.osaka-u.ac.jp
kusumoto@ist.osaka-u.ac.jp

c 2018 Information Processing Society of Japan⃝ຊߘͰ͸ɼ͜ΕΒͷ՝୊Λղܾ͢ΔͨΊͷ৽͍͠ BBVCϑϨʔϜϫʔΫ Madoop ΛఏҊ͢ΔɽMadoop Ͱ͸ɼҰͭ໨ͷ՝୊ͷղܾͷͨΊʹ MapReduce Λɼೋͭ໨ͷ՝୊ͷղܾͷͨΊʹ WebAssembly ΛͦΕͧΕಋೖ͢ΔɽMapRe-

221ソフトウェアエンジニアリングシンポジウム 2018
IPSJ/SIGSE Software Engineering Symposium (SES2018)

duce [3] ͸෼ࢄॲཧύϥμΠϜͷҰͭͰ͋Γɼ͜ͷύϥμ

VC ʹࢀՃ͢ΔͨΊʹ͸ɼϢʔβ͸ઐ༻ͷΫϥΠΞϯτΞ

ΠϜʹԊͬͯϓϩάϥϜ։ൃΛߦ͏͜ͱͰɼ։ൃऀͷෛ୲ϓϦέʔγϣϯΛΠϯετʔϧ͢Δඞཁ͕͋ΓɼϢʔβʹ͕େ͖͘࡟‫͞ݮ‬ΕΔɽWebAssembly [16] ͸ Web ϒϥ΢βର͢Δϋʔυϧͱͳ͍ͬͯΔͱߟ͑ΒΕΔɽ·ͨɼෳ਺ͷ্Ͱ࣮ߦՄೳͳόΠφϦϑΥʔϚοτͰ͋ΓɼJavaScriptΦϖϨʔςΟϯάγεςϜͷ୆಄΍λϒϨοτɾεϚʔτ͕ඞཁͱ࣮ͨ͠ߦ࣌ղੳʹΑΔΦʔόϔου͕େ͖ܰ͘‫ݮ‬ϑΥϯͷී‫Ͳͳٴ‬ɼϢʔβͷ‫ڥ؀ࢉܭ‬͸·͢·͢ଟ༷Խ͠

͞ΕΔͨΊɼύϑΥʔϚϯεͷ޲্͕‫ظ‬଴Ͱ͖Δɽ

͍ͯΔɽVC Ͱ͸֤Ϣʔβͷ‫߹ʹڥ؀‬ΘͤͨΫϥΠΞϯτ

ධՁ࣮‫ͯ͠ͱݧ‬ɼMadoop ͕ैདྷख๏ͱൺ΂ͯͲͷఔ౓ύϑΥʔϚϯε͕޲্͍ͯ͠Δͷ͔Λɼ‫ྔࢉܭ‬ͷେ͖͕͞ΞϓϦέʔγϣϯΛ։ൃ͢Δඞཁ͕͋Γɼ։ൃऀʹର͢Δ
ϋʔυϧͱͳ͍ͬͯΔͱߟ͑ΒΕΔ [18]ɽ

ҟͳΔ 2 ͭͷ࣮‫ݧ‬ର৅Λ༻͍ͯɼͦΕͧΕͷ࣮ߦ࣌ؒͷ௕͞Λ‫ܭ‬ଌ͢Δ͜ͱͰ͔֬Ίͨɽ࣮‫ݧ‬ͷ݁Ռɼ‫͕ྔࢉܭ‬ඇৗ

2.2 BBVC: Browser-Based Volunteer Computingʹେ͖͍࣮‫ݧ‬ର৅Ͱ͸ɼMadoop Λ༻͍ͨఏҊख๏͸ैདྷ

VC Λ Web ϒϥ΢β্ʹ֦ுͨ͠ͷ͕ BBVC Ͱ͋Δɽख๏ΑΓ΋໿ 50 ʙ 64 %Ҏ্ύϑΥʔϚϯε͕޲্ͨ͠ɽ

VC ͕ઐ༻ͷΫϥΠΞϯτΞϓϦέʔγϣϯ্Ͱಈ࡞ͯ͠

Ұํɼ‫͕ྔࢉܭ‬খ͍࣮͞‫ݧ‬ର৅Ͱ͸ɼఏҊख๏͕ैདྷख๏

͍ͨͷʹରͯ͠ɼBBVC Ͱ͸Ϣʔβ͕ Web ϒϥ΢βͰಛΑΓ΋໿ 4 ʙ 8 %஗͘ͳͬͨɽ͜ͷ࣮‫݁ݧ‬Ռ͔ΒɼఏҊखఆͷ URL ʹΞΫηε͍ͯ͠Δؒʹɼͦͷ Web ϒϥ΢β্๏͸‫͕ྔࢉܭ‬େ͖ͳ෼ࢄॲཧΛߦ͏ࡍʹඇৗʹ༗ޮͰ͋Δ

Ͱॲཧ͕ߦΘΕΔɽ

͜ͱ͕෼͔ͬͨɽ·ͨɼMadoop ͸ΦʔϓϯιʔειϑτҰൠతʹɼϢʔβ͕ར༻͢Δ‫ʹػࢉܭ‬͸༧Ί Web ϒϥ΢΢ΣΞͱͯ͠ެ։͓ͯ͠Γɼୈࡾऀ͕ࣗ༝ʹར༻Ͱ͖Δɽβ͕Πϯετʔϧ͞Ε͍ͯΔ͜ͱ͕ଟ͍ͨΊɼBBVC ʹࢀ‫ ࡏݱ‬BBVC ͷॲཧ‫ެͯ͠ͱܥ‬։͞Ε͍ͯΔιϑτ΢ΣΞ

Ճ͢ΔͨΊʹಛผͳΞϓϦέʔγϣϯΛΠϯετʔϧ͢Δ͸ຆͲଘࡏ͓ͯ͠ΒͣɼBBVC ϓϩάϥϜΛ։ൃ͍ͨ͠։

ඞཁ͸ͳ͍ɽΑͬͯɼBBVC ͸ੈքதͷωοταʔϑΟϯൃऀʹͱͬͯඇৗʹ༗༻Ͱ͋Δͱߟ͑ΔɽϢʔβ͕ର৅ͱͳΓɼͦͷજࡏతͳ‫ࢉܭ‬ೳྗ͸ଌΓ஌Εͳ

2. ४උ
2.1 VC: Volunteer Computing͍ɽྫ͑͹ɼYouTube ʹΞΫηε͍ͯ͠Δ֤Ϣʔβͷ Webϒϥ΢β্Ͱɼ‫ػࢉܭ‬ͷ 25 %ͷॲཧೳྗΛ BBVC ʹར༻Ͱ͖ΔͱԾఆͨ͠৔߹ɼͦͷ૯ॲཧೳྗ͸ 46.4 PFLOPS ʹ

VC ͸෼ࢄॲཧΛߦ͏ͨΊͷख๏ͷҰͭͰ͋Δɽ‫޿ࡏݱ‬΋্Δͱࢼࢉ͞Ε͍ͯΔ [11]ɽ2017 ೥ 4 ݄࣌఺Ͱͷੈք࠷͘༻͍ΒΕ͍ͯΔ෼ࢄॲཧγεςϜͰ͸ɼಉ͡εϖοΫͷ

଎ͷεʔύʔίϯϐϡʔλͰ͋Δ Sunway TaihuLight ͷॲ‫ػࢉܭ‬Λෳ਺୆༻ҙ͠ɼͦΕΒΛ LAN Ͱ૬‫઀ޓ‬ଓ্ͨ͠ཧೳྗ͕ 93 PFLOPS Ͱ͋Δ͜ͱΛߟྀ͢ΔͱɼYouTube

ͰΫϥελΛ૊Ήͷ͕ҰൠతͰ͋Δɽ͜Εʹରͯ͠ɼVC

΁ͷ๚໰ऀΛଋͶΔ͚ͩͰ΋εʔύʔίϯϐϡʔλͷ໿൒Ͱ͸‫ػࢉܭ‬΍ͦΕΒͷߏ੒͕େ͖͘ҟͳΔɽVC ʹ͓͚Δ

෼ͷॲཧೳྗʹ஋͢Δͱ‫͑ݴ‬Δ [11]ɽ

‫ػࢉܭ‬ʢϊʔυʣ͸Πϯλʔωοτʹ઀ଓ͞Εͨෆಛఆଟ

·ͨɼ։ൃऀ͸ΫϥΠΞϯτΞϓϦέʔγϣϯΛ Web਺ͷ༷ʑͳ‫͋Ͱػࢉܭ‬ΔɽҰൠతͳ‫ػࢉܭ‬͸ͦͷ‫ى‬ಈ࣌ؒΞϓϦέʔγϣϯͱͯ͠։ൃ͢Ε͹Α͘ɼ‫ػࢉܭ‬ͷΦϖͷଟ͕͘ΞΠυϧঢ়ଶͰ͋Γɼ͜ͷࡍͷ༨৒‫ࢉܭ‬ೳྗΛϨʔςΟϯάγεςϜ΍ͦͷଞͷΞʔΩςΫνϟͷଟ͘͸ϢʔβʢϘϥϯςΟΞʣ͔Βఏ‫ͯ͠ڙ‬΋Β͏͜ͱͰϦιʔWeb ϒϥ΢β͕Ӆ΃͍͢ΔͨΊɼVC ʹൺ΂Δͱଟ༷Խ͢

εΛ֬อ͢Δɽ·ͨɼVC Ͱ͸֤ϊʔυ͕෺ཧతʹ཭ΕͯΔϢʔβͷ‫ʹڥ؀ࢉܭ‬ରԠ͢Δίετ΋௿͘ͳΔɽ͜ͷ͓͜ΓɼLAN Ͱ͸ͳ͘Πϯλʔωοτӽ͠ʹ૬‫઀ޓ‬ଓͯ͠

ͱ͔ΒɼBBVC Ͱ͸લઅͰ‫ͨ͛ڍ‬Α͏ͳ VC ͷ՝୊ΛղܾγεςϜΛߏ੒͢Δɽ

Ͱ͖Δͱߟ͑ΒΕΔɽ

VC ͷΞΠσΟΞ͸‫͔͘ݹ‬Βଘࡏ͓ͯ͠Γɼ࣮ࡍʹ VC
Λେ‫ن‬໛‫ͨ͠༻׆‬༗໊ͳྫͱͯ͠ SETI@home [13] ͕‫ڍ‬

2.3 BBVC ͷ՝୊͛ΒΕΔɽVC Λ༻͍ͯӉ஦͔Βඈདྷͨ͠ి೾Λղੳ͠ɼલઅͰड़΂ͨΑ͏ʹɼBBVC ͸ VC ͷ՝୊ͷ͍͔ͭ͘Λ஍‫֎ٿ‬஌తੜ໋ମ͕ൃ৴ͨ͠৴߸Λ‫ݕ‬ग़͢ΔࢼΈͰ͋Δɽ

ղܾͨ͠ҰํͰɼҎԼʹ‫͛ڍ‬Δ BBVC ‫ݻ‬༗ͷ՝୊΋ଘࡏ

SETI@home Ͱ͸͜Ε·Ͱʹ 170 ສਓҎ্͕‫ࢀʹࢉܭ‬Ճ͢͠Δɽ

͓ͯΓɼ2018 ೥ 8 ݄‫Ͱࡏݱ‬΋ৗ࣌ 9 ສਓҎ্͕ࢀՃ͍ͯ͠

2.3.1 P1 : ෼ࢄॲཧϓϩάϥϜͷ։ൃ༰қੑͷ௿͞

Δ [14]ɽ͜Ε͸ VC ͕਺஋‫ࢉܭ‬ϓϥοτϑΥʔϜͱͯ͠༗
༻Ͱ͋Δ͜ͱΛࣔͨ͠୅දྫͰ͋Δɽ

෼ࢄॲཧΛ࣮‫͢ݱ‬ΔͨΊʹ͸ɼॲཧର৅σʔλͷద੾ͳ෼ׂɾ഑৴΍ɼΫϥΠΞϯτϊʔυؒͷಉ‫ظ‬ɼॲཧ݁Ռͷ౷

VC ͷ໰୊఺ͱͯ͠ɼϢʔβ૚͕‫ݶ‬ఆతͰ͋Δ͜ͱ͕‫ڍ‬߹ɼॲཧࣦഊ࣌ͷ෮‫ؼ‬Λ࢝Ίͱ͢Δɼ֦ுੑ΍Մ༻ੑɼ଱ো

͛ΒΕΔɽ͜͜਺೥Ͱ͸ɼVC શମͷϢʔβ਺͸૿Ճ͢Δ

֐ੑͳͲΛ֬อ͢ΔͨΊͷෳࡶͳ࢓૊ΈΛཁ͢Δ [5], [11]ɽ

͜ͱͳ͘໿ 50 ສਓΛԣഝ͍ͰਪҠ͍ͯ͠Δɽ͜Ε͸Πϯ͜ΕΒ͸෼ࢄॲཧͦͷ΋ͷΛ࣮‫͢ݱ‬ΔͨΊʹඞཁͳ࢓૊Έλʔωοτʹ઀ଓ͞ΕͨશσόΠε਺ͷ 0.02 %ΛԼճͬͯ

Ͱ͋Δ͕ɼͦͷ࣮૷͸։ൃऀʹͱͬͯඇৗʹେ͖ͳෛ୲ͱ

͓ΓɼϢʔβ਺ͷ૿Ճ͸಄ଧͪʹͳ͍ͬͯΔͱ‫͑ݴ‬Δ [11]ɽ

c 2018 Information Processing Society of Japan⃝222

ソフトウェアエンジニアリングシンポジウム 2018
IPSJ/SIGSE Software Engineering Symposium (SES2018)

ͳΔɽ෼ࢄॲཧͷ࣮૷Λࢧԉ͢Δٕज़ͱͯ͠ɼ࣍ষͰड़΂( 1 ) MapReduce ͷॲཧ‫͕ܥ‬ೖྗσʔλΛద੾ͳ୯Ґʹ෼

Δ MapReduce ύϥμΠϜ͕༗໊͕ͩɼWeb ϒϥ΢β্Ͱׂ͢Δɽߦ͏෼ࢄॲཧͷͨΊʹར༻ͨ͠ྫ͸গͳ͘ɼ·ͨϥΠϒϥ( 2 ) ֤ϊʔυ͕ೖྗσʔλͱ map ؔ਺Λड͚औΔɽmapϦͱͯ͠ར༻Ͱ͖Δ‫ެʹܗ‬։͞Ε͍ͯΔ΋ͷ΋গͳ͍ɽ݁

ؔ਺͸தؒ஋Ͱ͋Δ (key, value) ͷϖΞͷू߹Λग़ྗՌͱͯ͠ɼBBVC Λߦ͏ͨΊͷϓϩάϥϜΛ։ൃऀ͕࣮૷͢Δɽ

͢Δࡍɼ‫ݱ‬ঢ়Ͱ͸ར༻Ͱ͖Δ෼ࢄॲཧϑϨʔϜϫʔΫͷબ( 3 ) MapReduce ͷ ॲ ཧ ‫ ֤ ͕ ܥ‬key ʹ ର ͠ ͯ ɼಉ Ұ ͷ୒ࢶ͕ͳ͍ͨΊɼલड़ͨ͠Α͏ͳߟྀࣄ߲Λ೦಄ʹஔ͖ͳ

key Λ ࣋ ͭ ͢ ΂ ͯ ͷ value Λ ू Ί ɼத ؒ ஋ Ͱ ͋ Δ͕Βࣗ෼Ͱ։ൃ͠ͳ͚Ε͹ͳΒͳ͍ɽ͜Ε͸։ൃऀʹͱͬ(key, value ྻ) ͷϖΞͷू߹Λ࡞੒͢Δɽ

ͯେ͖ͳෛ୲Ͱ͋ΓɼBBVC ͷී‫ٴ‬Λ๦͛ΔཁҼͱͳͬͯ( 4 ) ֤ϊʔυ͕ (key, value ྻ) ͷϖΞͱ reduce ؔ਺Λड

͍Δͱ‫͑ݴ‬Δɽ

͚औΔɽreduce ؔ਺͸ value ྻΛू໿͠ɼͦͷ݁ՌΛ

2.3.2 P2 : JavaScript ͷ࣮ߦ࣌ੑೳͷ௿͞

ग़ྗ͢Δɽ

BBVC Ͱ͸ɼWeb ϒϥ΢β্ͰॲཧΛߦ͏ͱ͍͏ੑ࣭

։ൃऀ͕࣮ࡍʹ։ൃ͢Δͷ͸ map/reduce ؔ਺ͷΈͰ্͋ɼ͜Ε·Ͱॲཧ‫ͯ͠ͱޠݴ‬͸࣮࣭తʹ JavaScript Ҏ֎Γɼ2.3.1 ߲Ͱ‫ͨ͛ڍ‬෼ࢄॲཧʹ൐͏ॾߟྀࣄ߲͸ॲཧ‫ʹܥ‬ͷબ୒ࢶ͕ଘࡏ͠ͳ͔ͬͨɽ͔͠͠ͳ͕ΒɼJavaScript ͸೚ͤΕ͹Α͍ɽ͜ΕʹΑΓɼMapReduce ͸෼ࢄॲཧϓϩಈత‫͚෇ܕ‬ͷεΫϦϓτ‫͋Ͱޠݴ‬Γɼ੩త‫͚෇ܕ‬ͷίϯάϥϜͷ։ൃΛ༰қʹͨ͠ͱ‫͑ݴ‬Δɽ·ͨ MapReduce ͷύΠϧ‫ͱޠݴ‬ൺ΂Δͱɼ࣮ߦ࣌ղੳͷΦʔόϔουͷͨΞΠσΟΞ͸༗໊Ͱ͋ΔͨΊɼMadoop ͕͜ΕʹରԠ͢Δ

ΊʹύϑΥʔϚϯε͕ྼΔɽ2008 ೥ʹ Google Chrome ͷ͜ͱͰɼ͜Ε·Ͱ MapReduce Λ༻͍ͯ෼ࢄॲཧϓϩάϥJavaScript ΤϯδϯͰ͋Δ V8 ʹ Just-In-TimeʢJITʣίϜΛ։ൃ͖ͯͨ͠։ൃऀ͸ɼ௿ֶ͍शίετͰ Madoop ΛϯύΠϥ͕ಋೖ͞Ε͔ͯΒύϑΥʔϚϯε͸վળ͞Εͯ࢖͍࢝ΊΔ͜ͱ͕Ͱ͖Δɽ

͖͍ͯΔ΋ͷͷɼґવͱͯ͠ίϯύΠϧ‫ͱޠݴ‬ൺ΂Δͱॲ

MapReduce ͷ࣮૷ͱͯ͠͸ Apache Hadoop [1] ͕༗໊ཧ଎౓͸஗͍ͱ‫͑ݴ‬Δɽྫ͑͹ɼ਺஋‫ࢉܭ‬λεΫͷ࣮ߦ଎

͕ͩɼHadoop ͸ Java Ͱ‫ه‬ड़͞Ε͓ͯΓɼͦͷ·· Web౓Λ Java ͱ JavaScript ͱͰൺ΂ͨ৔߹ɼJavaScript ͷ଎ϒϥ΢β্Ͱಈ࡞ͤ͞Δ͜ͱ͸Ͱ͖ͳ͍ɽ·ͨ JavaScript౓͸ Java ΑΓ΋໿ 30 %஗͍͜ͱ͕࣮‫͔ݧ‬Βࢦఠ͞Ε͍ͯͰ‫ه‬ड़͞Εͨ MapReduce ࣮૷ͷྫͱͯ͠͸ MRJS [12] ΍Δ [9]ɽ

JSMapReduce [8] ͳͲ͕‫͛ڍ‬ΒΕΔ͕ɼ͍ͣΕ΋࣮૷Λެ։͓ͯ͠Βͣɼୈࡾऀ͕ར༻͢Δ͜ͱ͕Ͱ͖ͳ͍ɽMadoop

3. ఏҊख๏: Madoop͸Φʔϓϯιʔειϑτ΢ΣΞͱͯ͠ެ։͍ͯ͠ΔͨΊɼୈࡾऀ͕ར༻͢Δ͜ͱ͕Ͱ͖ɼBBVC Λߦ͍͍ͨ։ൃऀʹ

3.1 ֓ཁ
ຊߘͰ͸ɼલઅͰ‫ ͨ͛ڍ‬BBVC ͷ՝୊ͷղܾΛ໨తͱͨ͠৽͍͠ BBVC ϑϨʔϜϫʔΫ Madoop*1ΛఏҊ͢Δɽ

ͱͬͯ༗༻Ͱ͋Δͱߟ͑Δɽ

3.2.2 WebAssembly
2.3.2 ߲Ͱड़΂ͨ՝୊ P2 : JavaScript ͷ࣮ߦ࣌ੑೳͷ௿ຊఏҊख๏Ͱ͸ɼ՝୊ P1 ͷղܾʹ MapReduce Λɼ՝୊P2 ͷղܾʹ WebAssembly ΛͦΕͧΕಋೖ͢Δɽ͜ΕʹΑ͞Λղܾ͢ΔͨΊɼWebAssembly Λಋೖ͢Δɽ

WebAssembly [16] ͸ Web ϒϥ΢β্Ͱ࣮ߦՄೳͳόΠΓɼ։ൃ༰қੑΛ֬อͭͭ͠ɼΫϥΠΞϯτϊʔυ্Ͱͷ࣮ߦ࣌ੑೳ͕޲্͢Δ͜ͱ͕‫ظ‬଴Ͱ͖Δɽ

φϦϑΥʔϚοτͰ͋Δɽ‫ʹີݫ‬͸ελοΫϕʔεͷԾ૝Ϛγϯ༻όΠφϦϑΥʔϚοτͱͯ͠ઃ‫͞ܭ‬Ε͓ͯΓɼ͜

3.2 ࠾༻ٕज़

ͷԾ૝Ϛγϯ͕֤छ Web ϒϥ΢βʹ౥ࡌ͞Ε͍ͯΔͱߟ

3.2.1 MapReduce͑Ε͹Α͍ɽWebAssembly ‫΁ࣜܗ‬ͷίϯύΠϧʹ͸͍͘

Madoop Ͱ͸ɼ2.3.1 ߲Ͱड़΂ͨ՝୊ P1 : ෼ࢄॲཧϓϩ͔ͭͷ‫͕ޠݴ‬ରԠ͓ͯ͠Γɼओཁͳ΋ͷͰ͸ C/C++͕‫ڍ‬άϥϜͷ։ൃ༰қੑͷ௿͞Λղܾ͢ΔͨΊɼMapReduce͛ΒΕΔɽ2018 ೥ 8 ݄‫ࡏݱ‬ɼओཁͳϞμϯϒϥ΢β͸͢΂Λಋೖ͢Δɽ

ͯ WebAssembly Λ࣮ߦՄೳͰ͋Γ*2 ɼશϢʔβ͕ར༻͢

MapReduce [3], [6] ͸ Google ʹΑΓఏ‫͞ى‬Εͨ෼ࢄॲཧύϥμΠϜͷҰͭͰ͋ΔɽMapReduce ͸෼ࢄॲཧʹ͓Δϒϥ΢βͷ໿ 75 %͕αϙʔτ͍ͯ͠Δ [2] ͨΊɼଟ͘ͷϢʔβͷ‫Ͱڥ؀‬ར༻Ͱ͖Δͱߟ͑ͯΑ͍ɽ

͚ΔҰ࿈ͷૢ࡞Λ map ͱ reduce ͷ 2 ͭͷؔ਺ʹந৅Խ͠

WebAssembly ͸ Java ʹஔ͖‫͑ߟͯ͑׵‬Δͱ෼͔Γ΍͢

͍ͯΔɽ֤ϊʔυ͸ೖྗσʔλͱ map/reduce ؔ਺Λड͚

͍ɽද 1 ͸ WebAssembly ͱ Java Λൺֱͨ͠΋ͷͰ͋ΔɽऔΓɼͦΕͧΕॲཧ͢Δɽॲཧͷ֓ཁ͸࣍ͷ௨ΓͰ͋Δɽ

Java Ͱ͸ɼ‫ه‬ड़ͨ͠ϓϩάϥϜΛ javac ͰίϯύΠϧ͢*1*2

ஶ ऀ ໊ ͷ Matsuo ͱ MapReduce ͷ ࣮ ૷ Ͱ ༗ ໊ ͳ Apache
Hadoop ͔Β໋໊ͨ͠ɽMadoop ͸Φʔϓϯιʔειϑτ΢Σ
Ξͱͯ͠ެ։͍ͯ͠Δɽ
https://github.com/h-matsuo/madoop/c 2018 Information Processing Society of Japan⃝

Microsoft Edge, Mozilla Firefox, Google Chrome, Safari,Opera ͷ͢΂͕ͯαϙʔτ͍ͯ͠Δɽ·ͨɼϞόΠϧϒϥ΢
βͰ΋ iOS Safari, Chrome Android ͷ྆ํ͕αϙʔτ͍ͯ͠
Δɽ

223

ソフトウェアエンジニアリングシンポジウム 2018
IPSJ/SIGSE Software Engineering Symposium (SES2018)
ද 1

3.

WebAssembly ͱ Java ͷൺֱ
デ

ー

߲໨

WebAssemblyJavaϓϩάϥϛϯά‫ޠݴ‬

C/C++ͳͲ

Java

ίϯύΠϥ

Emscripten ͳͲ

javacίϯύΠϥʹΑΔੜ੒෺

.wasm ϑΝΠϧ.class ϑΝΠϧ1.

࣮ߦ‫ڥ؀‬Web ϒϥ΢β

JVM

登

処

ジ

9.

Δͱɼதؒ‫هͰޠݴ‬ड़͞ΕͨΫϥεϑΝΠϧʢ.classʣʹ

依

頼

結
者

8.
処

Δͷ͸Ծ૝Ϛγϯ JVMʢJava Virtual MachineʣͰ͋Γɼ
返JVM Λ༷ʑͳ‫߹ʹڥ؀‬Θͤͯ༻ҙ͢Δ͜ͱͰɼಉ͡ Java7.

ʹɼWebAssembly Ͱ͸ɼC/C++ͳͲͰ‫ه‬ड़͞Εͨϓϩά

実

タ

行

ス

理

ョ

流

流

れ
れ

却

理

完

ー

ド

埋

め

込

ス

ニ

ペ

ッ

取

結

<script
src="madoop.js"></script>

み

ト

2.
コ
登

得
メ

ー

イ

ン

コ
バ
6.

果
タ
要
5.

ク

コ

ブ
録

果

の

の

サ

ม‫͞׵‬ΕΔɽίϯύΠϧࡁΈͷΫϥεϑΝΠϧΛ࣮ߦ͢ϓϩάϥϜΛଟ༷ͳ‫Ͱڥ؀‬ಈ࡞ͤ͞Δ͜ͱ͕Ͱ͖Δɽಉ༷

タ

分
了
タ

ス

散

ス

サ

ク

ー

・取

開

理

テ
バ

ン

テ

ン

ツ

ツ

コ
4.

ク
求

処

ン

録

ン

得

コ
要

求

ン

テ

投

ン
稿
ン

・取

テ
者

ン

ツ
得

始

ϥϜΛ Emscripten [4] ͱ‫ݺ‬͹ΕΔπʔϧͳͲΛ༻͍ͯίϯWebサ イ訪 問 者ύΠϧ͢Δ͜ͱͰɼதؒ‫͋Ͱࣜܗ‬ΔόΠφϦϑΥʔϚοτਤ 1

ʢ.wasmʣ͕ಘΒΕΔɽ͜ͷόΠφϦϑΥʔϚοτ͸ JavaツトMadoop ͷΞʔΩςΫνϟ

ͷΫϥεϑΝΠϧʹ૬౰͢Δɽม‫ޙ׵‬ͷόΠφϦϑΥʔϚοτ͸֤छ Web ϒϥ΢β͕࣮ߦ͢Δɽ͜͜Ͱ͸ɼWeb

Madoop Λ༻͍ͯ෼ࢄॲཧͷδϣϒΛొ࿥͔ͯ͠Βॲཧϒϥ΢β͕ Java ͷ JVM ʹ૬౰͢Δɽ͜ͷΑ͏ʹɼόΠ݁Ռ͕ฦ٫͞ΕΔ·ͰͷҰ࿈ͷྲྀΕΛઆ໌͢Δɽͳ͓ɼϦφϦϑΥʔϚοτΛ Web ϒϥ΢β͕௚઀ղऍ͢ΔͨΊɼετͷ൪߸͸ਤதͷ൪߸ͱରԠ͍ͯ͠Δɽ

C/C++ϓϩάϥϜΛ༷ʑͳ‫߹ʹڥ؀‬ΘͤͯίϯύΠϧ͠( 1 ) ґཔऀ͕ Madoop ʹδϣϒʢmap/reduce ؔ਺͓Αͼ௚͢ඞཁ͕ͳ͍ɽWebAssembly ޲͚ʹҰ౓ίϯύΠϧ͢ॲཧର৅σʔλʣΛొ࿥͢Δɽ͜ͷͱ͖ɼmap/reduceΕ͹ɼଟ༷ͳ‫ڥ؀‬ͷ Web ϒϥ΢β্Ͱ࣮ߦͤ͞Δ͜ͱ͕

ؔ਺͸ C/C++Ͱ‫ه‬ड़͠ WebAssembly ‫ʹࣜܗ‬ίϯύͰ͖ΔɽΠϧͨ͠΋ͷΛొ࿥͢Δ͜ͱͰɼߴύϑΥʔϚϯεͰ

WebAssembly Λಋೖ͢Δ͜ͱͷ࠷େͷར఺͸ɼύϑΥʔͷॲཧ͕‫ظ‬଴Ͱ͖Δ*3 ɽMadoop ͸ొ࿥͞ΕͨδϣϒϚϯεͷվળʹ͋Δɽલड़ͨ͠Α͏ʹɼWebAssembly ΛΛద੾ͳ୯Ґʹ෼ׂ͠ɼλεΫͱͯ͠อ࣋͢Δɽ

༻͍Δ͜ͱͰ Web ϒϥ΢β͸ίϯύΠϧࡁΈͷόΠφϦ

( 2 ) ίϯςϯπ౤ߘऀ͕ϒϩά‫Ͳͳࣄه‬ͷ Web ίϯςϯΛղऍɾ࣮ߦ͢Ε͹Α͍ͨΊɼίϯύΠϥ‫ͱޠݴܕ‬ಉ౳ͷπΛ࡞੒͠ɼίϯςϯπαʔόʹ౤ߘ͢ΔɽੑೳΛ‫ظ‬଴͢Δ͜ͱ͕Ͱ͖Δɽ࣮ࡍɼಉ͡಺༰ͷ਺஋‫ܭ‬( 3 ) ίϯςϯπαʔό্ʹอ࣋͞Ε͍ͯΔ Web ίϯςϯࢉΛωΠςΟϰΞϓϦέʔγϣϯͱ࣮ͯ͠૷ͨ͠΋ͷͱɼπʹɼMadoop Λ༻͍ͨ෼ࢄॲཧΛߦ͏ͨΊͷίʔυ

WebAssembly Λ༻͍࣮ͯ૷ͨ͠΋ͷΛ࣮ߦ࣌ؒͷ௕͞Ͱεχϖοτ͕ຒΊࠐ·ΕΔɽൺֱͨ͠৔߹ɼWebAssembly ͸ωΠςΟϰΞϓϦέʔγϣ( 4 ) Web αΠτ๚໰ऀ͕ Web ϒϥ΢βͰίϯςϯπαʔϯͱଝ৭ͳ͍ύϑΥʔϚϯεΛൃ‫͏͍ͱͨ͠ش‬ϕϯνϚʔόʹΞΫηε͠ɼHTML ϑΝΠϧΛ࢝Ίͱ͢ΔίϯςΫ݁Ռ΋͋Δ [7]ɽϯπͷӾཡʹඞཁͳ֤छσʔλΛμ΢ϯϩʔυ͢Δɽ( 5 ) (3) ͰຒΊࠐ·ΕͨίʔυεχϖοτʹΑΓ෼ࢄॲཧ
3.3 ΞʔΩςΫνϟ

͕࢝·ΔɽҎ߱͜ͷ Web ϒϥ΢β͸ɼΞΫηεͨ͠

Madoop ͷΞʔΩςΫνϟΛਤ 1 ʹࣔ͢ɽਤʹ͸ɼଠࣈϖʔδʹཹ·͍ͬͯΔؒ͸ΫϥΠΞϯτϊʔυͱͯ͠Ͱࣔͨ͠ 3 छྨͷΞΫλɼ͓Αͼ 2 छྨͷαʔό͕ొ৔͢Δɽґཔऀ‫ػ‬ೳ͢Δɽ( 6 ) ΫϥΠΞϯτϊʔυ͕ϝΠϯαʔό͔Βॲཧର৅λε
Madoop ্Ͱ෼ࢄॲཧΛߦ͍͍ͨऀɽ

ίϯςϯπ౤ߘऀ

ϒϩά‫Ͳͳࣄه‬ͷ Web ίϯςϯπΛ

౤ߘ͢Δऀɽ

Ϋʢmap/reduce ؔ਺͓ΑͼೖྗσʔλʣΛऔಘ͢Δɽ( 7 ) ΫϥΠΞϯτϊʔυ্ͰλεΫΛ࣮ߦ͢Δɽ( 8 ) λεΫͷ࣮ߦ݁ՌΛΫϥΠΞϯτϊʔυ͔Β Madoop

Web αΠτ๚໰ऀ Web ϒϥ΢βΛ༻͍ͯɼίϯςϯπ

ͷϝΠϯαʔό΁ฦ٫͢Δɽϖʔδ͔Β཭ΕΔ͔ɼॲ

౤ߘऀ͕౤ߘͨ͠ Web ίϯςϯπʹΞΫηε͢Δऀɽཧ͢΂͖λεΫ͕ͳ͘ͳΔ·Ͱ (5)ʙ(8) Λ‫܁‬Γฦ͢ɽϝΠϯαʔό

Madoop ͕ΠϯετʔϧɾηοτΞοϓ͞( 9 ) ͢΂ͯͷλεΫ͕‫ྃ͢׬‬Δͱɼґཔऀ͸݁ՌΛऔಘͰΕͨαʔόɽ
ίϯςϯπαʔό͖Δɽίϯςϯπ౤ߘऀ͕౤ߘͨ͠ Web ίϯςϯπΛอ࣋ɾ഑৴͢Δαʔόɽc 2018 Information Processing Society of Japan⃝*3ैདྷख๏௨ΓɼJavaScript Ͱ‫ه‬ड़ͨ͠ map/reduce ؔ਺΋ొ࿥
Ͱ͖ΔΑ͏ʹઃ‫͍ͯ͠ܭ‬Δɽ

224

ソフトウェアエンジニアリングシンポジウム 2018
IPSJ/SIGSE Software Engineering Symposium (SES2018)
ද 2

1 void map(const char* data) {2// Count the number of occurrences of each word3
std::unordered_map<std::string, long> hashmap;
4
const std::vector<std::string> &words =5
split(data, ’␣’);
6
for (const auto &element: words) {7
hashmap[element]++;8}
9// Emit key-value pairs10
for (const auto &element: hashmap) {11
const std::string &key = element.first;
12
const std::string &value =13
std::to_string(element.second);14
emit(key, value);
15
}
16 }

ਤ 2

ϝΠϯαʔόͷ‫ڥ؀‬߲໨આ໌ΠϯελϯελΠϓ

t2.large*7

ΦϖϨʔςΟϯάγεςϜ

Ubuntu 16.04 LTS 64bit

Madoop ͷόʔδϣϯ

0.1.6

Node.js ͷόʔδϣϯ

8.11.3

TypeScript ͷόʔδϣϯ

2.9.2

Emscripten ͷόʔδϣϯ

1.38.8ද 3ΫϥΠΞϯτϊʔυͷ‫ڥ؀‬߲໨આ໌ΠϯελϯελΠϓ

m3.medium*8ΦϖϨʔςΟϯάγεςϜ

Ubuntu 16.04 LTS 64bit

Google Chrome ͷόʔδϣϯ

67.0.3396.87

Mozilla Firefox ͷόʔδϣϯ

60.0.2ϫʔυΧ΢ϯτ༻ map ؔ਺ͷྫʢC++ʣ

ͱ࣮ͯ͠૷ͨ͠ɽ࢖༻ͨ͠‫ޠݴ‬͸ TypeScript*5 Ͱ͋Δɽ
1 void reduce(const char* key,2
const char* values_list) {3// Sum up values in the list
4
const std::vector<long> &values =5split(values_list, ’,’);
6long sum = 0;
7
for (const auto value: values) {8
sum += value;
9}10// Emit key-value pair11emit(key, std::to_string(sum));
12 }·ͨ։ൃ‫ؒظ‬͸໿ 8 ϲ݄ɼίʔυߦ਺͸໿ 1,100 ߦͰ͋Δɽ

4. ࣮‫ݧ‬4.1 ֓ཁ
ຊ࣮‫ݧ‬ͷ໨త͸ɼMadoop Ͱ WebAssembly Λಋೖͨ͜͠ͱʹΑΓɼैདྷͷ JavaScript Ͱ‫ه‬ड़ͨ͠৔߹ͱൺ΂ͯύϑΥʔϚϯε͕Ͳͷఔ౓޲্͢Δͷ͔Λ͔֬ΊΔ͜ͱͰ͋
Δɽ۩ମతʹ͸ɼMadoop ΛΠϯετʔϧɾηοτΞοϓ
ͨ͠ϝΠϯαʔόɼ͓Αͼ Web ϒϥ΢β͕Πϯετʔϧ͞Εͨෳ਺୆ͷ‫ػࢉܭ‬Λ༻ҙ͠ɼ෼ࢄॲཧδϣϒΛ࣮ߦ͠

ਤ 3ϫʔυΧ΢ϯτ༻ reduce ؔ਺ͷྫʢC++ʣ͔ͯΒ‫ྃ͢׬‬Δ·Ͱʹ͔͔ͬͨ࣌ؒΛ‫ܭ‬ଌɾൺֱ͢Δɽ
ͳ͓ɼ࣮‫ݧ‬ର৅ͱͳΔδϣϒʹ͸ɼ‫͕ྔࢉܭ‬େ͖͘ೖग़্‫( ه‬1) Ͱొ࿥͞ΕΔ map/reduce ؔ਺ͷྫΛͦΕͧΕྗσʔλ͸খ͍͞ʮϨΠϯϘʔςʔϒϧͷੜ੒ʯͱɼ‫ࢉܭ‬

ਤ 2 ͱਤ 3 ʹࣔ͢ɽ͜͜Ͱ͸ɼδϣϒͱͯ͠ϫʔυΧ΢ྔ͕খ͘͞ೖग़ྗσʔλ͸େ͖͍ʮϫʔυΧ΢ϯτʯͷ 2ϯτΛ૝ఆ͠ɼͦΕͧΕͷؔ਺Λ C++Ͱ‫ه‬ड़͍ͯ͠ΔɽछྨΛ༻ҙͨ͠ɽ͜ΕΒͷৄࡉ͸ 4.3 અͰड़΂Δɽ

ਤ 2 ͷ map ؔ਺͸ೖྗͱͯ͠จࣈྻΛड͚औΓɼจࣈྻʹ‫·ؚ‬ΕΔ୯‫ͦͱޠ‬ͷग़‫ݱ‬ճ਺Λग़ྗ͢Δɽ4 ߦ໨Ͱ༩͑

4.2 ‫ڥ؀‬ΒΕͨจࣈྻΛεϖʔεͰ۠੾Γɼ6 ߦ໨Ͱ֤୯‫ޠ‬ͷग़‫ݱ‬

4.2.1 ϝΠϯαʔόճ਺ΛΧ΢ϯτ͢Δɽͦͷ‫ ޙ‬14 ߦ໨Ͱɼ֤୯‫͍ͯͭʹޠ‬

ද 2 ʹϝΠϯαʔόͷ‫ڥ؀‬ͷৄࡉΛࣔ͢ɽϝΠϯαʔ(key, value) = (୯‫ޠ‬, ग़‫ݱ‬ճ਺) ͷϖΞΛग़ྗ͢Δɽਤ 3 ͷόͷ‫ʹػࢉܭ‬͸ Amazon EC2*6 ͷΠϯελϯεΛ༻͍Δɽ

reduce ؔ਺Ͱ͸ɼೖྗͱͯ͠୯‫ͱޠ‬ग़‫ݱ‬ճ਺ͷϦετΛडΠϯελϯε্ʹ Madoop ΛΠϯετʔϧ͠ɼ֎෦͔ΒΞ͚औΓɼग़‫ݱ‬ճ਺Λ଍͠߹Θͤͯ୯‫ʹڞͱޠ‬ग़ྗ͢Δɽ7

ΫηεͰ͖ΔΑ͏ʹઃఆɾެ։͢Δɽ·ͨɼ؆୯ͷͨΊɼߦ໨Ͱ༩͑ΒΕͨग़‫ݱ‬ճ਺ͷϦετΛ଍͠߹Θͤɼ11 ߦ໨ຊ࣮‫Ͱݧ‬͸ϝΠϯαʔό͕ίϯςϯπαʔό΋݉ͶΔɽͰ (୯‫ޠ‬, ग़‫ݱ‬ճ਺) ͷϖΞΛग़ྗ͢Δɽ͜ͷΑ͏ʹɼ։ൃ

4.2.2 ΫϥΠΞϯτϊʔυऀ͸ MapReduce ύϥμΠϜʹԊͬͯॲཧͷຊ࣭ͱͳΔ෦෼ͷΈΛ࣮૷͢Ε͹Α͘ɼͦΕҎ֎ͷ෼ࢄॲཧʹඞཁͳॾΫϥΠΞϯτϊʔυͷ‫ڥ؀‬ͷৄࡉΛද 3 ʹࣔ͢ɽΫϥΠ*5ॲཧ͸ Madoop ͕ߦ͏ͨΊɼγεςϜશମΛϑϧεΫϥο
νͰ࣮૷͢Δ৔߹ͱൺ΂ͯ༰қʹ։ൃ͢Δ͜ͱ͕Ͱ͖Δɽ
*6

3.4 ࣮૷
Madoop ͷϝΠϯαʔό͸ Node.js*4 ΞϓϦέʔγϣϯ*4αʔόαΠυ޲͚ͷ JavaScript ࣮ߦ‫ڥ؀‬ɽ
https://nodejs.org/

c 2018 Information Processing Society of Japan
⃝

*7
*8

Microsoft ͕։ൃͨ͠ϓϩάϥϛϯά‫ޠݴ‬ɽ‫ܕ‬ͷ֓೦Λ௥Ճͨ͠JavaScript ͷεʔύηοτͰ͋ΓɼίϯύΠϧ͢Δ͜ͱͰ௨ৗ
ͷ JavaScript ϓϩάϥϜʹม‫͖Ͱ׵‬Δɽ
https://www.typescriptlang.org/
Amazon Elastic Compute Cloud ͷུɽAmazon.com, Inc. ͕ఏ‫͢ڙ‬Δ‫ݯࢿࢉܭ‬Λར༻ͯ͠ɼΫϥ΢υ্ͰԾ૝ϚγϯΛ࣮ߦ͢Δ͜ͱ͕Ͱ͖ΔɽAmazon Web ServicesʢAWSʣͷαʔϏεͷҰͭɽhttps://aws.amazon.com/ec2/
CPU ͷίΞ਺͸ 2ɼϝϞϦαΠζ͸ 8 GiB Ͱ͋ΔɽCPU ͷίΞ਺͸ 1ɼϝϞϦαΠζ͸ 3.75 GiB Ͱ͋Δɽ225

ソフトウェアエンジニアリングシンポジウム 2018
IPSJ/SIGSE Software Engineering Symposium (SES2018)ද 4࣮‫ݧ‬ର৅δϣϒͷύϥϝʔλ‫ڞ‬௨ύϥϝʔλΠϯύεϫʔυʹର͢Δ૯౰ͨΓ߈ܸΛޮ཰ྑ͘ߦ͏ͨΊͷ਺஋‫ॲࢉܭ‬ཧͱͯ͠஌ΒΕΔɽηΩϡϦςΟ্ͷཧ༝͔ɹΫϥΠΞϯτϊʔυͷ਺

1, 2, 3, 5, 10

ɹࢼߦճ਺

10 ճ

E1 : ϨΠϯϘʔςʔϒϧͷੜ੒ΒɼWeb αΠτଆͷσʔλϕʔεͰ͸ɼϢʔβͷϩάΠϯ
ύεϫʔυ͸ϋογϡԽͨ͠஋Λอଘ͓ͯ͘͜͠ͱ͕ଟ͍ɽ

ɹϋογϡ஋ͷ૯‫ࢉܭ‬ճ਺

10,000,000 ճ͜ͷϋογϡ஋͕ྲྀग़ͨ͠৔߹ɼѱҙͷ͋ΔΫϥοΧʔ͕ɹ 1 λεΫ͋ͨΓͷϋογϡ஋ͷ‫ࢉܭ‬ճ਺

1,000,000 ճ

ରԠ͢Δ‫ݩ‬ͷύεϫʔυΛಛఆ͢Δํ๏ͱͯ͠ɼύεϫʔɹϋογϡΞϧΰϦζϜ

MD5*9υͱͯ͠༗ޮͳจࣈྻΛஞ࣍ϋογϡԽ͠ɼ͜ͷ஋͕ೖख

E2 : ϫʔυΧ΢ϯτ

ͨ͠ϋογϡ஋ͱҰக͢Δ͔Ͳ͏͔Λ૯౰ͨΓͰௐ΂Δ͜ɹςΩετσʔλ*10 ͷ૯༰ྔ

380 MBɹ 1 λεΫ͋ͨΓͷςΩετσʔλͷ༰ྔ

44 MBͱ͕ߟ͑ΒΕΔɽϨΠϯϘʔςʔϒϧ͸ɼ͜ͷύεϫʔυީิͱͦͷϋογϡ஋ͷରԠΛϝϞϦޮ཰͕ྑ͘ͳΔΑ͏ʹ‫ͯ͠ࢉܭ‬ಘΒΕͨදͰ͋Δɽ

Ξϯτϊʔυ΋ɼϝΠϯαʔόͱಉ༷ʹ Amazon EC2 ͷ

map ؔ਺͸༩͑ΒΕͨจࣈྻʢύεϫʔυީิʣΛϋοΠϯελϯεΛ༻͍Δɽෳ਺ͷΠϯελϯεΛಉ࣌ʹཱͪγϡԽ͠ɼͦͷ஋Λؐ‫ݺͱ਺ؔݩ‬͹ΕΔؔ਺Λ༻͍Δ͜ͱ

্͛ͯ Web ϒϥ΢βΛ‫ى‬ಈ͠ɼͦΕͧΕϝΠϯαʔό΁Ͱɼ࠶ͼύεϫʔυͱͯ͠༗ޮͳจࣈྻʹ໭͢ɽ͞Βʹͦ઀ଓ͢ΔɽͷจࣈྻΛ࠶ͼϋογϡԽ͢Δɼͱ͍ͬͨॲཧΛ‫܁‬Γฦͳ͓ɼύϑΥʔϚϯεͷ‫ܭ‬ଌʹ͓͍ͯ͸ɼ͍͔ʹ‫ܭ‬ଌ࣌͢ɽࢦఆͨ͠ճ਺͚ͩ͜ͷॲཧΛ‫܁‬Γฦͨ͠‫ޙ‬ɼ࠷ॳͷจͷ‫ࠩޡ‬Λ࡟‫͢ݮ‬Δ͔͕ॏཁͱͳΔɽࠓճͷ࣮‫Ͱݧ‬͸ WebࣈྻͱɼҰ࿈ͷॲཧͷ݁Ռͱͯ͠࠷ऴతʹಘΒΕͨจࣈྻϒϥ΢βͷૢ࡞͕ඞཁͱͳΔ͕ɼ͜ΕΛ GUI Ͱૢ࡞͢Δ

ͷϖΞΛग़ྗ͢Δɽͳ͓ɼreduce ؔ਺ͷॲཧ͸ಛʹଘࡏͤ͜ͱ͸େ͖ͳ‫͕ܨʹࠩޡ‬Δɽ࠷ۙͷ Web ϒϥ΢βʹ͸ɼͣɼड͚औͬͨ (key, value) ͷ૊Λͦͷ··ग़ྗ͢Δ͚ͩਓखΛհͣ͞ʹૢ࡞ΛࣗಈԽ͢Δ͜ͱΛ໨తͱͨ͠ʮϔοͰ͋ΔɽυϨεϞʔυʯͱ‫ݺ‬͹ΕΔ࣮ߦϞʔυ͕ଘࡏ͢Δɽϔου͜ͷδϣϒͰ͸ɼϝΠϯαʔό͕഑৴͢Δ֤ϊʔυͷೖϨεϞʔυ͸ Web ϒϥ΢βΛ GUI ͳ͠ʹ࣮ߦ͢ΔϞʔυྗσʔλͱͯ͠͸ɼύεϫʔυͱͯ͠༗ޮͳ͋Δจࣈྻͱɼ

Ͱ͋ΓɼҰൠతʹ͸ Web ΞϓϦέʔγϣϯ։ൃʹ͓͚Δ

ϋογϡ஋Λ‫͢ࢉܭ‬Δճ਺ͷ 2 ͭͷΈͰ͋Γɼσʔλ༰ྔςετͷࣗಈԽͳͲͷ༻్Ͱར༻͞ΕΔɽྫ͑͹ɼGoogleͱͯ͠͸ແࢹͰ͖Δ΄Ͳඇৗʹখ͍͞ɽҰํͰɼ֤ϊʔυ

Chrome Λ༻͍ͯ࣍ͷίϚϯυΛ࣮ߦ͢Δ͜ͱͰɼࢦఆ͠

͸ຖճେྔͷϋογϡ஋Λ‫͢ࢉܭ‬ΔͨΊɼ1 ճ͋ͨΓͷ‫ܭ‬

ͨ<URL>ͷεΫϦʔϯγϣοτ͕ΧϨϯτσΟϨΫτϦʹ

ࢉྔ͕ඇৗʹେ͖͍ɽ͜ͷΑ͏ʹɼ1 λεΫ͋ͨΓͷೖྗอଘ͞ΕΔɽ

σʔλ͕খ͘͞ɼ‫ྔࢉܭ‬͸େ͖͍ͷ͕͜ͷδϣϒͷಛ௃Ͱ$ google-chrome --headless --screenshot <URL>͋Δɽ͜ͷΑ͏ʹɼϔουϨεϞʔυͰ࣮ߦͨ͠ Web ϒϥ΢β4.3.2 E2 : ϫʔυΧ΢ϯτ

Ͱ΋ɼDOM ͷߏங΍ཁૉͷߋ৽͸௨ৗ௨ΓʹߦΘΕΔɽ

ϫʔυΧ΢ϯτͰ͸ɼେ༰ྔͷςΩετϑΝΠϧΛղੳ

Madoop ͷཁ݅͸<URL>ͷϦιʔεʹ‫·ؚ‬ΕΔϓϩάϥϜ

͠ɼςΩετ಺ʹଘࡏ͢Δ୯‫ޠ‬ͷҰཡͱɼ֤୯‫ޠ‬ͷग़‫ݱ‬සΛ Web ϒϥ΢β্Ͱ࣮ߦ͢Δ͜ͱͰ͋ΓɼWeb ϖʔδΛ౓Λซͤͯग़ྗ͢ΔɽMapReduce Λ༻͍ͨϏοάσʔλGUI Ͱදࣔ͢Δඞཁ͸ͳ͍ͨΊɼϔουϨεϞʔυͰ໰୊ॲཧͷ୊ࡐͱͯ͠༗໊Ͱ͋Δɽmap/reduce ؔ਺ͷ಺༰͸ͳ࣮͘‫͕ݧ‬ՄೳͰ͋Δɽࠓճ͸ɼϔουϨεϞʔυʹରԠ

ਤ 2ɼਤ 3 ͓Αͼ 3.3 અͰड़΂ͨ಺༰ͱಉҰͰ͋ΔͨΊɼ͍ͯ͠Δ Google Chrome ͓Αͼ Mozilla Firefox ͷ 2 छྨ͜͜Ͱ͸ׂѪ͢Δɽ

ͷ Web ϒϥ΢βͰ࣮‫ݧ‬Λߦ͏ɽ͜ͷδϣϒͰ͸ɼ֤ϊʔυͷೖྗσʔλ͸਺ MBʙ਺े

MB ͱେ͖͍͕ɼ࣮ࡍʹ୯‫ޠ‬Λ਺্͑͛Δॲཧͷ‫ྔࢉܭ‬͸
4.3 ࣮‫ݧ‬ର৅δϣϒද 4 ʹ֤࣮‫ݧ‬ର৅ͷύϥϝʔλΛࣔ͢ɽҎԼͰ͸֤࣮‫ݧ‬গͳ͍ͷ͕ಛ௃Ͱ͋Γɼલ߲ E1 ͷϨΠϯϘʔςʔϒϧੜ੒ͷδϣϒͱ͸ରরతͰ͋Δɽର৅ͷৄࡉʹ͍ͭͯड़΂Δɽ

4.3.1 E1 : ϨΠϯϘʔςʔϒϧͷੜ੒ϨΠϯϘʔςʔϒϧ [10] ͷੜ੒͸ɼWeb αΠτͷϩά
*9

WebAssembly ‫ࣜܗ‬ͷ࣮૷ʹ͸ɼMD5 ΞϧΰϦζϜͷ࢓༷͕‫ه‬ड़͞Εͨ RFC 1321 [15] ͷ෇࿥ʹ‫͞ࡌه‬Ε͍ͯΔϓϩάϥϜ
Λར༻͠ɼC++ϓϩάϥϜͱͯ͠‫ه‬ड़ͨ͠ɽൺֱର৅ͱͳΔ
JavaScript ͷ࣮૷ʹ͸ɼҎԼͰެ։͞Ε͍ͯΔ RFC 1321 ͷ࢓༷ʹ஧࣮ʹैͬͨ΋ͷΛ༻͍ͨɽ
http://rocketeer.dip.jp/sanaki/free/javascript/
freejs17.htm*10 Yelp Open Dataset [17] ͷσʔλΛ༻͍ͨɽc 2018 Information Processing Society of Japan⃝4.4 ݁Ռ
4.4.1 E1 : ϨΠϯϘʔςʔϒϧͷੜ੒࣮‫ݧ‬ର৅ E1 ͷ݁ՌΛਤ 4 ʹࣔ͢ɽ͜ͷശͻ͛ਤͰ͸ɼॎ͕࣠δϣϒશମͷ࣮ߦ࣌ؒͷ௕͞ɼԣ͕࣠ΫϥΠΞϯτ
ϊʔυͷ਺ΛͦΕͧΕද͢ɽԫ৭ͷσʔλ͕ैདྷख๏Ͱ͋
Δ JavaScript Λ༻͍ͨ৔߹ͷ݁ՌΛɼࢵ৭ͷσʔλ͕ఏҊख๏ʢMadoopʣͰ͋Δ WebAssembly Λ༻͍ͨ৔߹ͷ݁

226

ソフトウェアエンジニアリングシンポジウム 2018
IPSJ/SIGSE Software Engineering Symposium (SES2018)

Google Chrome

Mozilla Firefox

browserbrowser= chrome= chromebrowser = firefox

methodmethodjs

従 js 来

600
600

wasm

手

案

手

browser = firefox

methodmethodjs

従 js 来wasm

手提 wasm
案 手

175
175

法
法

methodjs
wasm 5
5num_clients

300
300

法
法

1
1

2
2

3

5
5

3
num_clients
num_clients

method

100
100
75
75

method

js
wasm
1
1

10
10

2
2

3

5
5

105
10

10
1

3
num_clients
num_clients

num_clients

js
wasm

10
10

実

200
200

10
10

125
125

行

10
10

browser = firefox

200
200

duration_s

duration_s

時 duration_s
間 の 長 さ提来法Mozilla Firefox

browserbrowser= chrome= chrome

150
150

行

5
5

従

[ms]

法

実

50
50
100
100

00

25
25

11
1

2
2

2

33

3 5
5

105
10

num_clients
num_clients

ク

ਤ 4
ද 5

ラ

イ

ア

10
1

ン

ト

ノ

ー

22

ド

1 3
3

552

num_clients

数

10 3
10

00
5

11
1

10

2
2

33

2

num_clients

3 5
5

num_clients
num_clients

ク

ラ

イ

ア

ン

ト

ノ

22

ー

ド

1 3
3

数

ਤ 5

E2 : ϫʔυΧ΢ϯτͷ݁Ռ

E1 : ϨΠϯϘʔςʔϒϧͷੜ੒ʹ͓͚Δ

ද 6

E2 : ϫʔυΧ΢ϯτʹ͓͚Δ

ϊʔυ਺ 10 ͷ݁Ռͷฏ‫ۉ‬஋
ख๏

552

10 3
10

num_clients

E1 : ϨΠϯϘʔςʔϒϧੜ੒ͷ݁Ռ

num_clientsϊʔυ਺ 10 ͷ݁Ռͷฏ‫ۉ‬஋ख๏

Google Chrome

Mozilla Firefox

Google Chrome

Mozilla FirefoxఏҊख๏

19.2 s26.3 sఏҊख๏53.6 s

54.0 s‫ط‬ଘख๏

37.8 s73.2 s‫ط‬ଘख๏

49.5 s51.7 s࣮ߦ࣌ؒͷ࡟‫ݮ‬ൺ཰

49.2 %

64.1 %

࣮ߦ࣌ؒͷ࡟‫ݮ‬ൺ཰

−8.3 %−4.4 %

E1: レՌΛͦΕͧΕࣔ͢ɽࠨଆͷਤ͸ Google Chrome Ͱͷ݁ՌΛɼӈଆͷਤ͸ Mozilla Firefox Ͱͷ݁ՌΛͦΕͧΕද͢ɽ

ン

ボ

ー

テ

ー

ブ

ル

生

成

E2: ワ
1.0

0.8
0.8

0.8

ー

ド

カ

ウ

ン

ト

の

དྷख๏ΑΓ΋࣮ߦ࣌ؒͷ௕͕͞୹͘ͳ͍ͬͯΔ͜ͱ͕‫ͯݟ‬

0.6
0.6

間

ͷ݁Ռʹண໨͢Δͱɼैདྷख๏ʹ͓͚Δ n = 10 ͷͱ͖ΑΓ΋ɼఏҊख๏ʹ͓͚Δ n = 5 ͷͱ͖ͷํ͕ɼ࣮ߦ࣌ؒͷ௕͞ͷํ͕୹͘ͳ͍ͬͯΔ͜ͱ͕‫͛ڍ‬ΒΕΔɽ

0.4
0.4

࣌ؒͷ௕͞Λൺֱͨ͠৔߹ɼGoogle Chrome Ͱ͸໿ 49 %ɼ

0.4

0.2

0.2
0.2

0.0

0.0
0.0

111

ද 5 ʹɼn = 10 ͷ৔߹ʹ͓͚Δδϣϒͷ࣮ߦ࣌ؒͷ௕͞ͷฏ‫ۉ‬஋Λࣔ͢ɽ͜ͷΑ͏ʹɼఏҊख๏ͱैདྷख๏ͷ࣮ߦ

0.6

時

の

औΕΔɽ͞Βʹಛච͢΂͖఺ͱͯ͠ɼn = 5 ͓Αͼ n = 10

行

さ͔Δɽ·ͨɼ͍ͣΕͷ݁Ռʹ͓͍ͯ΋ɼఏҊख๏ͷํ͕ै長

reduction_ratio
reduction_ratio

reduction_ratio比࣮ߦ࣌ؒͷ௕͞͸΄΅൓ൺྫͯ͠୹͘ͳ͍ͬͯΔ͜ͱ͕෼

イ

1.0
1.0

率

ਤ 4 ΑΓɼΫϥΠΞϯτϊʔυͷ਺ n ͕૿͑Δʹैͬͯɼ実

num_clients
num_clients

400
400

手

提 wasm
案 手

500
500

Google Chromebrowser = firefox

時 duration_s
間 の 長 さ

[ms]

2 2
2

3

55

3

ク

ਤ 6

1
10 1

510
10

num_clients
num_clients

ラ

イ

ア

ン

ト

ノ

ー

ド

2
2

数

3

55

10
10

num_clientsఏҊख๏ʹ͓͚ΔΫϥΠΞϯτϊʔυ਺Λ૿΍ͨ͠৔߹ͷ࣮ߦ࣌ؒͷ௕͞ͷൺ཰

Firefox Ͱ͸໿ 64 %୹͘ͳͬͨɽ
4.4.2 E2 : ϫʔυΧ΢ϯτ
࣮‫ݧ‬ର৅ E2 ͷ݁ՌΛਤ 5 ʹࣔ͢ɽࠓճ΋ಉ༷ʹɼϊʔ

E1 ͷΑ͏ͳ‫͕ྔࢉܭ‬େ͖͘σʔλྔ͕খ͍͞δϣϒʹ͓͍ͯɼఏҊख๏͕໌Β͔ʹ༗རͰ͋Δ͜ͱ͕෼͔Δɽυͷ਺ n ʹ൓ൺྫ࣮ͯ͠ߦ࣌ؒͷ௕͞͸୹͘ͳ͍ͬͯΔɽ

ਤ 6 ͸ɼఏҊख๏ʹ͓͍ͯɼΫϥΠΞϯτϊʔυ਺ n = 1

͔͠͠ͳ͕ΒɼE1 ͷ݁Ռͱ͸ҟͳΓɼࠓճͷ࣮‫ݧ‬ର৅ͰΛ‫ج‬४ͱͨ͠৔߹ʹ͓͚Δɼn Λ૿Ճͤͨ͞ͱ͖ͷ࣮ߦ࣌͸ɼࢵ৭ͷఏҊख๏ͷํ͕ԫ৭ͷैདྷख๏ΑΓ΋࣮ߦ࣌ؒؒͷ௕͞ͷൺ཰Λද͍ͯ͠Δɽཧ࿦తʹ͸ɼn = 5 ͷͱ͖͕௕͘ͳ͍ͬͯΔ݁Ռ͕ଟ͍ɽ

ͷൺ཰͸ 1/5ʢ0.2ʣͱͳΔɽΫϥΠΞϯτϊʔυͷ਺ʹԠ

ද 6 ʹɼn = 10 ͷ৔߹ʹ͓͚Δδϣϒͷ࣮ߦ࣌ؒͷ௕ͯ͡ੑೳ΋εέʔϧ͓ͯ͠Γɼಛʹ࣮‫ݧ‬ର৅ E1 ʹ͓͍ͯ͞ͷฏ‫ۉ‬஋Λࣔ͢ɽఏҊख๏ͷํ͕ैདྷख๏ΑΓ΋ɼ࣮ߦ͸ཧ࿦஋ʹ͍ۙੑೳ͕ग़͍ͯΔ͜ͱ͕෼͔Δɽ͜ͷ͜ͱ͔࣌ؒͷ௕͞͸ Google Chrome Ͱ໿ 8 %ɼMozilla FirefoxΒɼMadoop ͕෼ࢄॲཧγεςϜͷϑϨʔϜϫʔΫͱͯ͠

Ͱ໿ 4 %૿Ճͨ͠ɽ

ਖ਼͘͠‫ػ‬ೳ͍ͯ͠Δ͜ͱ͕‫ͯݟ‬औΕΔɽ

4.5 ߟ࡯

Ҋख๏Λ༻͍ͨ৔߹ͷํ͕ैདྷख๏Λ༻͍ͨ৔߹ΑΓ΋࣮ͳ͓ɼ࣮‫ݧ‬ର৅ E2 : ϫʔυΧ΢ϯτͷ݁Ռͷଟ͘Ͱ͸ɼఏ࣮‫ݧ‬ର৅ E1 : ϨΠϯϘʔςʔϒϧͷੜ੒ʹ͓͍ͯɼఏ

ߦ࣌ؒͷ௕͕͞૿Ճ͢Δͱ͍͏݁Ռʹͳͬͨɽͦͷ૿ՃൺҊख๏Λ༻͍ͨ৔߹ Google Chrome Ͱ໿ 49 %ɼMozilla཰͸ Google Chrome Ͱ໿ 8 %ɼMozilla Firefox Ͱ໿ 4 %ͰFirefox Ͱ໿ 64 % ࣮ߦ࣌ੑೳ͕վળͨ͠ɽ͜ͷ͜ͱ͔Βɼ͋ͬͨɽ͜ͷ‫ݪ‬Ҽͱͯ͠ɼWeb ϒϥ΢β͕ WebAssembly

c 2018 Information Processing Society of Japan
⃝

227

5

1

ソフトウェアエンジニアリングシンポジウム 2018
IPSJ/SIGSE Software Engineering Symposium (SES2018)όΠφϦΛղऍɾ࣮ߦ͢Δࡍʹൃੜ͢ΔΦʔόϔου͕ߟࢀߟจ‫ݙ‬

͑ΒΕΔɽWeb ϒϥ΢β͕ WebAssembly όΠφϦΛ࣮ߦ

[1]
[2]

͢Δखॱͷ֓ཁΛҎԼʹࣔ͢ɽ( 1 ) όΠφϦσʔλʢ.wasm ϑΝΠϧʣΛαʔό͔Βμ΢ϯϩʔυ͢Δɽ

[3]( 2 ) όΠφϦσʔλΛ Web ϒϥ΢β಺Ͱ࠶౓ίϯύΠϧ
͢Δɽ͜ΕʹΑΓɼଟ༷ͳΞʔΩςΫνϟʹ߹Θͤͨ

[4]࠷దԽ͕ՄೳͱͳΔɽ

( 3 ) όΠφϦΛ࣮ߦ͢ΔͨΊͷϝϞϦྖҬΛ֬อ͢Δɽ

[5]( 4 ) όΠφϦΛ࣮ߦ͢Δɽ( 5 ) (3) Ͱ֬อͨ͠ϝϞϦྖҬΛղ์͢Δɽ্‫ه‬ͷखॱͷதͰɼWebAssembly όΠφϦ͕࣮ࡍʹ࣮

[6]ߦ͞Ε͍ͯΔͷ͸ (4) ͷεςοϓ͚ͩͰ͋ΓɼͦΕҎ֎ͷεςοϓ͸όΠφϦΛ࣮ߦ͢ΔͨΊͷલ‫ޙ‬ͷॲཧͰ͋Δɽ

[7]

͜ΕΒ͸ JavaScript Λ࣮ߦ͢Δ৔߹͔Β‫ͯݟ‬Φʔόϔου
ͱͳΔɽΑͬͯɼ‫͕ྔࢉܭ‬খ͍͞λεΫΛ࣮ߦͨ͠৔߹ɼ

WebAssembly Λಋೖ͢Δ͜ͱʹΑΓ࡟‫͞ݮ‬Εͨ࣌ؒΑΓ΋ɼ͜ͷΦʔόϔουʹΑΓ૿Ճͨ࣌ؒ͠ͷํ͕௕͘ͳΔ[8]

৔߹͕͋Δͱߟ͑ΒΕΔɽ4.3.2 ߲Ͱ΋ड़΂ͨΑ͏ʹɼ࣮‫ݧ‬
ର৅ E2 ͷϫʔυΧ΢ϯτ͸ 1 λεΫ͋ͨΓͷ‫͕ྔࢉܭ‬খ͍͞δϣϒͰ͋ΔͨΊɼWebAssembly Λ༻͍ͨํ͕஗͘

[9]ͳͬͨͱߟ͑ΒΕΔɽ

5. ͓ΘΓʹ

[10]ຊ‫Ͱڀݚ‬͸ɼWeb ϒϥ΢β্Ͱߦ͏෼ࢄॲཧख๏ BBVC
ͷ՝୊Ͱ͋Δɼ։ൃ༰қੑͷ௿͓͞Αͼ࣮ߦ࣌ੑೳͷ௿͞

[11]Λղܾ͢ΔͨΊɼMapReduce ͱ WebAssembly Λಋೖͨ͠৽͍͠ BBVC ϑϨʔϜϫʔΫ Madoop Λ࣮૷ɾఏҊ͠
ͨɽ·ͨධՁ࣮‫ͯ͠ͱݧ‬ɼఏҊख๏Ͱ͸ैདྷख๏ͱൺ΂ͯ[12]࣮ߦ࣌ੑೳ͕Ͳͷఔ౓վળ͢Δͷ͔Λɼ࣮ߦ࣌ؒͷ௕͞Λ‫ܭ‬ଌɾൺֱ͢Δ͜ͱͰ͔֬Ίͨɽ࣮‫ݧ‬ͷ݁Ռɼ‫͕ྔࢉܭ‬େ͖͘σʔλྔ͕গͳ͍࣮‫ݧ‬ର৅Ͱ͸࠷େͰ໿ 64 %‫ݮ‬গͨ͠ɽ·ͨ‫͕ྔࢉܭ‬খ͘͞σʔλྔ͕ଟ͍࣮‫ݧ‬ର৅Ͱ͸໿

[13]
[14]

4 ʙ 8 %૿Ճͨ͠ɽΑͬͯɼ‫͕ྔࢉܭ‬େ͖͘σʔλྔ͕গͳ͍Α͏ͳ෼ࢄॲཧͰ͸ɼఏҊख๏͕ඇৗʹ༗ޮͰ͋Δ͜
ͱ͕͔֬ΊΒΕͨɽࠓ‫ޙ‬ͷ՝୊ͱͯ͠ɼΫϥΠΞϯτϊʔυͷಛੑΛߟྀͯ͠ޮ཰తʹεέδϡʔϦϯάΛߦ͏͜ͱ͕‫͛ڍ‬ΒΕΔɽ‫ݱ‬ࡏ Madoop Ͱ͸ϊʔυͷ௨৴ঢ়‫گ‬΍ॲཧੑೳɼ଺ࡏ࣌ؒͱ

[15]
[16]
[17]
[18]

Apache Hadoop: http://hadoop.apache.org/.
Can I use... Support tables for HTML5, CSS3, etc:
https://caniuse.com/#search=wasm.
Dean, J. and Ghemawat, S.: MapReduce: Simplified
Data Processing on Large Clusters, OSDI’04: Sixth
Symposium on Operating System Design and Implementation, pp. 137–150 (2004).
Emscripten:
http://kripken.github.io/
emscripten-site/.
Fabisiak, T. and Danilecki, A.: Browser-based harnessing of voluntary computational power, Foundations ofComputing and Decision Sciences, Vol. 42, No. 1, pp.
3–42 (2017).
Ghemawat, S., Gobioﬀ, H. and Leung, S.-T.: The Google
File System, Proceedings of the 19th ACM Symposium
on Operating Systems Principles, pp. 20–43 (2003).
Haas, A., Rossberg, A., Schuﬀ, D. L., Titzer, B. L.,
Holman, M., Gohman, D., Wagner, L., Zakai, A. andBastien, J.: Bringing the web up to speed with WebAssembly, ACM SIGPLAN Notices, Vol. 52, No. 6,
ACM, pp. 185–200 (2017).
Langhans, P., Wieser, C. and Bry, F.: Crowdsourcing
MapReduce: JSMapReduce, Proceedings of the 22nd International Conference on World Wide Web, ACM, pp.
253–256 (2013).
Merelo, J.-J., Garcı́a-Valdez, M., Castillo, P. A., Garcı́aSánchez, P., Cuevas, P. and Rico, N.: NodIO, a
JavaScript framework for volunteer-based evolutionary
algorithms: first results, CoRR, Vol. abs/1601.01607(2016).
Oechslin, P.: Making a faster cryptanalytic time-memory
trade-oﬀ, Annual International Cryptology Conference,
Springer, pp. 617–630 (2003).
Pan, Y., White, J., Sun, Y. and Gray, J.: Gray Computing: A Framework for Computing with Background
JavaScript Tasks, IEEE Transactions on Software Engineering (2017).
Ryza, S. and Wall, T.: Mrjs: A javascript mapreduce
framework for web browsers, http://www.cs.brown.
edu/courses/csci2950-u/f11/papers/mrjs.pdf(2010).
SETI@home: https://setiathome.berkeley.edu/.
SETI@Home - Detailed stats | BOINCstats/BAM!:
https://boincstats.com/en/stats/0/project/detail/.
The MD5 Message-Digest Algorithm: https://www.
ietf.org/rfc/rfc1321.txt.
WebAssembly: https://webassembly.org/.
Yelp Open Dataset: https://www.yelp.com/dataset.
ߴ໦ল‫ޗ‬ɼɹ౉ᬑ‫׮‬ɼɹ෱࢜কɼఱ໺‫ݑ‬थɼᢠᐍ৴ੜɼɹ
த੢ಁɿWeb ϒϥ΢βΛ༻͍ͨϘϥϯςΟΞίϯϐϡʔςΟϯάϓϥοτϑΥʔϜͷఏҊɼٕज़ใࠂ 29 (2014).

͍ͬͨಛੑΛߟྀͤͣɼ͢΂ͯͷϊʔυʹҰ཯ͯ͠ಉ͡αΠζͷλεΫΛ഑෍͍ͯ͠ΔɽBBVC Ͱ͸ Web ϒϥ΢β্ͰॲཧΛ͢Δͱ͍͏ಛੑ্ɼVC ʹൺ΂ͯϊʔυͷಛੑͷӨ‫ڹ‬Λඇৗʹड͚΍͍ͨ͢Ίɼ͞ΒͳΔੑೳͷվળʹ͸εέδϡʔϦϯάΞϧΰϦζϜͷվળ͕ඞཁͰ͋Δɽँࣙ ຊ‫ڀݚ‬ͷҰ෦͸ɼ೔ຊֶज़ৼ‫ڵ‬ձՊֶ‫ڀݚ‬අิॿۚ‫ج‬൫‫ڀݚ‬ʢBʣʢ՝୊൪߸ɿ16H02908ɼ18H03222ʣͷॿ੒ΛಘͯߦΘΕͨɽc 2018 Information Processing Society of Japan⃝

228