繰り返される読み取りクエリのキャッシュ
Amazon RDS for MySQL に同一の読み取りクエリが繰り返し発行され、CPU 使用率が上昇しています。エンジンやスキーマは変更せず、頻繁に参照される結果をメモリ上に保持してミリ秒未満で応答するキャッシュ層を追加したいです。最も適した AWS サービスはどれですか。
解説を読む(正解: A)
Amazon ElastiCache は、Redis や Memcached 互換のインメモリデータストアをマネージドで提供するサービスで、データベースの前段にキャッシュ層を置く典型的な用途で使われます。頻繁に参照されるクエリ結果やセッション情報をメモリに保持することで、ディスクベースのデータベースへの問い合わせ回数を減らし、マイクロ秒からミリ秒未満の応答時間を実現できます。設問は「同一の読み取りクエリが繰り返される」「DB の CPU 負荷を下げたい」「エンジンやスキーマは変えない」「アプリ側の改修は許容」という条件であり、既存の RDS をそのまま残したまま前段にキャッシュを追加する A が最も適しています。B の Amazon Redshift は大量データの集計・分析を行うデータウェアハウスであり、多数の利用者からの短い検索クエリを低レイテンシーで返すオンライン処理には向きません。C の Amazon DynamoDB はミリ秒台の応答が得られる NoSQL データベースですが、リレーショナルなスキーマを非正規化して設計し直し、アプリケーションのデータアクセスを全面的に書き換える大規模な移行が必要となり、「エンジンやスキーマは変更しない」という前提に反します。D の AWS DMS はデータベースを別のエンジンやプラットフォームへ移行・レプリケーションするためのツールであり、移行そのものが目的で、参照負荷を軽減するキャッシュ層を提供する機能ではありません。
サブミリ秒応答が必要な高スループットデータストア
毎秒数万件のスコア更新とランキング参照が発生し、リードレプリカを増やしても応答時間が要件を満たしません。データをメモリ上に保持してサブミリ秒で応答でき、ノード追加でスケールアウトし、レプリケーションで高可用性を備えたマネージドなデータストアはどれですか。
解説を読む(正解: B)
Amazon ElastiCache は Redis (Valkey) や Memcached と互換性のあるフルマネージドのインメモリデータストアで、データをディスクではなくメモリ上に保持することでサブミリ秒のレイテンシーを実現します。リレーショナルデータベースの前段にキャッシュ層として配置して読み取り負荷を肩代わりさせる、あるいはセッション情報やランキングのように更新頻度が極端に高いデータの一次保管先として使うのが典型的な用途です。ノードを追加してスケールアウトでき、Redis 系エンジンではレプリケーションとマルチ AZ の自動フェイルオーバーによって可用性も高められるため、毎秒数万件の更新と参照をサブミリ秒で処理したいという本シナリオの要件に最も適合します。したがって B が正解です。A の Amazon Timestream は IoT センサーや運用メトリクスのような時系列データに特化したデータベースで、時刻ベースの保持ポリシーや時系列関数に強みがありますが、汎用の低レイテンシーキャッシュ用途を想定したサービスではありません。C の Amazon Neptune はノードとエッジで関係性を表現するグラフデータベースであり、つながりの探索が主目的で、単純な高速読み書きの受け皿ではありません。D の AWS IoT Core はデバイスとクラウドの間の MQTT メッセージングを仲介するマネージドサービスで、そもそもデータを保持するデータストアではありません。
水平スケーリングを支えるステートレス設計
EC2 の台数を自動で増減させたいのですが、セッション情報を各インスタンスのローカルディスクに保存しているため、インスタンス終了時にログイン状態が失われます。適切な対策を 2 つ選択してください。
複数選択問題です (正解 2 つ)。選んでから判定してください。
解説を読む(正解: A、C)
水平スケーリングを機能させる前提となるのが、サーバーが固有の状態を保持しないステートレス設計です。セッション情報を各インスタンスのローカルディスクに置くと、そのインスタンスは特定の利用者にとって代替不能な存在になり、Auto Scaling による自動的な追加や終了、あるいは障害時の置き換えのたびにログイン状態が失われます。解決策は、状態をインスタンスの外にある共有データストアへ移すことです。A の Amazon DynamoDB はミリ秒単位の応答を返すマネージドな NoSQL データベースで、セッションテーブルの保存先として広く使われます。C の Amazon ElastiCache は Redis や Memcached に対応するインメモリデータストアで、高速なセッション共有の代表的な選択肢です。いずれもすべてのインスタンスから同じ状態を参照できるため、インスタンスを自由に破棄したり追加したりできるようになります。B のヘルスチェック間隔を長くする設定は異常の検知を遅らせるだけで、インスタンス終了時に状態が消える問題は解決しません。D のローカルディスクの暗号化は保存データを保護する対策であり、インスタンスとともにデータが失われる事実は変わりません。E のように台数を 1 台に固定するとスケーリング自体ができなくなり、その 1 台が置き換わればやはりセッションは失われます。