DAX: 작동 방식
Amazon DynamoDB Accelerator(DAX)는 Amazon Virtual Private Cloud(Amazon VPC) 환경 내에서 실행되도록 설계되었습니다. Amazon VPC 서비스는 기존 데이터 센터와 매우 유사한 가상 네트워크를 정의합니다. VPC를 사용하면 IP 주소 범위, 서브넷, 라우팅 테이블, 네트워크 게이트웨이 및 보안 설정을 통제할 수 있습니다. Amazon VPC 보안 그룹을 사용하여 가상 네트워크에서 DAX 클러스터를 시작하고 클러스터에 대한 액세스를 제어할 수 있습니다.
참고
2013년 12월 4일 이후 AWS 계정을 생성했다면 각 AWS 리전에 기본 VPC가 갖추어져 있습니다. 기본 VPC는 별도의 구성 단계를 수행할 필요 없이 즉시 사용할 수 있습니다.
자세한 내용은 Amazon VPC 사용 설명서의 기본 VPC 및 기본 서브넷을 참조하세요.
다음은 DAX에 대한 종합적인 개요를 보여주는 다이어그램입니다.
DAX 클러스터를 생성하려면 AWS Management Console을 사용합니다. 달리 지정하지 않으면 DAX 클러스터가 기본 VPC 내에서 실행됩니다. 애플리케이션을 실행하려면 Amazon EC2 인스턴스를 Amazon VPC에서 시작합니다. 그런 다음 DAX 클라이언트와 함께 애플리케이션을 EC2 인스턴스에 배포합니다.
런타임에 DAX 클라이언트는 모든 애플리케이션의 DynamoDB API 요청을 DAX 클러스터로 보냅니다. DAX는 이러한 API 결과 중 하나를 직접 처리할 수 있으면 그렇게 합니다. 그렇지 않은 경우에는 DynamoDB로 요청을 전달합니다.
마지막으로 DAX 클러스터가 결과를 애플리케이션에 반환합니다.
DAX에서 요청을 처리하는 방식
DAX 클러스터는 하나 이상의 노드로 구성됩니다. 각 노드는 DAX 캐싱 소프트웨어의 자체 인스턴스를 실행합니다. 노드 중 하나는 클러스터의 기본 노드로 작동하며, 다른 노드(있는 경우)는 읽기 전용 복제본으로 작동합니다. 자세한 내용은 노드 단원을 참조하십시오.
애플리케이션은 DAX 클러스터의 엔드포인트를 지정하여 DAX에 액세스할 수 있습니다. DAX 클라이언트 소프트웨어는 클러스터 엔드포인트와 함께 작동하여 지능적인 로드 밸런싱 및 라우팅을 수행합니다.
읽기 작업
DAX는 다음 API 호출에 응답할 수 있습니다.
-
GetItem
-
BatchGetItem
-
Query
-
Scan
요청에서 최종적으로 일관된 읽기(기본 동작)를 지정하면 DAX에서 항목 읽기가 시도됩니다.
-
DAX에 사용할 수 있는 항목이 있으면(캐시 적중), DAX가 DynamoDB에 액세스하지 않고 애플리케이션에 항목을 반환합니다.
-
DAX에 사용할 수 있는 항목이 없으면(캐시 누락), DAX가 요청을 DynamoDB로 전달합니다. DAX는 DynamoDB에서 응답을 수신하면 애플리케이션에 결과를 반환합니다. 그러나 기본 노드의 캐시에도 그 결과를 기록합니다.
참고
클러스터에 읽기 전용 복제본이 있으면 DAX가 자동으로 이 복제본을 프라이머리 노드와 동기화 상태로 유지합니다. 자세한 내용은 클러스터 단원을 참조하십시오.
요청에서 강력히 일관된 읽기를 지정하면 DAX가 해당 요청을 DynamoDB로 전달합니다. DynamoDB에서 나온 결과는 DAX에 캐시되지 않습니다. 대신에 애플리케이션에 반환되기만 합니다.
쓰기 작업
다음은 "라이트-스루(write-through)"로 간주되는 DAX API 작업입니다.
-
BatchWriteItem
-
UpdateItem
-
DeleteItem
-
PutItem
이 작업에서는 데이터가 먼저 DynamoDB 테이블에 기록된 다음 DAX 클러스터에 기록됩니다. 데이터가 테이블과 DAX 모두에 기록될 경우에만 작업이 성공합니다.
기타 작업
DAX는 모든 테이블 관리용 DynamoDB 작업을 인식하지 못합니다(예: CreateTable
, UpdateTable
등). 애플리케이션에서 이러한 작업을 수행해야 하는 경우 DAX를 사용하지 말고 DynamoDB에 직접 액세스해야 합니다.
DAX 및 DynamoDB 일관성에 대한 자세한 내용은 DAX 및 DynamoDB 정합성 모델 단원을 참조하세요.
DAX에서 트랜잭션의 작동 방식에 대한 자세한 내용은 DynamoDB Accelerator(DAX)에서 트랜잭션 API 사용 단원을 참조하세요.
요청 속도 제한
DAX로 전송된 요청 수가 노드의 용량을 초과하는 경우 DAX는 ThrottlingException을 반환하여 추가 요청을 수락하는 속도를 제한합니다. 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가 DynamoDB로 GetItem
요청을 보냅니다.
참고
새 DAX 클러스터를 생성할 때 항목 캐시에 TTL 설정을 지정할 수 있습니다. 자세한 내용은 DAX 클러스터 관리 단원을 참조하십시오.
DAX는 항목 캐시에 대해 가장 오랫동안 사용되지 않음(LRU) 목록도 유지합니다. LRU 목록은 캐시에 항목이 처음 기록된 시간과 캐시로부터 항목이 마지막으로 읽혀진 시간을 추적합니다. 항목 캐시가 가득 차면 DAX는 새 항목을 위한 공간을 마련하기 위해 오래된 항목을 제거합니다(아직 만료되지 않은 항목 포함). LRU 알고리즘은 항목 캐시에 항상 활성화되어 있으며 사용자가 구성할 수 없습니다.
항목 캐시 TTL 설정으로 0을 지정하는 경우 항목 캐시의 항목이 LRU 제거 또는 ‘라이트-스루’ 작업으로 인해 새로 고쳐집니다.
DAX에서 항목 캐시의 일관성에 대한 자세한 내용은 DAX 항목 캐시 동작 단원을 참조하세요.
쿼리 캐시
DAX는 Query
및 Scan
작업의 결과를 저장하기 위해 쿼리 캐시도 유지합니다. 이 캐시에 있는 항목은 DynamoDB 테이블에 대한 쿼리 및 스캔의 결과 집합을 나타냅니다. 이러한 결과 집합은 파라미터 값에 의해 저장됩니다.
애플리케이션에서 Query
또는 Scan
요청을 보내면, DAX가 지정된 파라미터 값을 사용하여 쿼리 캐시로부터 일치하는 결과 집합을 읽으려고 시도합니다. 결과 집합이 검색되면(캐시 적중) DAX가 이를 애플리케이션에 즉시 반환합니다. 결과 집합이 검색되지 않으면(캐시 누락) DAX가 요청을 DynamoDB에 보냅니다. DynamoDB는 최종적으로 일관된 읽기를 사용하여 요청을 처리하고 결과 집합을 DAX에 반환합니다. DAX는 결과 집합을 쿼리 캐시에 저장한 다음 애플리케이션에 반환합니다.
참고
새 DAX 클러스터를 생성할 때 쿼리 캐시의 TTL 설정을 지정할 수 있습니다. 자세한 내용은 DAX 클러스터 관리 단원을 참조하십시오.
또한 DAX는 쿼리 캐시에 대한 LRU 목록을 유지합니다. 목록은 캐시에 결과 집합이 처음 기록된 시간과 캐시로부터 결과가 마지막으로 읽혀진 시간을 추적합니다. 쿼리 캐시가 가득 차면 DAX는 새 결과 집합을 위한 공간을 마련하기 위해 오래된 결과 집합을 제거합니다(아직 만료되지 않은 집합 포함). LRU 알고리즘은 쿼리 캐시에 항상 활성화되어 있으며 사용자가 구성할 수 없습니다.
쿼리 캐시 TTL 설정으로 0을 지정하면 쿼리 응답이 캐시되지 않습니다.
DAX에서 쿼리 캐시의 일관성에 대한 자세한 내용은 DAX 쿼리 캐시 동작 단원을 참조하세요.