セッションデータの保存先を検討しています。セッション ID をキーとした読み書きが 1 秒間に数十万回発生し、項目が頻繁に増えるため固定スキーマにしたくなく、結合も不要ですが、応答は常に一桁ミリ秒台である必要があります。最も適した AWS のデータベースサービスはどれですか。
解説を読む(正解: B)
セッション情報のように、セッション ID などのキーを指定した単純な読み書きを超高頻度で行うアクセスパターンでは、結合や複雑なトランザクション処理よりも、安定した低レイテンシーとほぼ無制限の水平スケールが重視されます。Amazon DynamoDB はまさにこの用途のために設計されたフルマネージドの NoSQL キーバリュー/ドキュメントデータベースで、テーブルのデータをパーティションキーに基づいて自動的に分散し、トラフィックの増加に応じて基盤を透過的に拡張します。オンデマンドキャパシティモードを使えばスループットを事前に見積もらなくても急激なスパイクを吸収でき、項目ごとに属性を自由に持てるためスキーマ変更も不要です。さらに TTL 属性で期限切れセッションを自動削除でき、DynamoDB Accelerator (DAX) を併用すればマイクロ秒レベルの応答も狙えます。したがって選択肢 B が要件を満たします。選択肢 A の Amazon Redshift は列指向のデータウェアハウスで、大量データを集計する分析クエリに最適化されており、1 件単位の高頻度な更新処理には設計上向きません。選択肢 C の Amazon RDS for MySQL と選択肢 D の Amazon Aurora PostgreSQL はいずれもリレーショナルデータベースで、固定スキーマと結合を前提とした業務データには適していますが、書き込みは基本的に単一のプライマリインスタンスに集中するため、数百万ユーザー規模のセッション書き込みではインスタンスサイズが上限となりボトルネック化しやすく、スキーマレスな要件にも合致しません。
フォールトトレランス (耐障害性) とは、構成要素の一部が故障してもサービス全体が稼働し続ける性質のことで、AWS では同一リージョン内の複数アベイラビリティーゾーンにデータやコンポーネントを分散配置することで実現します。ここで重要なのは、AWS のサービスには「利用者が何も設定しなくても既定で複数 AZ に複製されるもの」と「利用者が明示的にマルチ AZ 構成を有効化して初めて冗長化されるもの」の 2 種類がある、という点です。Amazon S3 は、格納されたオブジェクトを既定でリージョン内の複数 AZ にある複数のデバイスへ冗長的に書き込み、99.999999999% (イレブンナイン) の耐久性を目指して設計されているため、利用者は追加設定なしに AZ 障害への耐性を得られます。Amazon DynamoDB も同様に、テーブルへの書き込みをリージョン内の 3 つの AZ へ自動的にレプリケートするため、1 つの AZ が停止してもアプリケーションは読み書きを継続できます。したがってこの 2 つが要件に合致します。Amazon RDS for PostgreSQL は、マルチ AZ 配置を選択して初めて別 AZ にスタンバイインスタンスが作成され同期レプリケーションが行われる仕組みで、既定のシングル AZ 構成では冗長化されないため誤りです。Amazon ElastiCache for Redis も、レプリカノードの配置とマルチ AZ 自動フェイルオーバーを利用者が有効化する必要があり、既定で冗長ではありません。Amazon EBS ボリュームは単一の AZ に固定されるリソースで、別の AZ のインスタンスから直接アタッチすることはできず、可用性を高めるにはスナップショットを介したコピーなど利用者側の作業が必要になるため誤りです。