みなさん、こんにちは。
サニービュー事業部の小寺です。

今日はElastiCacheのキャッシュ戦略についてです。

■ElastiCacheとは

Amazon ElastiCacheは、セットアップ、運用や拡張が簡単にできるマネージド型インメモリキャッシュサービスです。
超高速な2つのエンジン(memcachedとRedis)があります。
どの位高速なのかというと、公式サイトには「ミリ秒未満の応答時間が必要な最も要求の厳しいアプリケーション向け」との記載があり、なんと Stack Overflow 2020 Developer Survey でデベロッパーで最も投票数の多かったサービスです。

特徴は大きく分けると3つあります。
・完全なフルマネージドサービス
フルマネージドサービスなので、ハードウェア、ソフトウェアに関する運用の
時間を取られることがありません。
数クリックでサービスを始めることができます。

・優れたパフォーマンス
はインメモリデータストアやインメモリキャッシュとして機能し、ミリ秒単位の応答時間が必要とされるような、要求の厳しいアプリケーションに対応しています。

・スケーラブル
スケールイン、スケールアウト、スケールアップをすることができます。
書き込みおよびメモリのスケーリングは、シャーディング(※)でサポートされています。

※シャーディング:データベースにおける負荷分散の手法の一つです。
データを複数のノードのディスクに分割配置することで、データベースへのリクエストを分散し全体のスループットを上げる目的で利用されます。

■ElastiCacheのキャッシュ戦略

キャッシュを利用するにも戦略があります。
利用したいパターンによって使い分けが必要です。

たとえば、ElastiCacheにおいて書き込みスルー戦略を実装し、TTLを有効にすることで、キャッシュ内のデータが常に最新であることを確認し、読み取られないデータを自動的に削除することができます。
それによって、クラスター内の無駄なスペースを最小限に抑えることができます。

キャッシュにデータを入力して維持するための実装方式は、キャッシュするデータとデータへのアクセスパターンによって異なります。
たとえば、ゲームサイトでトップ 10 リーダーボードを提供する場合と、ニュースサイトでトレンド記事を提供する場合では、異なる戦略を使用する必要があります。

・ゲームサイトでトップ10リーダーボード (Redis ソートセット)
「ゲームのハイスコアのトップ 10」は計算が大変です。でも、「Redisソートセット」を使えば簡単に実現できる。

・メッセージング (Redis パブリッシュ/サブスクライブ)
メーリングリストへの送付や、チャットの特定チャンネルへの送付のような、
受信者を特定しない形での通知を実現する「publish/subscribe」機能がRedisにあります。

・推奨データ (Redis ハッシュ)
「いいね」のカウントなどをリアルタイムで分析するのは、通常のRDBMSやNoSQLではコストがかかるケースが多くあります。そのような場合、Redis ハッシュを使うと簡単に実現できます。

Elasticacheでは以下のアプローチを選択することができます。

・遅延読み込み戦略

必要なときにのみキャッシュにデータを読み込むキャッシュ戦略です。
ほとんどのデータがリクエストされないため、キャッシュが満杯になることを回避できる。

・書き込みスルー戦略

書き込みスルー戦略では、データがデータベースに書き込まれると常にデータを追加するか、キャッシュのデータを更新することで、古いキャッシュを利用しないように実装ができます。
常にキャッシュが最新ではありますが、1度の書き込みで、キャッシュと、DBへの2回書き込みが発生します。

・TTL の追加

有効期限 (TTL) 値を設定することで一定期間でデータ項目を失効させることができます。
遅延読み取りはデータが古くなる可能性がありますが、空ノードによる障害は発生しません。書き込みスルーでは常に新しいデータとなりますが、空ノードの障害が発生して、過剰なデータがキャッシュに入力されることがあります。各書き込みに有効期限 (TTL) 値を追加することで、各戦略の利点を得ることができます。同時に、余分なデータでキャッシュが乱雑になることを回避できます。

キャッシュ戦略の比較

■まとめ

キャッシュする方法も色々ありますね。今日はElastiCacheのキャッシュ戦略について3つお伝えしました。

・遅延読み込み戦略
・書き込みスルー戦略
・TTL の追加

SunnyCloudでは、AWSが全サービス5%オフで利用できるAWSリセールサービス Sunny Payをご提供しています。

次回はJIG-SAW株式会社との共催ウェビナーです!