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.3k
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
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
6
1.7k
集中して作業する技術/how_to_work_deeply
hanhan1978
61
45k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
9.6k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
8
3.8k
B+木入門:PHPで理解する データベースインデックスの仕組み/b-plus-tree-101
hanhan1978
5
4.8k
ADRを一年運用してみた/our_story_about_adr
hanhan1978
5
2.1k
PHPで学ぶ Session の基本と応用 / web-app-session-101-2024
hanhan1978
12
5.6k
レガシー回避のPHP開発術/avoid_php_legacy
hanhan1978
16
13k
Laravel Collectionの計算量を調べてみた2023/laravel_collection_time_complexity_2023
hanhan1978
1
1.5k
Other Decks in Technology
See All in Technology
Site Reliability Engineering on Kubernetes
nwiizo
6
4.4k
マルチデータプロダクト開発・運用に耐えるためのデータ組織・アーキテクチャの遷移
mtpooh
0
160
Amazon Aurora バージョンアップについて、改めて理解する ~バージョンアップ手法と文字コードへの影響~
smt7174
1
250
Redmineの意外と知らない便利機能 (Redmine 6.0対応版)
vividtone
0
190
あなたはJVMの気持ちを理解できるか?
skrb
5
2k
Creative Pair
kawaguti
PRO
1
140
Grid表示のレイアウトで Flow layoutsを使う
cffyoha
1
150
一人から始めたSREチーム3年の歩み - 求められるスキルの変化とチームのあり方 - / The three-year journey of the SRE team, which started all by myself
vtryo
7
5.7k
Japan AWS Jr. Championsがお届けするre:Invent2024のハイライト ~ラスベガスで見てきた景色~
fukuchiiinu
0
1.1k
Server Side Swift 実践レポート: 2024年に案件で採用して見えた課題と可能性
yusuga
1
420
地方企業がクラウドを活用するヒント
miu_crescent
PRO
1
110
re:Invent Recap (January 2025)
scalefactory
0
340
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
89
5.8k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Producing Creativity
orderedlist
PRO
343
39k
Optimising Largest Contentful Paint
csswizardry
33
3k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
Become a Pro
speakerdeck
PRO
26
5.1k
RailsConf 2023
tenderlove
29
980
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
520
The World Runs on Bad Software
bkeepers
PRO
67
11k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
6
220
Raft: Consensus for Rubyists
vanstee
137
6.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
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