maya's blog

About programming, aws and ubuntu

ElastiCache Lazy Loading and Write Through

docs.aws.amazon.com

AWSでは、RDSのクエリ結果をキャッシュとして利用する方法は2種類ある

Lazy Loading(遅延読み込み)

キャッシュヒット

ElastiCacheにキャッシュがあり、かつ期限切れでない場合にキャッシュを取り出す(キャッシュヒット)。

cache hit

  1. ElastiCacheへキャッシュ読み込み要求
  2. キャッシュを返却

キャッシュミス

以下の場合にキャッシュを用いずにRDSへクエリを投げる(キャッシュミス)

  • ElastiCacheにキャッシュがない場合
  • ElastiCacheにキャッシュ(データ)があり、かつ期限切れの場合

cache miss

  1. ElastiCacheへキャッシュ読み込み要求
  2. キャシュがないことを返却
  3. RDSへクエリを投げる
  4. clientへデータを返却
  5. ElastiCacheへキャッシュ格納要求

デメリット

  • キャッシュ有効期限が切れるまで古いキャッシュを読み込んでしまう
  • キャッシュミス時にElastiCache, RDSとのやり取り回数が3回に増え、server <-> clientへのレスポンスが悪くなる

Write Through(ライトスルー, 書き込みスルー)

write through

  1. RDSへ更新系クエリを投げる
  2. クエリ結果を返却
  3. クエリ結果をElastiCacheへ格納し、キャッシュする

デメリット

  • 読み込まれない無駄なデータがキャッシュされる可能性がある

さいごに

AWS Certified Developer - Associateの模擬試験で、以下の場合どうElastiCacheを用いてキャッシュしたら良いか問われた。

ある企業において、Amazon RDSインスタンスの手前にAmazon ElastiCacheクラスターを配置しています。 その企業は、キャッシュミスが発生した場合、RDSからのデータのみを取得するロジックをコードに実装したいと考えています。 この要件を満たすには、どの手法を実装すればよいですか。

  • 遅延読み込み
  • ライトスルー
  • エラー時再試行
  • 指数関数バックオフ

無理くり日本語訳しているのもあって、選択肢が頭に入ってこなかった…。

これらの単語ははAWSというより、コンピュータアーキテクチャを知っている人であれば、 あぁライトスルーねあのキャッシュの仕方か、ってわかるんだろうな。