Slide 1

Slide 1 text

pixivʹ͓͚ΔHHVMͱPHP7 ͱɺߴ଎Խࣄྫ঺հ PHP7 Casual Talks #2

Slide 2

Slide 2 text

www.pixiv.net

Slide 3

Slide 3 text

ࣗݾ঺հ • ߴࢁ Թ @edvakf • ϐΫγϒͰ͸ϦʔυΤϯδχΞ • pixivͷອըࣄۀͷ։ൃ੹೚ऀ • ձࣾͷٕज़બ୒Λԁ׈ʹਐΊΔͨΊͷମ੍ͮ͘Γ • Α͘ॻ͘ݴޠ͸PHP, Ruby, Go, Scala, JavaScript • ʮࣾ಺ͷΤϯδχΞ͕޾ͤʹಇͨ͘Ίʹ͸ʯΛߟ࣮͑ݱ͢Δۀ

Slide 4

Slide 4 text

pixiv.git www.pixiv.net ͱෳ਺ͷؔ࿈αʔϏεΛؚΉڊେϦϙδτϦ find . -name '*.php' | xargs cat | wc -l 69ສߦ ϑΝʔετίϛοτ͸2007೥9݄ PHP5.2 → 5.3 → 5.5ͱมભ ίʔυϕʔεશମʹؔΘΔϦϑΝΫλϦϯάΛز౓΋ܦݧ

Slide 5

Slide 5 text

pixivͱߴ଎Խ ඵؒ1ສϦΫΤετΛ30୆Ͱࡹ͘ ചΓ্͛ͷແ͍࣌୅ʹٸ੒௕ͨ͜͠ͱ͔Βɺαʔόʔ ୆਺ΛݮΒ͢͜ͱʹࣥ೦Λ೩΍͖ͯͨ͠ྺ࢙తܦҢ ϑϨʔϜϫʔΫͱݴ͑ͳ͍͙Β͍ബ͍ಠࣗϑϨʔϜϫʔ ΫΛ࢖༻͢Δ͜ͱͰΦʔόʔϔουΛճආ

Slide 6

Slide 6 text

HHVM

Slide 7

Slide 7 text

ฏۉϨεϙϯελΠϜΛ20%୹ॖ

Slide 8

Slide 8 text

※Ұ෦ͷϖʔδͷΈͰಋೖ

Slide 9

Slide 9 text

HHVMͷར༻ ಛఆͷύε΁ͷϦΫΤετͷҰ෦ΛϦόʔεϓϩΩγͰHHVMʹ ྲྀ͢ pixivͷϦΫΤετͷ3ʙ4ׂΛ઎ΊΔϖʔδ ͨͩ͠ίʔυͷׂ߹͸0.003% ΤΫεςϯγϣϯ·ΘΓҎ֎Ͱ͸ಛʹHHVMରԠͷमਖ਼͸͠ͳ ͔ͬͨ ൒೥͙Β͍ຊ൪؀ڥͰݕূ͍ͯͨ͠

Slide 10

Slide 10 text

׬શҠߦ͠ͳ͔ͬͨཧ༝ ͍͔ͭ͘ͷpeclΤΫεςϯγϣϯ͕ରԠݟࠐΈ͕ແ ͔ͬͨ ಛʹςετͰͷΈ࢖͍ͬͯΔ΋ͷ HHBC͕σϓϩΠͷͨͼʹ๲Εଓ͚ΔͷͰɺఆظతʹ ࠶ىಈ͍ͯͨ͠ PHP7Λ଴ͭ͜ͱʹ

Slide 11

Slide 11 text

PHP7Խ΁ͷಓ PHP7΋։ൃ؀ڥͰݕূத ΄΅໰୊ͳ͘ಈ͍͍ͯΔ HHVMͱಉ༷ɺະରԠͷpeclΤΫεςϯγϣϯ͕՝୊ ि̍ճͷϦϑΝΫλϦϯάࡇΓͰPHP7Խ pixiv.gitͷ΄ͱΜͲͷ։ൃऀ͸݄͙̍Β͍ͷϖʔεͰ λʔϯ͕·Θͬͯ͘Δ

Slide 12

Slide 12 text

͜Ε·Ͱͷ੒Ռ mysql_* ؔ਺ͷഇࢭ ਺ઍՕॴΛ̍೔ͰPDOʹஔ׵ pecl solrͷഇࢭ file_get_contentsͰHTTPϦΫΤετԽ ࠷ۙʹͳͬͯPHP7ରԠ͕׆ൃʹ ςετΛtimecopඇґଘʹ ͜Ε΋࠷ۙʹͳͬͯhnw͞Μ͕ରԠ ΛਐΊ͍ͯΔ php7ccͰҾ͔͔ͬΔՕॴͷमਖ਼ runkitʹґଘ͍ͯͨ͠ςετΛrunkit7ʹ runkitͷ͏ͪ1ؔ਺͔͠࢖͍ͬͯͳ͔ͬͨ memcacheϞδϡʔϧΛmemcachedϞ δϡʔϧʹஔ͖׵͑ ෭࣍ޮՌͱͯ͠ɺE_STRICTΛࠓ·Ͱ͸ແࢹ ͍͕ͯͨ͠ɺ͢΂ͯͭͿͯ͠ΊͰͨ͘Τϥʔ ϨϕϧΛ্͛Δ͜ͱ͕Ͱ͖ͨ ͞Βʹ෭࣍ޮՌͰશ໘తʹautoloaderΛಋೖ

