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
キャッシュ安心戦略 with Feature Toggles
Search
Kazushige Tominaga
October 31, 2018
Programming
580
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
キャッシュ安心戦略 with Feature Toggles
https://ebisurb.connpass.com/event/103701/
Kazushige Tominaga
October 31, 2018
More Decks by Kazushige Tominaga
See All by Kazushige Tominaga
スタディサプリのInternal Platform開発
kazu9su
0
3.5k
[スタディサプリ] Railsアプリケーションのモジュールとして存在していた Darklaunch (Feature Toggles) を Goアプリケーションとしてフルスクラッチでマイクロサービス化した話
kazu9su
0
5k
ExplorTechToronto20191016.pdf
kazu9su
0
88
ebisurb20180724.pdf
kazu9su
1
260
ポイントで導入するRust
kazu9su
2
8.4k
How to contribute to OSS with test
kazu9su
0
400
プログラミング言語入門Vim編
kazu9su
1
380
プログラミング言語入門
kazu9su
1
2.8k
ebisurb15
kazu9su
0
63
Other Decks in Programming
See All in Programming
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
130
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
1.4k
Contextとはなにか
chiroruxx
1
390
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
170
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
350
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
170
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
460
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2.4k
symfony/aiとlaravel/boost
77web
0
120
初めてのKubernetes 本番運用でハマった話
oku053
0
120
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
9k
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
140
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
1.3k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
870
How to Ace a Technical Interview
jacobian
281
24k
Mobile First: as difficult as doing things right
swwweet
225
10k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Balancing Empowerment & Direction
lara
6
1.2k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Music & Morning Musume
bryan
47
7.3k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
250
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Transcript
キャッシュ安心戦略 with Feature Toggles Oct 31, 2018 @tooooooooomy ebisurb
2 突然ですが、みなさん
3 こんなキャッシュ見たことないですか?
4 こんなキャッシュ見たことないですか?
5 こんなキャッシュ見たことないですか?
6 何が危険なのか?
7 何が危険なのか? • オブジェクトがキャッシュされている
8 何が危険なのか? • オブジェクトがキャッシュされている ◦ 暗黙のSerialize/Deserializeが発生 ◦ Rails公式でもキャッシュにはrawデータ(a string or
number)を用いることがmustとされている ▪ https://guides.rubyonrails.org/v4.2.8/caching_with_rails.html#activesupport-cache-memcachestore
9 何が危険なのか? • オブジェクトがキャッシュされている ◦ 暗黙のSerialize/Deserializeが発生 ◦ Rails公式でもキャッシュにはrawデータ(a string or
number)を用いることがmustとされている ▪ https://guides.rubyonrails.org/v4.2.8/caching_with_rails.html#activesupport-cache-memcachestore • なぜ危険なのか?
10 何が危険なのか? • オブジェクトがキャッシュされている ◦ 暗黙のSerialize/Deserializeが発生 ◦ Rails公式でもキャッシュにはrawデータ(a string or
number)を用いることがmustとされている ▪ https://guides.rubyonrails.org/v4.2.8/caching_with_rails.html#activesupport-cache-memcachestore • なぜ危険なのか? ◦ 異なるサービス間・同じサービスの過去の実装と現在の実装間で共有される ▪ データ(キャッシュ)自体が実装に強く依存している状態 ▪ Ruby(Rails)以外の実装のアプリケーションとは共有できない • もしくは明示的な実装が必要 ▪ 不具合があってロールバックすると整合性が取れないという状況が起こりうる • 例) キャッシュ対象のオブジェクトのクラス名が変わる
11 やばい
12 安心のために • 外部データの保存形式を、後方互換性を担保したものに変更する
13 安心のために • 外部データの保存形式を、後方互換性を担保したものに変更する ◦ 例) JSON
14 安心のために • 外部データの保存形式を、後方互換性を担保したものに変更する ◦ 例) JSON
15 安心
16 さっそく置き換えだ!
17 ちょっと待って!
18 そのキャッシュ、本当に必要?
19 まず確認しよう!
20 まず確認しよう!
21 まず確認しよう! • 何回呼ばれたか
22 まず確認しよう! • 何回呼ばれたか • うち何回キャッシュが新たに作られたか ◦ キャッシュ使用率
23 まず確認しよう! • 何回呼ばれたか • うち何回キャッシュが新たに作られたか ◦ キャッシュ使用率 • 複数のプロセスから呼ばれることが想定さ
れる場合、Redisのincrが便利 ◦ そもそもRedisがバックエンドの場合はそれを利 用するとよさげ ◦ 整合性を持ってカウントアップ
24 それでも必要なら・・・
25 新キャッシュを導入しよう!
26 Q. いきなり新しいキャッシュに置き換えてうまく動くのか不安です
27 Q. いきなり新しいキャッシュに置き換えてうまく動くのか不安です A. Feature Toggles を使おう
28 Feature Toggles? • Feature Toggles (aka Feature Flags) •
"Feature Toggling" is a set of patterns which can help a team to deliver new functionality to users rapidly but safely. • 「1%の確率でtrueを返す」のような設定を可能にするもの
29 Feature Toggles使用例(実装は省きます)
30 Feature Toggles使用例(実装は省きます)
31 Feature Toggles使用例(実装は省きます) • シンプルにif文にするだけ
32 Feature Toggles使用例(実装は省きます) • シンプルにif文にするだけ • 簡単安心 ◦ どんな場合にtrueを返すかは実装によります
33 Feature Togglesで安心のリリース
34 実際のフロー
35 実際のフロー 1. 追加で新キャッシュ作るだけの変更をデプロイ • 古いキャッシュは作り続ける
36 実際のフロー 1. 追加で新キャッシュ作るだけの変更をデプロイ • 古いキャッシュは作り続ける 2. 実際にキャッシュ作る箇所をFeature Toggles入りでデプロイ
37 実際のフロー 1. 追加で新キャッシュ作るだけの変更をデプロイ • 古いキャッシュは作り続ける 2. 実際にキャッシュ作る箇所をFeature Toggles入りでデプロイ 3.
Feature Togglesで1%リリース
38 実際のフロー 1. 追加で新キャッシュ作るだけの変更をデプロイ • 古いキャッシュは作り続ける 2. 実際にキャッシュ作る箇所をFeature Toggles入りでデプロイ 3.
Feature Togglesで1%リリース 4. 100%!!!(任意の時間を置く)
39 実際のフロー 1. 追加で新キャッシュ作るだけの変更をデプロイ • 古いキャッシュは作り続ける 2. 実際にキャッシュ作る箇所をFeature Toggles入りでデプロイ 3.
Feature Togglesで1%リリース 4. 100%!!!(任意の時間を置く) 5. 古いキャッシュ生成をやめる変更をデプロイ
40 実際のフロー 1. 追加で新キャッシュ作るだけの変更をデプロイ • 古いキャッシュは作り続ける 2. 実際にキャッシュ作る箇所をFeature Toggles入りでデプロイ 3.
Feature Togglesで1%リリース 4. 100%!!!(任意の時間を置く) 5. 古いキャッシュ生成をやめる変更をデプロイ レビュワーも流れに沿って変更を追えて安心 特に変更が多い場合には少しずつリリースすると安心
41 実際の様子(1キャッシュを置き換えるときのIssue)
42 実際の様子(1キャッシュを置き換えるときのIssue) • 最小限の変更を細かく重ねる • 安心な置き換え
43 安心
44 Who am I? twitter: @toooooooomy github: @kazu9su Software Engineer
楽天株式会社ラクマ事業部 ラクマでは安心好きな仲間を募集中です
Thank you for your attention!