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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Atsushi Takayama
April 15, 2016
Technology
4.3k
2
Share
pixivにおけるHHVMとPHP7 と、高速化事例紹介
PHP7 Casual Talks #2で発表した内容です。
Atsushi Takayama
April 15, 2016
More Decks by Atsushi Takayama
See All by Atsushi Takayama
最高の開発者体験の追求が開発生産性を改善し続ける文化を生み出した話
edvakf
3
1.6k
NeurIPS 2021 論文読み会: How Modular should Neural Module Networks Be for Systematic Generalization?
edvakf
0
220
8年物のJavaのシステムをKotlinに変えていく選択に至るまで
edvakf
2
1.1k
ピクシブ社内のImageFlux利用事例紹介
edvakf
2
3k
学びの文化を育む社内読書会のススメ
edvakf
0
310
フルCDNアーキテクチャでサービス設計した話
edvakf
5
4.1k
Goでバイナリを読む+α
edvakf
1
1k
お前はこれまでに作ったAPIの数を覚えているのか?
edvakf
0
2.7k
「ふつうのRailsアプリケーション」についての考え方
edvakf
2
930
Other Decks in Technology
See All in Technology
AIを共同作業者にして書籍を執筆する方法 / How to Write a Book with AI as a Co-Creator
ama_ch
2
150
ハーネスエンジニアリングの概要と設計思想
sergicalsix
9
5.3k
国内外の生成AIセキュリティの最新動向 & AIガードレール製品「chakoshi」のご紹介 / Latest Trends in Generative AI Security (Domestic & International) & Introduction to AI Guardrail Product "chakoshi"
nttcom
4
1.4k
AI와 협업하는 조직으로의 여정
arawn
0
510
AWS Transform CustomでIaCコードを自由自在に変換しよう
duelist2020jp
0
140
The Journey of Box Building
tagomoris
4
3.4k
Percolatorを廃止し、マルチ検索サービスへ刷新した話 / Search Engineering Tech Talk 2026 Spring
visional_engineering_and_design
0
150
[OpsJAWS 40]リリースしたら終わり、じゃなかった。セキュリティ空白期間をAWS Security Agentで埋める
sh_fk2
3
250
Claude Code を安全に使おう勉強会 / Claude Code Security Basics
masahirokawahara
12
36k
独断と偏見で試してみる、 シングル or マルチエージェント どっちがいいの?
shichijoyuhi
1
130
Pure Intonation on Browser: Building a Sequencer with Ruby
nagachika
0
160
Cortex Codeのコスト見積ヒントご紹介
yokatsuki
0
110
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Between Models and Reality
mayunak
3
270
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.4k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
310
Ruling the World: When Life Gets Gamed
codingconduct
0
210
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
180
Documentation Writing (for coders)
carmenintech
77
5.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.8k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Practical Orchestrator
shlominoach
191
11k
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ϨϕϧͷߴԽࣄྫΛհͨ͠