Slide 13

Slide 13 text

pixivͷߴ଎Խࣄྫ঺հ

Slide 14

Slide 14 text

pixivͷߴ଎Խ΁ͷऔΓ૊Έ ʢਖ਼֬ʹ͸αʔόʔΛݮΒͨ͢Ίͷ࠷దԽʣ جຊతʹ͸పఈతʹΩϟογϡ͠·͘Δઓུ KyotoTycoonͱAPCuͷೋஈΩϟογϡ ͔͠͠ϩϯάςʔϧͳαʔϏεͷ᠘… CPU͸DBϦΫΤετʹൺ΂ͯϘτϧωοΫͰ͸ͳ͍͜ͱ͕ଟ͍ ͷͰɺΑͬΆͲͷ͜ͱ͕ແ͍ͱPHPϨϕϧͰͷߴ଎Խʹ͸खΛग़ ͞ͳ͍

Slide 15

Slide 15 text

ࣄྫ̍ ϒϧʔϜϑΟϧλ ΫΤϦͷछྨ͕๲େ͕ͩɺ΄ͱΜͲώοτ͠ͳ͍ύλʔϯ ಛʹ̍ϖʔδ͋ͨΓෳ਺ճΫΤϦ͕૸Δ৔߹ ώοτ͠ͳ͍ͷʹDBΛҾ͘ͷ͕ແବײ ʮϨίʔυ͕ଘࡏ͠ͳ͍ʯͱ͍͏ΩϟογϡʢωΨςΟϒΩϟογϡʣΛ APCuʹ࣋ͭʁ APCuͷϝϞϦ͕େྔʹඞཁ ͦ͜ͰϒϧʔϜϑΟϧλ inside.pixiv.net/entry/2014/07/22/132103

Slide 16

Slide 16 text

ࣄྫ̎ fast_str_replace ϨεϙϯεͷதͰɺಛఆͷϫʔυΛ͢΂ͯஔ׵ ྫɿಛఆͷࠃͰݕӾ͞Ε͍ͯΔ୯ޠΛ͢΂ۭͯจࣈʹ fast_str_replace ͱ͍͏ΤΫεςϯγϣϯΛ࡞੒ pixivͷϢʔεέʔεͰ͸ str_replace ͷ5ഒߴ଎ ۃྗΤΫεςϯγϣϯʹґଘͨ͘͠ͳ͍ͷͰɺ͍ͭͰ΋ str_replace ʹ໭ͤΔΑ͏ʹAPIΛἧ͑ͨ ͨͩ͠ୈҰҾ਺ʹ͸ιʔτࡁΈ഑ྻ͔͠౉ͤͳ͍

Slide 17

Slide 17 text

ࣄྫ̏ ϧʔςΟϯά mod_rewriteΛ΍Ί͍ͯ͘ྲྀΕ PHPͰϧʔςΟϯάͯ͠Έͨˠ஗͍ˠߴ଎Խ͠Α͏ inside.pixiv.net/entry/2015/12/13/145741 ڞ௨͢Δ઀಄ࣙΛ࿈૝഑ྻԽʢύτϦγΞ໦ʣͯ͠ߴ଎ʹ୳ࡧ FastRouteͷΑ͏ʹɺϧʔςΟϯάͷΩϟογϡΛ࡞Βͳͯ͘ ΋े෼ʹߴ଎ͩͬͨͷͰɺ࢖͍উखͷ໘Ͱ࠾༻

Slide 18

Slide 18 text

ࣄྫ̐ ςϯϓϨʔτΤϯδϯJingu pixivͷCPU࣌ؒͷ൒෼͙Β͍͸Smarty͕઎Ί͍ͯΔ ύʔαɾδΣωϨʔλʹΑΔςϯϓϨʔτΤϯδϯΛࣗ࡞ͯ͠Έͨ ςϯϓϨʔτΤϯδϯNightͰൃද http://pirosikick.hateblo.jp/entry/2014/10/18/113907 https://github.com/atsumu/jingu ؔ਺ݺͼग़͠ΛݮΒͯ͠10ഒ͙Β͍଎ͨ͘͠࿩ͳͲ HHVM΍PHP7Ͱؔ਺ݺͼग़͕͠଎͘ͳͬͨͷͰࠓͩͱҧ࣮ͬͨ૷ʹͳΔ͔΋ʁ ·ͩಋೖʹ͸ࢸΒͣ

Slide 19

Slide 19 text

·ͱΊ pixivͰHHVMΛ൒೥΄Ͳ࣮ӡ༻ͯ͠ݕূ͍ͯͨ͠ ϨεϙϯελΠϜΛ20%୹ॖ͢Δ͜ͱ͕Ͱ͖ͨ ݱࡏ͸PHP7ԽΛਐΊ͍ͯΔ ͦͷଞpixivͷPHPϨϕϧͷߴ଎ԽࣄྫΛ঺հͨ͠