Amazon DynamoDB Accelerator (DAX) でマイクロ秒レイテンシを実現 - インメモリキャッシュの設計
DAX による DynamoDB の読み取り高速化、キャッシュ戦略、クラスタ設計を解説します。
DAX の概要
DAX は DynamoDB のインメモリキャッシュで、読み取りレイテンシをミリ秒からマイクロ秒に短縮します。ElastiCache (Redis/Memcached) と異なり、DynamoDB 互換の API を提供するため、SDK のエンドポイントを DAX クラスタに変更するだけで移行が完了します。
キャッシュ戦略とクラスタ設計
アイテムキャッシュは GetItem と BatchGetItem の結果をキャッシュし、TTL (デフォルト 5 分) で自動失効します。クエリキャッシュは Query と Scan の結果セットをキャッシュします。書き込みスルーにより、PutItem や UpdateItem の実行時にキャッシュも更新されるため、読み取り時に古いデータが返されるリスクが低減します。クラスタは最低 3 ノード (マルチ AZ) を推奨し、ノードタイプはキャッシュするデータ量に応じて選択します。
キャッシュ戦略と整合性
DAX はアイテムキャッシュとクエリキャッシュの 2 層でキャッシュを管理します。アイテムキャッシュは GetItem と BatchGetItem の結果を TTL (デフォルト 5 分) で保持します。クエリキャッシュは Query と Scan の結果を保持します。書き込み操作 (PutItem 、 UpdateItem 、 DeleteItem) はライトスルーで DAX と DynamoDB の両方に反映されます。結果整合性の読み取りはキャッシュから返され、強い整合性の読み取りは DynamoDB に直接アクセスします。 TTL を短く設定するとキャッシュヒット率が下がり、長く設定するとデータの鮮度が低下するトレードオフがあります。 DynamoDB キャッシュのパフォーマンス最適化を学ぶうえで関連書籍 (Amazon)が参考になります。
DAX の料金
DAX の料金はノードの時間課金で、dax.r5.large は 1 時間あたり約 0.269 ドル (月額約 194 ドル) です。最低 3 ノード (マルチ AZ) の構成が推奨され、月額約 582 ドルです。DynamoDB の読み取りキャパシティユニット (RCU) のコスト削減効果と DAX のノードコストを比較し、読み取りが多いワークロードで DAX の導入が有利かを判断します。キャッシュヒット率が 90% 以上の場合、DynamoDB の RCU を大幅に削減でき、DAX のコストを上回る削減効果が期待できます。
まとめ
DAX は DynamoDB のインメモリキャッシュで、マイクロ秒単位の読み取りレイテンシを実現するサービスです。ライトスルーキャッシュで書き込みの整合性を維持しながら、アイテムキャッシュとクエリキャッシュの 2 層で読み取り負荷を大幅に軽減します。DynamoDB の RCU コスト削減効果がキャッシュヒット率 90% 以上で顕著になり、読み取り集中型ワークロードに最適です。