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
Inside Stream API
skrb
1
730
C# and C++ Interoperability - cho-dotnetnew
harukasao
0
200
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
120
Claspは野良GASの夢をみるか
takter00
0
200
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
250
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Agentic UI
manfredsteyer
PRO
0
170
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
570
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
550
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
180
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
560
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
260
Featured
See All Featured
The Curse of the Amulet
leimatthew05
1
13k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Odyssey Design
rkendrick25
PRO
2
700
4 Signs Your Business is Dying
shpigford
187
22k
エンジニアに許された特別な時間の終わり
watany
107
250k
Bash Introduction
62gerente
615
220k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
600
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
220
BBQ
matthewcrist
89
10k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
530
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!