DAX: 仕組み - Amazon DynamoDB

DAX: 仕組み

Amazon DynamoDB Accelerator (DAX) は、Amazon Virtual Private Cloud 環境 (Amazon VPC) 内で実行するように設計されています。Amazon VPC サービスは、従来のデータセンターに非常によく似た仮想ネットワークを定義します。VPC を使用すると、IP アドレス範囲、サブネット、ルーティングテーブル、ネットワークゲートウェイ、セキュリティ設定を適切に制御できます。仮想ネットワーク内で DAX クラスターを起動し、Amazon VPC のセキュリティグループを使用して、クラスターへのアクセスを制御できます。

注記

2013 年 12 月 4 日以降に AWS アカウントを作成した場合は、各 AWS リージョンにデフォルトで VPC が用意されています。VPC に他の設定手順は必要なく、すぐに使用を開始できます。

詳細については、Amazon VPC ユーザーガイドの「デフォルトの VPC とサブネット」を参照してください。

次の図は、DAX の高レベルの概要を示しています。


            VPC でのアプリケーション、DAX クライアント、および DAX クラスターの相互作用を示すワークフロー図。

DAX クラスターを作成するには、AWS マネジメントコンソール を使用します。他を指定しない限り、DAX クラスターはデフォルト VPC 内で実行されます。アプリケーションを実行するには、Amazon VPC で Amazon EC2 インスタンスを起動します。次に、アプリケーションを (DAX クライアントとともに) EC2 インスタンスにデプロイします。

実行時に、DAX クライアントはアプリケーションのすべての DynamoDB API リクエストを DAX クラスターに送信します。DAX がこれらの API リクエストのいずれかを直接処理できる場合は、処理します。それ以外の場合は、リクエストを DynamoDB に渡します。

最終的に、DAX クラスターはアプリケーションに結果を返します。

DAX でのリクエスト処理方法

DAX クラスターは 1 つ以上のノードで構成されています。各ノードはそれぞれ、自身の DAX キャッシングソフトウェアのインスタンスを実行します。ノードのうち 1 つがクラスターのプライマリノードとして機能します。他のノード (存在する場合) はリードレプリカとして動作します。詳細については、「ノード」を参照してください。

アプリケーションは、DAX クラスターのエンドポイントを指定することで DAX にアクセスできます。DAX クライアントソフトウェアはクラスターエンドポイントと連携して、インテリジェントな負荷分散とルーティングを実行します。受信リクエストは、クラスター内のすべてのノードに均等に分散されます。

読み取り操作

DAX は次の API コールに対応できます。

  • GetItem

  • BatchGetItem

  • Query

  • Scan

リクエストが結果的に整合性のある読み込み (デフォルトの動作) を指定する場合は、その項目を DAX から読み込もうとします。

  • DAX に項目がある場合 (キャッシュヒット)、DAX は DynamoDB にアクセスせずにアプリケーションに項目を返します。

  • DAX に項目がない場合 (キャッシュミス)、DAX はリクエストを DynamoDB に渡します。DynamoDB からの応答を受信すると、DAX は結果をアプリケーションに返します。ただし、プライマリノードのキャッシュにも結果を書き込みます。

注記

クラスターにリードレプリカがある場合、DAX は自動的にレプリカをプライマリノードと同期した状態に保ちます。詳細については、「クラスター」を参照してください。

リクエストが強い整合性のある読み込みを指定する場合、DAX はリクエストを DynamoDB に渡します。DynamoDB からの結果は DAX にキャッシュされません。代わりに、それらは単にアプリケーションに返されます。

書き込み操作

次の DAX API オペレーションは「書き込みスルー」と見なされます。

  • BatchWriteItem

  • UpdateItem

  • DeleteItem

  • PutItem

これらのオペレーションでは、データはまず DynamoDB テーブルに書き込まれ、その後 DAX クラスターに書き込まれます。オペレーションは、データがテーブルと DAX の両方に正常に書き込まれたときのみ成功します。

その他のオペレーション

DAX では、テーブルを管理する DynamoDB のオペレーション (CreateTableUpdateTable など) を認識しません。アプリケーションがこのようなオペレーションを行う必要がある場合は、DAX を使用するのではなく、直接 DynamoDB にアクセスする必要があります。

