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
5.1k
ExplorTechToronto20191016.pdf
kazu9su
0
89
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
65
Other Decks in Programming
See All in Programming
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
780
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
240
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.4k
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
120
自分的「カンファレンスの楽しみ方」
syumai
0
180
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
1
200
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
110
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
250
[DroidKaigi 26] How We Moved from Android Studio to Slack
thisaay
0
160
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
500
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
1
390
Featured
See All Featured
Between Models and Reality
mayunak
4
440
Done Done
chrislema
186
16k
How to Ace a Technical Interview
jacobian
281
24k
The Limits of Empathy - UXLibs8
cassininazir
1
630
Agile that works and the tools we love
rasmusluckow
331
22k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
220
Optimizing for Happiness
mojombo
378
71k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
810
Discover your Explorer Soul
emna__ayadi
2
1.3k
Accessibility Awareness
sabderemane
1
190
Utilizing Notion as your number one productivity tool
mfonobong
4
570
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!