Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
キャッシュ安心戦略 with Feature Toggles
Search
Kazushige Tominaga
October 31, 2018
Programming
590
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.6k
[スタディサプリ] Railsアプリケーションのモジュールとして存在していた Darklaunch (Feature Toggles) を Goアプリケーションとしてフルスクラッチでマイクロサービス化した話
kazu9su
0
5.1k
ExplorTechToronto20191016.pdf
kazu9su
0
89
ebisurb20180724.pdf
kazu9su
1
270
ポイントで導入する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
65
Other Decks in Programming
See All in Programming
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
520
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2.4k
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
160
App Intentsのビルドプロセスを支える技術
kntkymt
0
430
SREの越境 / SRE Collaboration
y0hgi
2
280
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
220
Verilogで学ぶCPU自作入門.pdf
uyuki234
6
2.6k
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
130
Security issues being discussed on Web Platforms
petamoriken
0
1.2k
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
240
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
180
新卒PdEのリアル
ryu1013
1
510
Featured
See All Featured
Amusing Abliteration
ianozsvald
1
310
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Chasing Engaging Ingredients in Design
codingconduct
0
340
Designing for Timeless Needs
cassininazir
1
500
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.1k
So, you think you're a good person
axbom
PRO
2
2.2k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
360
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Optimizing for Happiness
mojombo
378
71k
ラッコキーワード サービス紹介資料
rakko
1
5M
Discover your Explorer Soul
emna__ayadi
2
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!