ある企業が、Amazon RDS for MySQL を使って頻繁に読み取られる商品カタログデータを管理している。読み取りリクエストが急増し、RDS への CPU 負荷が高くなっている。商品データはほぼリアルタイムで更新されるが、1〜2 秒の遅延は許容できる。最小限のコード変更で読み取りパフォーマンスを向上させる最も適切なソリューションはどれか。
- A. RDS の自動バックアップ機能を無効化してパフォーマンスを向上させる。
- B. RDS インスタンスタイプをより大きいものにスケールアップする。
- C. Amazon ElastiCache for Redis をデータベースの前段にキャッシュ層として導入し、アプリケーションはまず Redis から読み取り、キャッシュミスの場合のみ RDS から取得してキャッシュに書き込む。
- D. RDS のリードレプリカを追加し、アプリケーションの読み取りクエリをレプリカエンドポイントに向ける。
解答と解説を見る
正解: C
Amazon ElastiCache for Redis はインメモリキャッシュとして、マイクロ秒〜ミリ秒単位の低レイテンシーでデータを提供できる。商品カタログのような頻繁に読まれるデータをキャッシュに保存することで、大部分の読み取りリクエストが RDS に到達する前に Redis から応答される。データ更新時のキャッシュ無効化設定で 1〜2 秒の許容遅延も制御できる。選択肢BのRDS スケールアップはコスト増加が大きく、根本的なボトルネック(大量の読み取りリクエスト)は解決しない。また垂直スケーリングには上限がある。選択肢DのRDS リードレプリカも有効な手段だが、レプリカへの接続切り替えコードの修正が必要であり、インメモリキャッシュ(Redis)ほどのパフォーマンス改善(RDS はマイクロ秒ではなくミリ秒〜数十ミリ秒)が得られない。選択肢Aのバックアップ無効化は本番環境では危険でリスクが高く、パフォーマンス改善効果も微小である。
📚 関連サービスの解説: Amazon ElastiCache ・ Amazon RDS