API Meetup Tokyo #9 での発表資料です
8FC"1*αʔόʔͱͯ͠ͷ&MJYJSͷՄೳੑ/BPZB*UP,BJ[FO1MBUGPSN *OD"1*.FFUVQ5PLZP
View Slide
ࡢࠓ͜Μͳ͜ͱ͋Γ·ͤΜ͔ • ͨͩͷ+40/"1*ʹ3BJMTͰŋŋŋ– ϋΠτϥϑΟοΫͳҊ݅Ͱ͍ͮΒ͍– ཁ݅ʹରͯ͠ϝϞϦϑοτϓϦϯτ͕େ͖͗͢– ଓ͕ଟ͍ͱεέʔϧ͠ͳ͍– োੑʹෆ҆• ʮεύΠΫͨ͠ͷͰམͪ·ͨ͠ʯͰࡁ·͞Εͳ͍ɻࠂαʔόʔͱ͔
,BJ[FO1MBUGPSNͰŋŋŋ• ҎԼͷέʔεͰ࣮ࡍʹ͋ͬͨ– ࠂ৴ͷ֎෦αʔόʔͱͷΓͱΓ• ଟྔͷଓ– 3FEJTͱ*0ͯ͠ฦ͢Δ͚ͩͷ"1*αʔόʔ• ཁ݅γϯϓϧɻෳࡶͳ.PEFM7JFXཁΒͳ͍• ͰεύΠΫͰམͱͨ͘͠ͳ͍ͻͱ·ͣ/PEFKTͰରԠͨ͠
親 子 fork() ϚϧνϓϩηεϞσϧʹΑΔฒߦॲཧྫ3BJMTͷ࣮ߦڥ
1SPT$POT• 1SPT– ҆શ• ϦΫΤετ͝ͱʹϝϞϦۭؒ㱺Ϋϥογϡͯ͠ଞʹӨڹ͠ͳ͍– ϓϩάϥϛϯάϞσϧ͕୯७ ಉظͰ0,– ϚϧνίΞ• $POT– εέʔϥϏϦςΟʹ• ϝϞϦେ㱺࠷େϓϩηεಉ࣌ฒߦ্ݶ• 04ϓϩηεεϨουͷίϯςΩετεΠον
࣌ؒA B A C D B ・・・ select() / epoll() ίϯςΩετεΠονΠϕϯτۦಈϞσϧʹΑΔฒߦॲཧྫ&WFOU.BDIJOF /PEFKT
1SPT$POT• 1SPT– εέʔϥϏϦςΟ ߴ͍ฒߦॲཧੑೳ• ϝϞϦϑοτϓϦϯτখ͍͞• ಉ࣌ଓ͕૿͑ͯεέʔϧ• $POT– োੑʹ• མͪΔͱ͖શ෦མͪΔ• ϝϞϦϦʔΫ͜Θ͍– ϓϩάϥϛϯάϞσϧ͕ෳࡶ˞/PEFKTͩͱͦΕ΄ͲͰͳ͍– ϚϧνίΞ$16Λ͍ͮΒ͍
τϨʔυΦϑ• ฒߦॲཧੑೳՔ͛ͳ͍͕҆શͰ୯७ͳϚϧνϓϩηε εϨουϞσϧ͔• ฒߦॲཧੑೳ͕ߴ͍͕ӡ༻ʹؾΛݣ͏ΠϕϯτۦಈϞσϧ͔͙͵͵ŋŋŋ
ͦ͜Ͱ&SMBOHͰ͢
&SMBOHͷ࣮ߦڥ• #&". &SMBOH7.– ܰྔϓϩηεŋŋŋ࣮ߦίϯςΩετ• খ͍͞ϫʔυɺىಈʹdϚΠΫϩඵ– ฒߦॲཧੑೳ͕ߴ͍• 7.͕ܰྔϓϩηεΛεέδϡʔϦϯά– 7.εϨουຖʹϥϯΩϡʔ– ཪଆͰඇಉظεϨουϓʔϧref: h+p://www.erlang-‐factory.com/upload/presenta=ons/708/HitchhikersTouroEheBEAM.pdf
ΞΫλʔϞσϧϝοηʔδύογϯάͯ͢ίϐʔ4IBSFE/PUIJOHϝʔϧϘοΫεʹΩϡʔΠϯά
&SMBOHͰͷωοτϫʔΫαʔόʔ• ϦΫΤετʹܰྔϓϩηε– ҆શ• ܰྔϓϩηεŋŋŋಠཱ࣮ͨ͠ߦίϯςΩετ• 4IBSFE/PUIJOHŋŋŋ͋Δϓϩηε͕Ϋϥογϡͯ͠ͳ͍– ߴ͍ฒߦॲཧੑೳ• ܰྔŋŋŋϝϞϦϑοτϓϦϯτখ͍͞• Ϣʔβʔϥϯυ04ͷίϯςΩετεΠονͳ͠
&SMBOHͷϝϞϦϞσϧ• QFS1SPDFTT($– ϓϩηεຖʹ($• άϩʔόϧ($ͩͱશମʹӨڹ͢Δ• ϓϩηε– 4IBSFE/PUIJOH– ϓϩηε)FBQ• ($ܰྔϓϩηεຖʹΒͤɺཁΒͳ͘ͳͬͨΒഇغ ؆୯Ͱޮ͕Α͍҆ఆͨ͠Ԡੑೳߴ͍োੑ
4VQFSWJTPSSupervisor ϓϩηεࢹʮಥવͷࢮʂʯϓϩηεࢮΜͩ͠ɺઓུʹ߹Θͤͯ࠶ىಈ͠ͱ͘Θcrash
-FUJUDSBTI• ࣦഊʹඋ͑ͳ͍ɻྫ֎Λั·͑ͳ͍• 4VQFSWJTPSͰࢹ͓͍ͯͯ͠ɺͦͷ··ى͜͢ͳΓύϥϝʔλม͑ͯϦτϥΠͤ͞ΔͳΓŋŋŋނোରԠϞσϧ͕ݴޠج൫Ͱఏڙ
/PEFKTWT&SMBOH• /PEFKTWT&SMBOH– IUUQLVFOJTIJIBUFOBEJBSZKQFOUSZ– ނোϞσϧɺίʔυมߋɺίʔυҠಈɺແఀࢭΞοϓάϨʔυɺ͜͏͍͏ͷͬͯYͰμϯλΠϜͷγεςϜͩͱେࣄͩΑͶɻ +PF"SNTUSPOH– ݁ہੑೳΑΓނোੑͳΜͩΑͶᴷͦΕͳ
Ͱ&SMBOHͳΜͰ͠ΐ͏
ͦ͜Ͱ&MJYJS
&MJYJS• &SMBOH7.ͷ্Ͱಈ͘ݴޠ– &SMBOH7.ͷڧΈ ฒߦॲཧੑೳɺোੑΛͦͷ··ʹɺγϯλοΫεΛೃછΈ͘͢• KPTFWBMJN&SMBOHͰݟͨ͜ͱΈΜͳؾʹೖ͚ͬͨͲɺݟͳ͔ͬͨ͜ͱΈΜͳݏ͍– &SMBOHͱ૬ޓޓ– 051ͪΖΜ͋ΔΑ• ϞμϯͳύοέʔδཧγεςϜɺ-B[ZίϨΫγϣϯ 4USFBNɺϓϩτίϧͳͲͷՃཁૉ• ৄ͘͠– IUUQTTQFBLFSEFDLDPNOBPZBFMJYJSHPTIBPKJF
Ͱ8FC"1*࡞Δͷ͍͠ΜͰ͠ΐ͏
1IPFOJYᴷ&MJYJSPO3BJMT
1IPFOJYCowboy Plug Phoenix .JEEMFXBSF)5514FSWFS&SMBOH1SPDFTT3FFRVFTU
ϕϯνϚʔΫref: h+p://www.li+lelines.com/blog/2014/07/08/elixir-‐vs-‐ruby-‐showdown-‐phoenix-‐vs-‐rails/ $ ./wrk -‐t12 -‐c800 -‐d180S -‐-‐timeout 2000 "http://tranquil-‐brushlands-‐6459.herokuapp.com/showdown" Running 3m test @ http://tranquil-‐brushlands-‐6459.herokuapp.com/showdown 12 threads and 800 connections Thread Stats Avg Stdev Max +/-‐ Stdev Latency 318.52ms 139.92ms 1.39s 82.03% Req/Sec 224.42 57.23 368.00 68.50% 484444 requests in 3.00m, 0.99GB read Socket errors: connect 0, read 9, write 0, timeout 0 Requests/sec: 2691.03 Transfer/sec: 5.65MB $ ./wrk -‐t12 -‐c800 -‐d180S -‐-‐timeout 2000 "http://dry-‐ocean-‐9525.herokuapp.com/showdown" Running 3m test @ http://dry-‐ocean-‐9525.herokuapp.com/showdown 12 threads and 800 connections Thread Stats Avg Stdev Max +/-‐ Stdev Latency 3.07s 2.06s 8.36s 70.39% Req/Sec 24.65 9.97 63.00 67.10% 54256 requests in 3.00m, 122.50MB read Socket errors: connect 0, read 1, write 0, timeout 0 Requests/sec: 301.36 Transfer/sec: 696.77KB Phoenix Rails w/ Puma ॾ݅͋ΔͷͰߟࣗݾͰɻ1IPFOJY͕ൺֱ͍ͯ͠ͷؒҧ͍ͳͦ͞͏
΄͔• &MJYJSຊ൪Քಇ࣮– υϦίϜ͞Μɺ%"6ສͷ"Eͷ"1*• GBMPPENBSV &MJYJSͷ(SBQF• IUUQXXXTMJEFTIBSFOFUPISTIJCVZBFYFMJYJS• 1IPFOJYͷ$IBOOFM– ଓܰྔϓϩηεͰॲཧ͢Δϝοηʔδϋϯυϥ• 8FC4PDLFU
ྑ͍͜ͱ͔Γݴ͍·͕ͨ͠ŋŋŋ• ฒߦੑೳ͕ߴ͍ɺԠੑೳ͕ྑ͍ͱݴ͕ͬͨʮܭࢉ͕͍ʯͱݴͬͯͳ͍– 1IPFOJYελοΫ3BJMTΑΓ͍ɺ͚Ͳ– ಈతܕ͚ݴޠͰ͢͠– ˞ҰԠ)J1&ʹ͢Δͱ͘ͳΔΑ͏• ؔܕݴޠͱͯͦ͜͠·ͰߴػೳͰͳ͍• ݸਓతͳେنӡ༻ͯ͠ͳ͍ͷͰ$POTΛޠΔʹݟΓͳ͍• &MJYJSྲྀߦΔ͔·ͩະ– ϓϩμΫγϣϯೖࣄྫ·ͩ͜Ε͔Β
લฤॻ͖·ͨ͠ɻޙฤ࣍߸Ͱ