大手小売企業がAWS上でEコマースシステムを運営しています。現在の構成:Amazon RDS for MySQL 8.0(db.r5.4xlarge、マルチAZ構成)をプライマリデータベースとして使用し、us-east-1にRead Replicaを2台構成しています。ピーク時(セール期間)には読み取りQPS(Queries Per Second:1秒あたりのクエリ数)が50,000を超え、ReplicaLagが30秒以上に達することがあります。商品検索クエリが全体の70%を占め、その多くが同一パラメータの繰り返しクエリです。ECS Fargate上のコンテナアプリケーションがコネクションプーリングなしで直接RDSエンドポイントに接続しており、ピーク時にDB接続数が4,000を超えて「Too many connections」エラーが散発しています。加えて、ap-northeast-1(東京)リージョンでのDR(Disaster Recovery:災害対策)要件としてRTO(Recovery Time Objective:目標復旧時間)30分・RPO(Recovery Point Objective:目標復旧時点)5分が新たに追加されました。 以下の要件をすべて満たすために最も適切なソリューションの組み合わせを2つ選んでください。 【要件】 ①読み取りレイテンシを現状から50%以上改善する。 ②ap-northeast-1でのRTO30分・RPO5分のDR要件を満たす。 ③コネクション過多問題を解決する。 ④アプリケーションコードの変更を最小限にする。
選択肢AのAurora Global Databaseは、Auroraのストレージレベルレプリケーションにより現在30秒超のReplicaLagを100ms未満に改善し要件①を達成します。またクロスリージョンレプリケーション(通常1秒未満)とマネージドフェイルオーバー(RTO約1分・RPO約1秒)でRTO30分・RPO5分のDR要件②も十分に満たします。 選択肢CのRDS Proxyは、アプリケーションの接続先URLをRDS ProxyエンドポイントのURLに差し替えるだけでコネクション多重化が有効になり、ピーク時の「Too many connections」エラーを解消しながらアプリケーションコードの変更を最小限に抑え、要件③④を同時に解決します。 選択肢BのCache-Aside実装はDAOクラスへのRedisクライアントとキャッシュロジックの追加実装が必須となり、アプリケーションコードの変更を最小限にする要件④に反します。 選択肢DのDynamoDB/DAXへの移行はアプリケーションの検索処理を大幅に書き直す必要があり、要件④に反するうえ移行工数も大きくなります。 選択肢EのRead Replicaを6台に増設してもReplicaLagの根本原因は解決されず、ap-northeast-1への1台の非同期ReplicaはRPO5分を保証できません。max_connections引き上げもコネクション過多の根本解決にはなりません。