キャッシュ安心戦略 with Feature Toggles

キャッシュ安心戦略 with Feature Toggles

D400e6d92f9a69b60d9cfdff1dc9a98e?s=128

Kazushige Tominaga

October 31, 2018
Tweet

Transcript

  1. 8.

    8 何が危険なのか? • オブジェクトがキャッシュされている ◦ 暗黙のSerialize/Deserializeが発生 ◦ Rails公式でもキャッシュにはrawデータ(a string or

    number)を用いることがmustとされている ▪ https://guides.rubyonrails.org/v4.2.8/caching_with_rails.html#activesupport-cache-memcachestore
  2. 9.

    9 何が危険なのか? • オブジェクトがキャッシュされている ◦ 暗黙のSerialize/Deserializeが発生 ◦ Rails公式でもキャッシュにはrawデータ(a string or

    number)を用いることがmustとされている ▪ https://guides.rubyonrails.org/v4.2.8/caching_with_rails.html#activesupport-cache-memcachestore • なぜ危険なのか?
  3. 10.

    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)以外の実装のアプリケーションとは共有できない • もしくは明示的な実装が必要 ▪ 不具合があってロールバックすると整合性が取れないという状況が起こりうる • 例) キャッシュ対象のオブジェクトのクラス名が変わる
  4. 15.
  5. 23.

    23 まず確認しよう! • 何回呼ばれたか • うち何回キャッシュが新たに作られたか ◦ キャッシュ使用率 • 複数のプロセスから呼ばれることが想定さ

    れる場合、Redisのincrが便利 ◦ そもそもRedisがバックエンドの場合はそれを利 用するとよさげ ◦ 整合性を持ってカウントアップ
  6. 28.

    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を返す」のような設定を可能にするもの
  7. 40.

    40 実際のフロー 1. 追加で新キャッシュ作るだけの変更をデプロイ • 古いキャッシュは作り続ける 2. 実際にキャッシュ作る箇所をFeature Toggles入りでデプロイ 3.

    Feature Togglesで1%リリース 4. 100%!!!(任意の時間を置く) 5. 古いキャッシュ生成をやめる変更をデプロイ レビュワーも流れに沿って変更を追えて安心 特に変更が多い場合には少しずつリリースすると安心
  8. 43.
  9. 44.

    44 Who am I? twitter: @toooooooomy github: @kazu9su Software Engineer

    楽天株式会社ラクマ事業部 ラクマでは安心好きな仲間を募集中です