あるSaaS企業の分析ダッシュボードは、Amazon RDS for PostgreSQLに対して同一の複雑な集計クエリを多数のユーザーが繰り返し実行しています。アクセス増加に伴い読み取り負荷が高まり、応答時間が悪化しています。同じクエリ結果を低レイテンシー(ミリ秒未満~数ミリ秒)で返しつつ、データベースへの負荷を大幅に削減したいと考えています。最も適切なソリューションはどれですか。
A
Amazon ElastiCache for Redis を導入し、クエリ結果をキャッシュしてアプリケーションから参照する
✓ 正解
ElastiCache for Redisはインメモリストアで、繰り返される集計クエリの結果をキャッシュし、ミリ秒未満で応答しつつDB負荷を大幅に削減できます。キャッシュ戦略として要件を最も的確に満たします。
Amazon ElastiCache for Memcached を導入し、マルチAZの自動フェイルオーバーで結果をキャッシュする
ElastiCache for MemcachedはデータのレプリケーションやマルチAZ自動フェイルオーバーをサポートしておらず、選択肢に記載された冗長構成自体が実現できないため不適切です。
解説
Amazon ElastiCache for Redisは、インメモリのキーバリューストアで、頻繁に実行される集計クエリの結果をキャッシュすることで、ミリ秒未満のレイテンシーで応答しつつデータベースへの繰り返し負荷を大幅に削減できます。レプリケーションやマルチAZフェイルオーバーにも対応します。
選択肢のDynamoDB Accelerator(DAX)はDynamoDB専用のキャッシュで、RDS/PostgreSQLのクエリ結果はキャッシュできません。
選択肢のリードレプリカは負荷分散には有効ですが、同一クエリを毎回実行するため演算コストは残り、キャッシュほど負荷を削減できずレプリカラグも生じます。
選択肢のElastiCache for Memcachedはレプリケーションをサポートせず、記載のようなマルチAZ自動フェイルオーバー構成自体が実現できません。