Amazon DynamoDB Accelerator のアイコン

Amazon DynamoDB Accelerator

DynamoDB のインメモリキャッシュでマイクロ秒レベルの読み取りレイテンシを提供するサービス

何ができるか

Amazon DynamoDB Accelerator (DAX) は、DynamoDB 専用のフルマネージドインメモリキャッシュサービスです。DynamoDB テーブルの前段にキャッシュレイヤーを配置し、読み取りリクエストのレイテンシをミリ秒からマイクロ秒 (数百万分の 1 秒) に短縮します。DynamoDB と API 互換のため、アプリケーションのコード変更は接続先の変更のみで済みます。

どのような場面で使うか

リアルタイムの入札システムやゲームのリーダーボード、EC サイトの商品カタログ表示など、同じデータへの読み取りが集中する高トラフィックなアプリケーションで利用されています。キャッシュにより DynamoDB への読み取りリクエスト数を大幅に削減できるため、コスト最適化にも効果的です。 この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。

身近な例え

図書館のカウンターに例えるとわかりやすいでしょう。人気の本 (よく読まれるデータ) を毎回書庫 (DynamoDB) まで取りに行く代わりに、カウンター横の特設棚 (DAX) に置いておきます。利用者はすぐに本を手に取れるため、待ち時間がほぼゼロになります。

DAX とは

この記事は約 2 分で読めます。 Amazon DynamoDB Accelerator (DAX) は、DynamoDB のためのインメモリキャッシュです。DynamoDB は通常でもミリ秒レベルの高速なレスポンスを返しますが、DAX を使うとさらに 10 倍以上高速なマイクロ秒レベルのレスポンスを実現できます。読み取りが多いワークロードで特に効果を発揮します。

仕組みと API 互換性

DAX は DynamoDB と同じ API を提供するため、既存のアプリケーションコードをほとんど変更せずに導入できます。DAX クライアントライブラリに切り替えるだけで、読み取りリクエストは自動的に DAX キャッシュを参照します。キャッシュにデータがない場合 (キャッシュミス) は DynamoDB から取得し、キャッシュに保存してから返します。書き込みリクエストは DAX を経由して DynamoDB に直接書き込まれます。

キャッシュの動作

DAX には 2 種類のキャッシュがあります。アイテムキャッシュは GetItem や BatchGetItem の結果を保存し、クエリキャッシュは Query や Scan の結果を保存します。キャッシュの有効期間 (TTL) はデフォルトで 5 分ですが、アプリケーションの要件に応じて変更できます。データの鮮度とパフォーマンスのバランスを考慮して TTL を設定することが重要です。

はじめかた

DAX を使い始めるには、DAX コンソールでクラスターを作成します。ノードタイプ (インスタンスサイズ) とノード数を選択し、VPC 内にクラスターを配置します。アプリケーション側では DynamoDB クライアントを DAX クライアントに置き換え、クラスターのエンドポイントを指定するだけで利用を開始できます。

Azure・オンプレミスとの比較

Azure の対応サービス Azure Cosmos DB integrated cache
オンプレミスでの対応手段 Memcached、Redis をアプリケーション層でキャッシュとして利用

AWS の優位点

  • DynamoDB と API 互換のため、接続先を変更するだけでアプリケーションコードの大幅な書き換えなしにキャッシュを導入できる
  • フルマネージドでクラスターの運用・パッチ適用・障害復旧が自動化されており、キャッシュの運用負荷がほぼゼロ
  • アイテムキャッシュとクエリキャッシュの 2 層構造により、GetItem と Query の両方のパターンで高速化を実現できる

注意点

  • DAX クラスターは VPC 内に配置する必要があるため、Lambda から利用する場合は Lambda を同じ VPC に配置すること
  • 書き込みが多いワークロードでは DAX の効果が限定的。読み取りが多いワークロードで最も効果を発揮する
  • DAX はインスタンスベースの課金 (時間単位) のため、ElastiCache と同様にコストが常時発生する点に注意

さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。