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
390
プログラミング言語入門Vim編
kazu9su
1
380
プログラミング言語入門
kazu9su
1
2.8k
ebisurb15
kazu9su
0
63
Other Decks in Programming
See All in Programming
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
5.5k
A2UI という光を覗いてみる
satohjohn
1
140
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
140
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
200
net-httpのHTTP/2対応について
naruse
0
500
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
590
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
120
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
550
dRuby over BLE
makicamel
2
380
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
130
Inside Stream API
skrb
1
730
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
550
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
55
8.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
The SEO identity crisis: Don't let AI make you average
varn
0
490
Mind Mapping
helmedeiros
PRO
1
250
Joys of Absence: A Defence of Solitary Play
codingconduct
1
400
The Pragmatic Product Professional
lauravandoore
37
7.3k
We Are The Robots
honzajavorek
0
250
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.8k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
580
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Site-Speed That Sticks
csswizardry
13
1.2k
Navigating Team Friction
lara
192
16k
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!