DAX および DynamoDB の整合性の詳細については、「DAX と DynamoDB の整合性モデル」を参照してください。

DAX でのトランザクションの動作の詳細については、「DynamoDB Accelerator (DAX) でトランザクション API を使用する」を参照してください。

リクエストレート制限

DAX に送信されるリクエストの数がノードの容量を超える場合、ThrottlingException を返すことによって、追加のリクエストを受け入れるレート DAX を制限します。DAX は、CPU 使用率を継続的に評価して、正常なクラスター状態を維持しながら処理できるリクエストの量を判断します。

DAX が Amazon CloudWatch に発行する ThrottledRequestCount メトリクス をモニタリングできます。これらの例外が定期的に発生する場合は、クラスターをスケールアップすることを検討してください。

項目キャッシュ

DAX は、GetItem および BatchGetItem オペレーションの結果を保存する項目キャッシュを保持します。キャッシュ内の項目は DynamoDB からの結果整合性データを表し、プライマリキー値別に保存されています。

アプリケーションが GetItem または BatchGetItem リクエストを送信すると、DAX は指定されたキー値を使用して項目キャッシュから直接項目の読み込みを試みます。項目が見つかった場合 (キャッシュヒット)、DAX はすぐにアプリケーションに項目を返します。項目が見つからなかった場合 (キャッシュミス)、DAX はリクエストを DynamoDB に送信します。DynamoDB は結果的に整合性のある読み込みを使用してリクエストを処理し、項目を DAX に返します。DAX はその項目を項目キャッシュに保存してから、アプリケーションに返します。

項目キャッシュには 有効期限 (TTL) があります。デフォルトでは 5 分です。DAX は項目キャッシュに書き込むすべての項目にタイムスタンプを割り当てます。TTL 設定より長期間キャッシュに残り続けている項目は、期限切れになります。期限切れの項目について GetItem リクエストを発行すると、キャッシュミスとみなされ、DAX は GetItem リクエストを DynamoDB に送信します。

注記

項目キャッシュの TTL 設定は、新しい DAX クラスターを作成する際に指定できます。詳細については、「DAX クラスターの管理 」を参照してください。

DAX は項目キャッシュの least recently used (LRU) リストも保持します。LRU リストは、項目が最初にキャッシュに書き込まれた時とその項目が最後にキャッシュから読み込まれた時を記録して保存します。項目キャッシュがいっぱいになると、DAX は古い項目を (期限切れでない場合であっても) 削除し、新しい項目のためのスペースを空けます。LRU アルゴリズムは項目キャッシュでは常に有効であり、ユーザーが設定することはできません。

DAX での項目キャッシュの一貫性の詳細については、「DAX 項目キャッシュの動作」を参照してください。

クエリキャッシュ

DAX はまた、Query および Scan オペレーションの結果を保存するクエリキャッシュを保持します。このキャッシュの項目は、DynamoDB テーブルに対するクエリおよびスキャンの結果セットを表します。これらの結果セットはパラメータ値別に保存されています。

アプリケーションが Query または Scan リクエストを送信すると、DAX は指定されたパラメータ値を使用してクエリキャッシュから一致する結果セットの読み込みを試みます。結果セットが見つかった場合 (キャッシュヒット)、DAX はすぐにアプリケーションに結果セットを返します。結果セットが見つからなかった場合 (キャッシュミス)、DAX はリクエストを DynamoDB に送信します。DynamoDB は結果的に整合性のある読み込みを使用してリクエストを処理し、結果セットを DAX に返します。DAX はその結果セットをクエリキャッシュに保存してから、アプリケーションに返します。

注記

クエリキャッシュの TTL 設定は、新しい DAX クラスターを作成する際に指定できます。詳細については、「DAX クラスターの管理 」を参照してください。

DAX は、クエリキャッシュの LRU リストも保持します。リストは、結果セットが最初にキャッシュに書き込まれた時とその結果が最後にキャッシュから読み込まれた時を記録して保存します。クエリキャッシュがいっぱいになると、DAX は古い結果セットを (期限切れでなくても) 削除して新しい結果セットのためのスペースを空けます。LRU アルゴリズムはクエリキャッシュでは常に有効であり、ユーザーが設定することはできません。

DAX でのクエリキャッシュの一貫性の詳細については、「DAX クエリキャッシュの動作」を参照してください。