Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
pixivにおけるHHVMとPHP7 と、高速化事例紹介
Search
Atsushi Takayama
April 15, 2016
Technology
2
4.1k
pixivにおけるHHVMとPHP7 と、高速化事例紹介
PHP7 Casual Talks #2で発表した内容です。
Atsushi Takayama
April 15, 2016
Tweet
Share
More Decks by Atsushi Takayama
See All by Atsushi Takayama
最高の開発者体験の追求が開発生産性を改善し続ける文化を生み出した話
edvakf
3
890
NeurIPS 2021 論文読み会: How Modular should Neural Module Networks Be for Systematic Generalization?
edvakf
0
100
8年物のJavaのシステムをKotlinに変えていく選択に至るまで
edvakf
2
910
ピクシブ社内のImageFlux利用事例紹介
edvakf
1
2.4k
学びの文化を育む社内読書会のススメ
edvakf
0
160
フルCDNアーキテクチャでサービス設計した話
edvakf
5
3.5k
Goでバイナリを読む+α
edvakf
1
790
お前はこれまでに作ったAPIの数を覚えているのか?
edvakf
0
2.2k
「ふつうのRailsアプリケーション」についての考え方
edvakf
2
630
Other Decks in Technology
See All in Technology
Databricks におけるデータエンジニアリング
databricksjapan
0
380
少数チームで挑む: SwiftUI, TCA, KMPを用いた 新規動画配信アプリ 「ABEMA Live」の開発について
tomu28
0
550
"好き"との生活/Regularly update profile with GitHub Actions
judeeeee
0
150
Garoon 開発チーム / Garoon development team
cybozuinsideout
PRO
2
2.9k
「ふりかえりのふりかえり」をふりかえり、実のあるふりかえりにする
naitosatoshi
0
230
Postman v10リリース後を振り返る / Looking back at Postman v10 after release
yokawasa
1
100
NgRx Signal Store
rainerhahnekamp
0
130
クラウドサインにおけるプロダクトマネージャーの役割と開発プロセス / 20240410_cloudsign-PdM
bengo4com
1
690
4年前、あるじゃん老害エンジニアLT合戦に登壇、米国西海岸コンピュータ歴史博物館体験記の続編
toshi_atsumi
0
200
マルチアカウント環境への発見的統制の導入
ch1aki
1
1.3k
Cloud Native Java with Spring Boot (CNCF Aarhus, April 2024)
thomasvitale
1
130
Next'24 事例セッションの紹介とクラウド資格を活用したキャリア形成について語りMuscle
yasumuusan
1
360
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
59
3.9k
Mobile First: as difficult as doing things right
swwweet
216
8.6k
VelocityConf: Rendering Performance Case Studies
addyosmani
320
23k
Optimizing for Happiness
mojombo
370
69k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Why You Should Never Use an ORM
jnunemaker
PRO
50
8.6k
Reflections from 52 weeks, 52 projects
jeffersonlam
344
19k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
658
120k
Scaling GitHub
holman
457
140k
For a Future-Friendly Web
brad_frost
171
8.9k
Design by the Numbers
sachag
274
18k
Build The Right Thing And Hit Your Dates
maggiecrowley
23
2k
Transcript
pixivʹ͓͚ΔHHVMͱPHP7 ͱɺߴԽࣄྫհ PHP7 Casual Talks #2
www.pixiv.net
ࣗݾհ • ߴࢁ Թ @edvakf • ϐΫγϒͰϦʔυΤϯδχΞ • pixivͷອըࣄۀͷ։ൃऀ •
ձࣾͷٕज़બΛԁʹਐΊΔͨΊͷମ੍ͮ͘Γ • Α͘ॻ͘ݴޠPHP, Ruby, Go, Scala, JavaScript • ʮࣾͷΤϯδχΞ͕ͤʹಇͨ͘ΊʹʯΛߟ࣮͑ݱ͢Δۀ
pixiv.git www.pixiv.net ͱෳͷؔ࿈αʔϏεΛؚΉڊେϦϙδτϦ find . -name '*.php' | xargs cat
| wc -l 69ສߦ ϑΝʔετίϛοτ20079݄ PHP5.2 → 5.3 → 5.5ͱมભ ίʔυϕʔεશମʹؔΘΔϦϑΝΫλϦϯάΛزܦݧ
pixivͱߴԽ ඵؒ1ສϦΫΤετΛ30Ͱࡹ͘ ചΓ্͛ͷແ͍࣌ʹٸͨ͜͠ͱ͔Βɺαʔόʔ ΛݮΒ͢͜ͱʹࣥ೦Λ೩͖ͯͨ͠ྺ࢙తܦҢ ϑϨʔϜϫʔΫͱݴ͑ͳ͍͙Β͍ബ͍ಠࣗϑϨʔϜϫʔ ΫΛ༻͢Δ͜ͱͰΦʔόʔϔουΛճආ
HHVM
ฏۉϨεϙϯελΠϜΛ20%ॖ
※Ұ෦ͷϖʔδͷΈͰಋೖ
HHVMͷར༻ ಛఆͷύεͷϦΫΤετͷҰ෦ΛϦόʔεϓϩΩγͰHHVMʹ ྲྀ͢ pixivͷϦΫΤετͷ3ʙ4ׂΛΊΔϖʔδ ͨͩ͠ίʔυͷׂ߹0.003% ΤΫεςϯγϣϯ·ΘΓҎ֎ͰಛʹHHVMରԠͷमਖ਼͠ͳ ͔ͬͨ ͙Β͍ຊ൪ڥͰݕূ͍ͯͨ͠
શҠߦ͠ͳ͔ͬͨཧ༝ ͍͔ͭ͘ͷpeclΤΫεςϯγϣϯ͕ରԠݟࠐΈ͕ແ ͔ͬͨ ಛʹςετͰͷΈ͍ͬͯΔͷ HHBC͕σϓϩΠͷͨͼʹΕଓ͚ΔͷͰɺఆظతʹ ࠶ىಈ͍ͯͨ͠ PHP7Λͭ͜ͱʹ
PHP7Խͷಓ PHP7։ൃڥͰݕূத ΄΅ͳ͘ಈ͍͍ͯΔ HHVMͱಉ༷ɺະରԠͷpeclΤΫεςϯγϣϯ͕՝ ि̍ճͷϦϑΝΫλϦϯάࡇΓͰPHP7Խ pixiv.gitͷ΄ͱΜͲͷ։ൃऀ݄͙̍Β͍ͷϖʔεͰ λʔϯ͕·Θͬͯ͘Δ
͜Ε·ͰͷՌ mysql_* ؔͷഇࢭ ઍՕॴΛ̍ͰPDOʹஔ pecl solrͷഇࢭ file_get_contentsͰHTTPϦΫΤετԽ ࠷ۙʹͳͬͯPHP7ରԠ͕׆ൃʹ ςετΛtimecopඇґଘʹ ͜Ε࠷ۙʹͳͬͯhnw͞Μ͕ରԠ
ΛਐΊ͍ͯΔ php7ccͰҾ͔͔ͬΔՕॴͷमਖ਼ runkitʹґଘ͍ͯͨ͠ςετΛrunkit7ʹ runkitͷ͏ͪ1͔͍ؔͬͯ͠ͳ͔ͬͨ memcacheϞδϡʔϧΛmemcachedϞ δϡʔϧʹஔ͖͑ ෭࣍ޮՌͱͯ͠ɺE_STRICTΛࠓ·Ͱແࢹ ͍͕ͯͨ͠ɺͯͭ͢Ϳͯ͠ΊͰͨ͘Τϥʔ ϨϕϧΛ্͛Δ͜ͱ͕Ͱ͖ͨ ͞Βʹ෭࣍ޮՌͰશ໘తʹautoloaderΛಋೖ
pixivͷߴԽࣄྫհ
pixivͷߴԽͷऔΓΈ ʢਖ਼֬ʹαʔόʔΛݮΒͨ͢Ίͷ࠷దԽʣ جຊతʹపఈతʹΩϟογϡ͠·͘Δઓུ KyotoTycoonͱAPCuͷೋஈΩϟογϡ ͔͠͠ϩϯάςʔϧͳαʔϏεͷ᠘… CPUDBϦΫΤετʹൺͯϘτϧωοΫͰͳ͍͜ͱ͕ଟ͍ ͷͰɺΑͬΆͲͷ͜ͱ͕ແ͍ͱPHPϨϕϧͰͷߴԽʹखΛग़ ͞ͳ͍
ࣄྫ̍ ϒϧʔϜϑΟϧλ ΫΤϦͷछྨ͕େ͕ͩɺ΄ͱΜͲώοτ͠ͳ͍ύλʔϯ ಛʹ̍ϖʔδ͋ͨΓෳճΫΤϦ͕Δ߹ ώοτ͠ͳ͍ͷʹDBΛҾ͘ͷ͕ແବײ ʮϨίʔυ͕ଘࡏ͠ͳ͍ʯͱ͍͏ΩϟογϡʢωΨςΟϒΩϟογϡʣΛ APCuʹ࣋ͭʁ APCuͷϝϞϦ͕େྔʹඞཁ ͦ͜ͰϒϧʔϜϑΟϧλ inside.pixiv.net/entry/2014/07/22/132103
ࣄྫ̎ fast_str_replace ϨεϙϯεͷதͰɺಛఆͷϫʔυΛͯ͢ஔ ྫɿಛఆͷࠃͰݕӾ͞Ε͍ͯΔ୯ޠΛۭͯ͢จࣈʹ fast_str_replace ͱ͍͏ΤΫεςϯγϣϯΛ࡞ pixivͷϢʔεέʔεͰ str_replace ͷ5ഒߴ ۃྗΤΫεςϯγϣϯʹґଘͨ͘͠ͳ͍ͷͰɺ͍ͭͰ
str_replace ʹͤΔΑ͏ʹAPIΛἧ͑ͨ ͨͩ͠ୈҰҾʹιʔτࡁΈྻ͔ͤ͠ͳ͍
ࣄྫ̏ ϧʔςΟϯά mod_rewriteΛΊ͍ͯ͘ྲྀΕ PHPͰϧʔςΟϯάͯ͠Έͨˠ͍ˠߴԽ͠Α͏ inside.pixiv.net/entry/2015/12/13/145741 ڞ௨͢Δ಄ࣙΛ࿈ྻԽʢύτϦγΞʣͯ͠ߴʹ୳ࡧ FastRouteͷΑ͏ʹɺϧʔςΟϯάͷΩϟογϡΛ࡞Βͳͯ͘ ेʹߴͩͬͨͷͰɺ͍উखͷ໘Ͱ࠾༻
ࣄྫ̐ ςϯϓϨʔτΤϯδϯJingu pixivͷCPU࣌ؒͷ͙Β͍Smarty͕Ί͍ͯΔ ύʔαɾδΣωϨʔλʹΑΔςϯϓϨʔτΤϯδϯΛࣗ࡞ͯ͠Έͨ ςϯϓϨʔτΤϯδϯNightͰൃද http://pirosikick.hateblo.jp/entry/2014/10/18/113907 https://github.com/atsumu/jingu ؔݺͼग़͠ΛݮΒͯ͠10ഒ͙Β͍ͨ͘͠ͳͲ HHVMPHP7Ͱؔݺͼग़͕͘͠ͳͬͨͷͰࠓͩͱҧ࣮ͬͨʹͳΔ͔ʁ ·ͩಋೖʹࢸΒͣ
·ͱΊ pixivͰHHVMΛ΄Ͳ࣮ӡ༻ͯ͠ݕূ͍ͯͨ͠ ϨεϙϯελΠϜΛ20%ॖ͢Δ͜ͱ͕Ͱ͖ͨ ݱࡏPHP7ԽΛਐΊ͍ͯΔ ͦͷଞpixivͷPHPϨϕϧͷߴԽࣄྫΛհͨ͠