1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WEBキャッシュとDog Pile Effect

Last updated at Posted at 2021-12-06

これは何?

以前RedisのOptionの説明を見ているときに出会ったDog Pile Effectというものを理解するのに苦戦したので、それについてまとめようと思いました。
一応キャッシュの説明もしていますが、Dog Pile Effectのみ見たい方はこちらから。

キャッシュとは

一度利用したデータなどを、その後また使う場合に高速にアクセスできるような形で保存しておくこと。

ちなみにキャッシュといってもブラウザキャッシュやメモリキャッシュなど色々な種類がありますが、今回焦点に当てるのはサーバキャッシュです。WEBサーバなどが利用しているキャッシュの種類です。

サーバーキャッシュの種類

サーバーキャッシュの種類は大きく分けて2つあります。

Cache-Aside Pattern

スクリーンショット 2021-12-05 21.41.16.png

  1. クライアントからリクエストする。
  2. 該当するデータが存在するかをキャッシュに問い合わせる。
  3. ヒットすれば、キャッシュからデータを取得する。
  4. ヒットしなければ、データベースにアクセスして取得する。
  5. 取得したデータをキャッシュに保存する。

Redisやmemcacheなどに採用されています。今回はこちらのパターンのお話です。

Broker Pattern

スクリーンショット 2021-12-05 21.41.33.png

  1. クライアントからリクエストする
  2. 該当するデータが存在するかをキャッシュに問い合わせる。
  3. ヒットすれば、そのまま返却する。
  4. ヒットしなければ、キャッシュがDBから値を取得し、キャッシュに保存する。
  5. キャッシュからクライアントに返却する。

Amazon DynamoDB Accelerator (DAX)に採用されています。

キャッシュが使われるまでの流れ

## キャッシュが作られるまで
Dog Pile Effectとその回避方法.jpg
Dog Pile Effectとその回避方法.png
Dog Pile Effectとその回避方法 (1).jpg
Dog Pile Effectとその回避方法 (2).jpg
Dog Pile Effectとその回避方法 (3).jpg
## キャッシュが使われるまで
Dog Pile Effectとその回避方法 (4).jpg
Dog Pile Effectとその回避方法 (5).jpg

Dog Pile Effectとは

キャッシュの有効期限が切れた後に同じページに複数のリクエストがほぼ同時にきて、DBに負荷がかかってしまう現象。
一般にキャッシュには有効期限があり、有効期限が切れると削除されるようになっています。

複数のリクエストが一気に来ることを想定しましょう。

キャッシュがある場合

Dog Pile Effectとその回避方法 (6).jpg
この場合は全てキャッシュが返され、データベースにアクセスされることはありません。

キャッシュが切れた直後

Dog Pile Effectとその回避方法 (7).jpg
新しくキャッシュができる前にきたリクエストは全てデータベースにアクセスしてしまう。また、キャッシュもその分だけ作ってしまう。これがDog Pile Effectです。

解決法

Dog Pile Effectとその回避方法 (8).jpg
Dog Pile Effectとその回避方法 (9).jpg
Dog Pile Effectとその回避方法 (10).jpg
Dog Pile Effectとその回避方法 (11).jpg

具体的なRedisのoption

  • race_condition_ttl: This option is used in conjunction with the :expires_in option. It will prevent race conditions when cache entries expire by preventing multiple processes from simultaneously regenerating the same entry (also known as the dog pile effect). This option sets the number of seconds that an expired entry can be reused while a new value is being regenerated. It’s a good practice to set this value if you use the :expires_in option. (新しいキャッシュを作ってる間だけ有効期限の切れたキャッシュを指定した時間だけ使えるようにするよ。)

参考にしたもの

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?