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
1k
NeurIPS 2021 論文読み会: How Modular should Neural Module Networks Be for Systematic Generalization?
edvakf
0
120
8年物のJavaのシステムをKotlinに変えていく選択に至るまで
edvakf
2
1k
ピクシブ社内のImageFlux利用事例紹介
edvakf
1
2.7k
学びの文化を育む社内読書会のススメ
edvakf
0
210
フルCDNアーキテクチャでサービス設計した話
edvakf
5
3.7k
Goでバイナリを読む+α
edvakf
1
880
お前はこれまでに作ったAPIの数を覚えているのか?
edvakf
0
2.4k
「ふつうのRailsアプリケーション」についての考え方
edvakf
2
750
Other Decks in Technology
See All in Technology
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
0
110
サイバーセキュリティと認知バイアス:対策の隙を埋める心理学的アプローチ
shumei_ito
0
380
開発生産性を上げながらビジネスも30倍成長させてきたチームの姿
kamina_zzz
2
1.7k
ドメイン名の終活について - JPAAWG 7th -
mikit
33
20k
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
5
590
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
20241120_JAWS_東京_ランチタイムLT#17_AWS認定全冠の先へ
tsumita
2
240
iOSチームとAndroidチームでブランチ運用が違ったので整理してます
sansantech
PRO
0
130
Can We Measure Developer Productivity?
ewolff
1
150
初心者向けAWS Securityの勉強会mini Security-JAWSを9ヶ月ぐらい実施してきての近況
cmusudakeisuke
0
120
Python(PYNQ)がテーマのAMD主催のFPGAコンテストに参加してきた
iotengineer22
0
470
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.6k
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Speed Design
sergeychernyshev
24
610
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Building Your Own Lightsaber
phodgson
103
6.1k
BBQ
matthewcrist
85
9.3k
Automating Front-end Workflow
addyosmani
1366
200k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Side Projects
sachag
452
42k
Being A Developer After 40
akosma
86
590k
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ϨϕϧͷߴԽࣄྫΛհͨ͠