Elasticacheとは
完全マネージドなRedis および Memcached。インメモリデータストアのため非常に高速で、大量のデータを処理したり既存のシステムを効率化することができる。
インメモリデータストアの目的は、データのコピーに超高速で低コストなアクセスを提供することである。キャッシュするデータを決定するためには、データ自体とそのアクセスパターンを把握する必要がある。また、これらのキャッシュされたデータは最新データではないという認識が必要で、使用するアプリケーションの特性上、古いデータでも許容されるのかどうかについて考察が必要である。
Elasticacheは、RedisとMemcachedをサポートしているが、できるだけシンプルな構成が必要であったり、大きなノードを実行する場合は、Memcachedを選択すべきである。
キャッシュできるデータは、S3、RDS, DynamoDB streamsなど。
クラスタとレプリケーション
ElastiCacheは、メモリの断片であるノードという単位から構成され、これらを1〜6台まとめたグループをシャードと呼ぶ。クラスタモードを有効化したRedisでは、1〜15のシャードで構成される。無効化されている場合は常に1シャードのみである。
Redisクラスタ
クラスタ構成を有効化する場合には、ノード数を2以上とし、マルチAZ構成とすることが望ましい。クラスタ構成とするとデータは、シャードごとに分散されて保存され、クラスタの一部に異常が発生した場合には、正常なノード(サービス)にマスターが自動で移動する。また、異常が発生したノード(サービス)は再構成される。
Redisレプリケーション
リードレプリカを使用することで、耐障害性が向上するとともに読み込み能力がスケールアウトする。Redisに異常が発生した場合は、DNSが切り替わり、新しいノードにマスターが移動する。
キャッシング戦略
Redisにおけるキャッシュ方法は以下が用意されている。
方法 | 内容 | 利点 | 欠点 |
---|---|---|---|
遅延書き込み | データがキャッシュにない、もしくは古い場合に追加 | 容量, 障害の影響 | 遅延, データの古さ |
書き込みスルー | データがデータベースに書き込まれると常にデータを追加 | データが新しい | ノード拡張時にデータが存在しない, 不要なキャッシュ |
TTLの追加 | 有効期限を指定し、期限切れはデータがないものとして扱う |