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.1k
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
集中して作業する技術/how_to_work_deeply
hanhan1978
61
40k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
10
9.1k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
8
3.4k
B+木入門:PHPで理解する データベースインデックスの仕組み/b-plus-tree-101
hanhan1978
5
4.5k
ADRを一年運用してみた/our_story_about_adr
hanhan1978
5
2k
PHPで学ぶ Session の基本と応用 / web-app-session-101-2024
hanhan1978
12
5.5k
レガシー回避のPHP開発術/avoid_php_legacy
hanhan1978
16
12k
Laravel Collectionの計算量を調べてみた2023/laravel_collection_time_complexity_2023
hanhan1978
1
1.4k
Laravel を低速化する技術 / how to slow laravel
hanhan1978
2
3.9k
Other Decks in Technology
See All in Technology
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
110
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
220
ドメイン名の終活について - JPAAWG 7th -
mikit
33
20k
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
120
The Role of Developer Relations in AI Product Success.
giftojabu1
0
120
Terraform未経験の御様に対してどの ように導⼊を進めていったか
tkikuchi
2
430
Engineer Career Talk
lycorp_recruit_jp
0
160
Why App Signing Matters for Your Android Apps - Android Bangkok Conference 2024
akexorcist
0
130
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
2
310
Python(PYNQ)がテーマのAMD主催のFPGAコンテストに参加してきた
iotengineer22
0
470
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
870
個人でもIAM Identity Centerを使おう!(アクセス管理編)
ryder472
3
200
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
40
2.4k
Side Projects
sachag
452
42k
Six Lessons from altMBA
skipperchong
27
3.5k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
The Pragmatic Product Professional
lauravandoore
31
6.3k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
How GitHub (no longer) Works
holman
310
140k
How to Ace a Technical Interview
jacobian
276
23k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
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