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
PHP で学ぶ Cache の距離の話 / study_cache_with_php
Search
Ryo Tomidokoro
March 23, 2023
Technology
7
2.6k
PHP で学ぶ Cache の距離の話 / study_cache_with_php
PHPerKaigi 2023 登壇資料
Ryo Tomidokoro
March 23, 2023
Tweet
Share
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
hanhan1978
8
3.3k
Spec Driven Development入門/spec_driven_development_for_learners
hanhan1978
2
1.5k
フロントエンドがTypeScriptなら、バックエンドはPHPでもいいじゃない/php-is-not-bad
hanhan1978
8
13k
どうすると生き残れないのか/how-not-to-survive
hanhan1978
17
14k
100分で本番デプロイ!Laravelで作るWebアプリケーション作成/100min_web_app_cicd
hanhan1978
1
240
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
3.4k
集中して作業する技術/how_to_work_deeply
hanhan1978
65
54k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
11k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
8
4.7k
Other Decks in Technology
See All in Technology
FinTech SREのAWSサービス活用/Leveraging AWS Services in FinTech SRE
maaaato
0
130
予期せぬコストの急増を障害のように扱う――「コスト版ポストモーテム」の導入とその後の改善
muziyoshiz
1
2k
Context Engineeringが企業で不可欠になる理由
hirosatogamo
PRO
3
620
AI駆動開発を事業のコアに置く
tasukuonizawa
1
270
こんなところでも(地味に)活躍するImage Modeさんを知ってるかい?- Image Mode for OpenShift -
tsukaman
1
160
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
68k
Amazon S3 Vectorsを使って資格勉強用AIエージェントを構築してみた
usanchuu
3
450
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
480
15 years with Rails and DDD (AI Edition)
andrzejkrzywda
0
200
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
970
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
200
Context Engineeringの取り組み
nutslove
0
360
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
440
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
We Are The Robots
honzajavorek
0
160
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
140
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
330
Color Theory Basics | Prateek | Gurzu
gurzu
0
200
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2k
Transcript
@hanhan1978 PHPで学ぶ Cacheの距離 の話 PHPerKaigi 2023
@hanhan1978 • 富所 亮 • 所属 株式会社カオナビ BackEnd Re-architecturing Team
(BERT) • 職業 バックエンドエンジニア • ブログ https://blog.hanhans.net • Yokohama North AM https://anchor.fm/yokohama-north-am 2
まずはこれを見てほしい 3
4 レイテンシーの表 https://colin-scott.github.io/personal_website/research/interactive_latency.html
5 本トークの目標
6 Cache をテーマに 新しい視点 を獲得してほしい
7 そもそも Cache とは?
8 https://www.weblio.jp/content/cache weblio - デジタル大辞泉
ようするに...... デジタルデータストア 9
10 Cache する とは?
プログラミングの文脈で Cacheする と表現した場合 デジタルデータストア を使ったバッファリング 11
12 バッファリング とは?
13 https://www.weblio.jp/content/バッファリング weblio - デジタル大辞泉
14 バッファリング 日常的にも使われている
例 : 宅配便 1. 荷受け場所 → 地域の中継施設 → 県の中継施設 <<
大型輸送手段で一気に運ぶ >> 2. 県の中継施設 → 地域の中継施設 → 最寄の宅配便 15
16 宅配便におけるバッファリング バッファリング
17 プログラミングにおける例
18 プログラマーのためのCPU入門 : 第五章 キャッシュメモリ より CPU - 命令キャッシュ -
データキャッシュ 命令流の高密度化が損なわれる ことを緩和
19 Linux の仕組み : 第8章 記憶階層 より OS のページキャッシュ 低速ストレージのアクセス速度向
上のため、ファイルデータをメモリ にキャッシュ
20 https://speakerdeck.com/hanhan1978/preload-and-jit PHP の OPCache コンパイルされた内容をメモリに キャッシュ
21 https://speakerdeck.com/hanhan1978/preload-and-jit CDN を使ったウェブコンテンツ配信 Akamai, CloudFront, CloudFlare エッジでの WASM とかも
距離を減らす戦略の一つ
22 いろいろな例をみた上で キャッシュを使うパターンを考える
キャッシュのパターン - より近いデータストアにデータを置く - 演算結果をデータストアに置く 23
キャッシュのパターン - より近いデータストアにデータを置く - 演算結果をデータストアに置く 24 IOバッファ 演算バッファ
IOバッファ データをより高速でアクセスできる場所に置く 演算バッファ 時間のかかる演算の処理結果を保存する 25
26 課題に対して 適切なバッファリングを選択すること
27 ケーススタディ
PHPウェブアプリケーションの改善 28
29 DB クエリ結果のキャッシュ データベースの問い合わせ結果を KVS にキャッシュ ウェブアプリケーションで最 もよく使われる Cache の
パターン
30 プロファイラー Xhprof, Datadog, New Relic 計測できれば何でもOK
レイテンシを分析 31 その処理時間は データIO ??? 演算 ???
レイテンシを分析 2 32 この例では データIO と 演算 を キャッシュを使うことで削減
設計のポイント - 計測して、レイテンシーの中身を分析 - バッファにより何を改善するのかを明確化 33
34 落とし穴
35 距離が変わらない Cache Redis 10,000 GET 600 ms MySQL 10,000
SELECT 800 ms 演算がボトルネックではない上に データIOも距離が変わってない
36 距離が変わらない Cache Redis 10,000 GET 600 ms MySQL 10,000
SELECT 800 ms 演算がボトルネックではない上に データIOも距離が変わってない レスポンスタイム向上が目的だとしたら失敗 DBコネクション数の削減なら成功 → 目的がとっても大事
IOバッファは距離が大事 - 元の処理の距離 - 改善後の処理の距離 37
PHP で使える Cache とレイテンシ - データベース 500 μs - Redis
(KVS) 500 μs - ファイル 16 μs - メモリ 100 ns ( 0.1 μs) 38
39 レイテンシーの表 https://colin-scott.github.io/personal_website/research/interactive_latency.html
40 レイテンシーの表 https://colin-scott.github.io/personal_website/research/interactive_latency.html ネットワーク ファイル メモリ
41 距離を変える Redis 10,000 GET 57 ms MySQL 10,000 SELECT
800 ms 距離を変えたので IO バッファが効い た
おさらい Cache を使ったバッファリングで速度改善できるのは - 演算処理 - IO処理 何を改善したくて Cache を使うのか?
まず計測をした上で 明確な目的 を持つこと 42
おまけ 43
44 落とし穴2
Cache は要注意 - 古い情報の Cache - Cache ストアの可用性 - サンダリングハード
45
参考情報 - Webサービスにおける キャッシュ戦略 - Speaker Deck https://speakerdeck.com/yusukebe/websabisuniokeru-kiyatusiyuzhan-lue - Webアプリケーションのキャッシュ戦略とそのパターン
- Speaker Deck https://speakerdeck.com/moznion/pattern-and-strategy-of-web-application-caching 46
47 落とし穴3
48 Cache しないで済むなら しないに越したことはない
PHP における Cache の注意点 - Serialize, Unserialize のコスト - Cache
機構自体が備える安全担保のコスト 巨大データをキャッシュしても、データ取得後の unserialize にコストがか かるので、キャッシュの旨味が少ないときがある 49
Cache による処理時間削減は 0 じゃない 50 ここで Cache 取得にまつわる コストが発生している
51 絶対に計測して確認すること!
immutable_cache 52 https://pecl.php.net/package/immutable_cache apcu からメモリへの値コピーを 除外したもの
配列1件を cache → 10,000 回取得 - apcu 55msec - immutable_cache
55msec 性能は変わらない 53
配列5000件を cache → 10,000 回取得 - apcu 6.4 sec -
immutable_cache 67 msec 実測することで、cache 処理自体への理解も進む 54
55 落とし穴4
メモリ Cache の注意点 - 複数台構成だと Cache アウトを制御しづらい - サーバーA では最新、サーバーB
では古いなどが発生 キャッシュの新旧チェックや、生存期間を考慮する必要がないデータに限 定するなど、工夫が必要 56
@hanhan1978 相談・指摘・その他 下記のTwitterアカウントにどうぞ 57