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.2k
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
1.2k
NeurIPS 2021 論文読み会: How Modular should Neural Module Networks Be for Systematic Generalization?
edvakf
0
160
8年物のJavaのシステムをKotlinに変えていく選択に至るまで
edvakf
2
1k
ピクシブ社内のImageFlux利用事例紹介
edvakf
1
2.8k
学びの文化を育む社内読書会のススメ
edvakf
0
250
フルCDNアーキテクチャでサービス設計した話
edvakf
5
3.9k
Goでバイナリを読む+α
edvakf
1
930
お前はこれまでに作ったAPIの数を覚えているのか?
edvakf
0
2.5k
「ふつうのRailsアプリケーション」についての考え方
edvakf
2
820
Other Decks in Technology
See All in Technology
Automatically generating types by running tests
sinsoku
2
3.4k
より良い開発者体験を実現するために~開発初心者が感じた生成AIの可能性~
masakiokuda
0
200
日経電子版 for Android の技術的課題と取り組み(令和最新版)/android-20250423
nikkei_engineer_recruiting
0
420
AWSLambdaMCPServerを使ってツールとMCPサーバを分離する
tkikuchi
1
3.1k
Linuxのパッケージ管理とアップデート基礎知識
go_nishimoto
0
380
更新系と状態
uhyo
7
1.7k
アセスメントで紐解く、10Xのデータマネジメントの軌跡
10xinc
1
440
彩の国で始めよう。おっさんエンジニアから共有したい、当たり前のことを当たり前にする技術
otsuki
0
150
Amazon CloudWatch を使って NW 監視を行うには
o11yfes2023
0
170
AIと開発者の共創: エージェント時代におけるAIフレンドリーなDevOpsの実践
bicstone
1
320
AIでめっちゃ便利になったけど、結局みんなで学ぶよねっていう話
kakehashi
PRO
0
190
Would you THINK such a demonstration interesting ?
shumpei3
1
230
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
135
33k
How STYLIGHT went responsive
nonsquared
99
5.5k
Code Review Best Practice
trishagee
67
18k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.4k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Speed Design
sergeychernyshev
29
900
Site-Speed That Sticks
csswizardry
5
500
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
StorybookのUI Testing Handbookを読んだ
zakiyama
29
5.6k
4 Signs Your Business is Dying
shpigford
183
22k
Embracing the Ebb and Flow
colly
85
4.6k
A Tale of Four Properties
chriscoyier
158
23k
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ϨϕϧͷߴԽࣄྫΛհͨ͠