DynamoDB 글로벌 테이블 작동 방식 - Amazon DynamoDB

DynamoDB 글로벌 테이블 작동 방식

다음 섹션에서는 Amazon DynamoDB의 글로벌 테이블 동작과 개념을 설명합니다.

개념

글로벌 테이블은 AWS 리전 간에 테이블 데이터를 복제하는 DynamoDB 기능입니다.

복제 테이블(또는 복제본)은 글로벌 테이블의 일부로 기능하는 DynamoDB 테이블입니다. 글로벌 테이블은 서로 다른 AWS 리전에 있는 두 개 이상의 복제본 테이블로 구성됩니다. 각 글로벌 테이블은 AWS 리전당 한 개의 복제본만 가질 수 있습니다. 글로벌 테이블의 모든 복제본은 동일한 테이블 이름, 프라이머리 키 스키마 및 항목 데이터를 공유합니다.

애플리케이션이 한 리전의 복제본에 데이터를 쓰면 DynamoDB는 글로벌 테이블의 다른 모든 복제본으로 해당 쓰기를 자동으로 복제합니다. 전역 테이블을 시작하는 방법에 대한 자세한 내용은 자습서: 글로벌 테이블 만들기를 참조하십시오.

버전

DynamoDB 글로벌 테이블에는 버전 2019.11.21(현재)과 버전 2017.11.29(레거시)의 두 가지 버전이 있습니다. 가능하면 버전 2019.11.21(현재)을 사용해야 합니다. 이 설명서 섹션의 정보는 버전 2019.11.21(현재)에 대한 것입니다. 자세한 내용은 글로벌 테이블 버전 확인 섹션을 참조하세요.

가용성

글로벌 테이블은 다중 리전 고가용성 아키텍처를 더 쉽게 구현하여 비즈니스 연속성을 개선하는 데 도움이 됩니다. 단일 AWS 리전의 워크로드가 손상된 경우, 애플리케이션 트래픽을 다른 리전으로 이동하고 동일한 글로벌 테이블의 다른 복제본 테이블에 읽기 및 쓰기를 수행할 수 있습니다.

글로벌 테이블의 각 복제본 테이블은 단일 리전 DynamoDB 테이블과 동일한 내구성과 가용성을 제공합니다. 글로벌 테이블은 단일 리전 테이블의 99.99%에 비해 99.999%의 가용성 서비스 수준 계약(SLA)을 제공합니다.

일관성 모델

글로벌 테이블을 만들 때 일관성 모드를 구성할 수 있습니다. 글로벌 테이블은 다중 리전 최종 일관성(MREC)과 다중 리전 강력한 일관성(MRSC)이라는 두 가지 일관성 모드를 지원합니다.

글로벌 테이블을 만들 때 일관성 모드를 지정하지 않으면 글로벌 테이블은 기본적으로 다중 리전 최종 일관성(MREC)으로 설정됩니다. 글로벌 테이블에는 서로 다른 일관성 모드로 구성된 복제본이 포함될 수 없습니다. 글로벌 테이블을 만든 후에는 일관성 모드를 변경할 수 없습니다.

다중 리전 최종 일관성(MREC)

다중 리전 최종 일관성(MREC)은 글로벌 테이블의 기본 일관성 모드입니다. MREC 글로벌 테이블 복제본의 항목에 대한 변경 사항은 일반적으로 1초 이내에 다른 모든 복제본에 동기식으로 복제됩니다. 드물지만 MREC 글로벌 테이블의 복제본이 격리되거나 손상된 경우, 복제본이 정상이 되면 다른 리전에 아직 복제되지 않은 모든 데이터가 복제됩니다.

여러 리전에서 동일한 항목이 동시에 수정될 경우, DynamoDB는 각 항목 단위로 내부 타임스탬프가 가장 최신인 수정 내용을 사용하여 충돌을 해결합니다. 이 방식을 ‘최종 쓰기 우선’ 충돌 해결 방식이라고 합니다. 항목은 결국 모든 복제본에서 마지막 쓰기에 의해 만들어진 버전으로 수렴됩니다.

강력하게 일관된 읽기 작업은 항목이 읽기가 발생한 리전에서 마지막으로 업데이트된 경우 항목의 최신 버전을 반환하지만, 항목이 다른 리전에서 마지막으로 업데이트된 경우 오래된 데이터를 반환할 수 있습니다. 조건부 쓰기는 리전에 있는 항목의 버전과 비교하여 조건 표현식을 평가합니다.

기존 DynamoDB 테이블에 복제본을 추가하여 MREC 글로벌 테이블을 만듭니다. 복제본을 추가해도 기존 단일 리전 DynamoDB 테이블 또는 글로벌 테이블 복제본에는 성능 영향이 없습니다. MREC 글로벌 테이블에 복제본을 추가하여 데이터가 복제되는 리전 수를 확장하거나, 더 이상 필요하지 않은 경우 MREC 글로벌 테이블에서 복제본을 제거할 수 있습니다. MREC 글로벌 테이블에는 DynamoDB를 사용할 수 있는 모든 리전에 복제본이 있을 수 있으며, AWS 파티션에 있는 리전 수만큼의 복제본이 있을 수 있습니다.

다중 리전 강력한 일관성(MRSC)

글로벌 테이블을 만들 때 다중 리전 강력한 일관성(MRSC) 모드를 구성할 수 있습니다. MRSC 글로벌 테이블 복제본의 항목 변경 사항은 쓰기 작업이 성공적인 응답을 반환하기 전에 하나 이상의 다른 리전에 동기식으로 복제됩니다. 기존 단일 리전 테이블을 MRSC 글로벌 테이블로 변환할 때는 적절한 초기화 및 복제 설정을 위해 변환이 완료될 때까지 테이블이 비어 있어야 합니다.

모든 MRSC 복제본에서 강력하게 일관된 읽기 작업은 항상 항목의 최신 버전을 반환합니다. 조건부 쓰기는 항상 항목의 최신 버전을 기준으로 조건 표현식을 평가합니다.

다른 리전에서 이미 수정 중인 항목을 수정하려고 하면 ReplicatedWriteConflictException과 함께 쓰기 작업이 실패합니다. ReplicatedWriteConflictException과 함께 실패한 쓰기는 재시도할 수 있으며 항목이 다른 리전에서 더 이상 수정되고 있지 않는 경우 성공합니다.

복제본 세 개 또는 복제본 두 개와 감시자 하나로 MRSC 글로벌 테이블을 구성할 수 있습니다. 감시자는 글로벌 테이블 복제본에 작성된 데이터를 포함하는 MRSC 글로벌 테이블의 구성 요소이며, MRSC의 가용성 아키텍처를 지원하면서 전체 복제본에 대한 선택적 대안을 제공합니다. 감시자에 대한 읽기 또는 쓰기 작업은 수행할 수 없습니다. 감시자는 두 복제본과 다른 리전에 있습니다.

MRSC 글로벌 테이블을 만들 때는 복제본과 감시자 배포 모두에 대한 리전을 MRSC 테이블을 만드는 시점에 선택합니다. MRSC 글로벌 테이블에 DescribeTable API의 출력에서 구성된 감시자가 있는지 여부와 어느 리전에 있는지 확인할 수 있습니다. 감시자는 DynamoDB에서 소유하고 관리하며, 감시자는 구성된 리전의 AWS 계정에 표시되지 않습니다.

MRSC 글로벌 테이블은 정확히 3개의 리전에 배포되어야 합니다. 데이터가 없는 기존 DynamoDB 테이블에 복제본 1개와 감시자 또는 복제본 2개를 추가하여 MRSC 글로벌 테이블을 만듭니다. 기존 MRSC 글로벌 테이블에는 복제본을 추가할 수 없습니다. MRSC 글로벌 테이블에서 단일 복제본 또는 감시자를 삭제할 수 없습니다. MRSC 글로벌 테이블에서 복제본 2개를 삭제하거나 복제본 1개와 감시자 1개를 삭제하여 나머지 복제본을 단일 리전 DynamoDB 테이블로 변환할 수 있습니다.

MRSC 글로벌 테이블에는 다음 고려 사항이 적용됩니다.

  • 단일 리전 테이블을 MRSC 글로벌 테이블로 변환할 때는 테이블이 비어 있어야 합니다. 단일 리전 테이블을 기존 항목이 있는 MRSC 글로벌 테이블로 변환하는 것은 지원되지 않습니다. 변환 프로세스 중에 테이블에 데이터가 작성되는 일이 없도록 합니다.

  • MRSC 글로벌 테이블은 다음 리전 세트에서 사용할 수 있습니다.

    • 미국 리전 세트: 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건)

    • EU 리전 세트: 유럽(아일랜드), 유럽(런던), 유럽(파리), 유럽(프랑크푸르트)

    • 아시아 태평양 리전 세트: 아시아 태평양(도쿄), 아시아 태평양(서울) 및 아시아 태평양(오사카).

  • MRSC 글로벌 테이블은 여러 리전 세트에 걸칠 수 없습니다(예: MRSC 글로벌 테이블에는 미국 및 EU 리전 세트 모두의 복제본이 포함될 수 없음).

  • MRSC 글로벌 테이블에는 Time to Live(TTL)가 지원되지 않습니다.

  • MRSC 글로벌 테이블에는 로컬 보조 인덱스(LSI)가 지원되지 않습니다.

  • CloudWatch Contributor Insights 정보는 작업이 발생한 리전에 대해서만 보고됩니다.

일관성 모드 선택

다중 리전 일관성 모드를 선택하는 주요 기준은 애플리케이션이 지연 시간이 짧은 쓰기와 강력하게 일관된 읽기를 우선시하는지 아니면 글로벌 강력한 일관성을 우선시하는지 여부입니다.

MREC 글로벌 테이블은 MRSC 글로벌 테이블에 비해 쓰기 및 강력하게 일관된 읽기 지연 시간이 짧습니다. MREC 글로벌 테이블은 복제본 간의 복제 지연과 동일한 목표 복구 시점(RPO)을 지원할 수 있으며, 일반적으로 복제본 리전에 따라 몇 초 정도 소요됩니다.

다음과 같은 경우 MREC 모드를 사용해야 합니다.

  • 애플리케이션이 강력하게 일관된 읽기 작업에서 반환된 오래된 데이터를 허용할 수 있습니다(다른 리전에서 데이터가 업데이트된 경우).

  • 다중 리전 읽기 일관성보다 짧은 쓰기 및 강력하게 일관된 읽기 지연 시간을 우선시합니다.

  • 다중 리전 고가용성 전략은 0보다 큰 RPO를 허용할 수 있습니다.

MRSC 글로벌 테이블은 MREC 글로벌 테이블에 비해 쓰기 및 강력하게 일관된 읽기 지연 시간이 깁니다. MRSC 글로벌 테이블은 0의 목표 복구 시점(RPO)을 지원합니다.

다음과 같은 경우 MRSC 모드를 사용해야 합니다.

  • 여러 리전 간에 강력하게 일관된 읽기가 필요합니다.

  • 짧은 쓰기 지연 시간보다 글로벌 읽기 일관성을 우선시합니다.

  • 다중 리전 고가용성 전략에 0의 RPO가 필요합니다.

전역 테이블 모니터링

다중 리전 최종 일관성(MREC)을 위해 구성된 글로벌 테이블은 ReplicationLatency 지표를 CloudWatch에 게시합니다. 이 지표는 하나의 복제본 테이블에 항목이 쓰인 시점부터 해당 항목이 글로벌 테이블의 다른 복제본에 나타날 때까지 걸린 시간을 추적합니다. ReplicationLatency는 밀리초 단위로 표현되며 글로벌 테이블의 모든 소스 및 대상 리전 쌍마다 내보내집니다.

일반적인 ReplicationLatency 값은 선택한 AWS 리전 간의 거리와 워크로드 유형 및 처리량과 같은 기타 변수에 따라 달라집니다. 예를 들어 미국 서부(캘리포니아 북부)(us-west-1) 리전의 소스 복제본은 아프리카(케이프타운)(af-south-1) 리전에 비해 미국 서부(오리건)(us-west-2) 리전에 대한 ReplicationLatency가 낮습니다.

ReplicationLatency 값이 상승하면 한 복제본의 업데이트 내용이 다른 복제본 테이블로 시기 적절하게 전파되지 않는다는 것을 나타낼 수 있습니다. 이 경우 애플리케이션의 읽기 및 쓰기 작업을 다른 AWS 리전으로 일시적으로 리디렉션할 수 있습니다.

다중 리전 강력한 일관성(MRSC)을 위해 구성된 글로벌 테이블은 ReplicationLatency 지표를 게시하지 않습니다.

결함 주입 테스트

MREC 글로벌 테이블은 AWS 결함 주입 서비스(AWS FIS)와 통합되어 글로벌 테이블 워크로드에 대한 결함 주입 실험을 수행합니다. 이렇게 하면 선택한 복제본과의 복제를 일시 중지하여 시뮬레이션된 리전 격리에 대한 애플리케이션의 응답을 테스트할 수 있습니다. 자세한 내용은 글로벌 테이블 복제 일시 중지를 참조하세요.

TTL(Time To Live)

MREC를 위해 구성된 글로벌 테이블은 Time To Live(TTL) 삭제 구성을 지원합니다. 글로벌 테이블의 모든 복제본에 대해 TTL 설정이 자동으로 동기화됩니다. TTL이 리전의 복제본에서 항목을 삭제하면 삭제가 글로벌 테이블의 다른 모든 복제본에 복제됩니다. TTL은 쓰기 용량을 소비하지 않으므로 삭제가 발생한 리전에서 TTL 삭제에 대한 요금이 부과되지 않습니다. 그러나 글로벌 테이블에 복제본이 있는 다른 리전에서 복제된 삭제에 대해서는 요금이 부과됩니다.

TTL 삭제 복제는 삭제가 복제되는 복제본의 쓰기 용량을 사용합니다. 프로비저닝된 용량에 대해 구성된 복제본은 쓰기 처리량과 TTL 삭제 처리량의 조합이 프로비저닝된 쓰기 용량보다 높은 경우 요청을 스로틀링할 수 있습니다.

다중 리전 강력한 일관성(MRSC)을 위해 구성된 글로벌 테이블은 Time To Live(TTL) 삭제 구성을 지원하지 않습니다.

스트림

다중 리전 최종 일관성(MREC)을 위해 구성된 글로벌 테이블은 복제본 테이블의 DynamoDB 스트림에서 변경 사항을 읽고 해당 변경 사항을 다른 모든 복제본 테이블에 적용하여 변경 사항을 복제합니다. 따라서 스트림은 MREC 글로벌 테이블의 모든 복제본에서 기본적으로 활성화되며 해당 복제본에서 비활성화할 수 없습니다. MREC 복제 프로세스는 단기간에 여러 변경 사항을 복제된 단일 쓰기로 결합하여 각 복제본의 스트림에 서로 약간 다른 레코드가 포함될 수 있습니다. MREC 복제본의 스트림 레코드는 항상 항목별로 정렬되지만, 항목 간 정렬은 복제본마다 다를 수 있습니다.

다중 리전 강력한 일관성(MRSC)에 대해 구성된 글로벌 테이블은 복제에 DynamoDB 스트림을 사용하지 않으므로 스트림은 MRSC 복제본에서 기본적으로 활성화되지 않습니다. MRSC 복제본에서 스트림을 활성화할 수 있습니다. MRSC 복제본의 스트림 레코드는 스트림 레코드 순서를 포함하여 모든 복제본에서 동일합니다.

특정 리전에서 발생했지만 글로벌 테이블의 다른 리전에서는 발생하지 않은 변경 사항에 대해 스트림 레코드를 처리하는 애플리케이션을 구축하려면 해당 항목에 대한 변경 사항이 발생한 리전을 정의하는 각 항목에 속성을 추가할 수 있습니다. Lambda 이벤트 필터를 사용하여 특정 리전의 변경 사항에 대해서만 Lambda 함수를 간접적으로 호출하는 등, 다른 리전에서 발생한 변경 사항에 대해 스트림 레코드를 필터링하려면 이 속성을 사용합니다.

트랜잭션

MREC를 위해 구성된 글로벌 테이블에서 DynamoDB 트랜잭션 작업(TransactWriteItemsTransactGetItems)은 작업이 간접적으로 호출된 리전 내에서만 원자성이 보장됩니다. 트랜잭션 쓰기는 리전 간에 하나의 단위로 복제되지 않습니다. 즉, 트랜잭션의 일부 쓰기만 특정 시점에 다른 복제본의 읽기 작업에 의해 반환될 수 있습니다.

예를 들어 미국 동부(오하이오) 및 미국 서부(오리건) 리전에 복제본이 있는 글로벌 테이블이 있고 미국 동부(오하이오)에서 TransactWriteItems 작업을 수행할 경우, 변경 내용이 복제될 때 미국 서부(오리건)에서 부분적으로 완료된 트랜잭션을 관찰할 수 있습니다. 변경 내용은 소스 리전에서 커밋된 이후에만 다른 리전에 복제됩니다.

다중 리전 강력한 일관성(MRSC)을 위해 구성된 글로벌 테이블은 트랜잭션 작업을 지원하지 않으며, 이러한 작업이 MRSC 복제본에서 간접적으로 호출되는 경우 오류를 반환합니다.

읽기 및 쓰기 처리량

복제는 쓰기 용량을 사용합니다. 프로비저닝된 용량에 대해 구성된 복제본은 쓰기 처리량과 복제 처리량의 조합이 프로비저닝된 쓰기 용량보다 높은 경우 요청을 스로틀링할 수 있습니다. 온디맨드 모드의 쓰기 용량은 글로벌 테이블의 모든 복제본에 대해 동기화됩니다. 프로비저닝된 용량에 대해 구성된 글로벌 테이블은 복제본 간의 오토 스케일링 설정을 동기화합니다. 실제 프로비저닝된 쓰기 용량 설정은 사용된 쓰기 처리량에 따라 복제본 간에 다를 수 있습니다.

글로벌 테이블의 각 복제본에 대한 읽기 용량 설정을 독립적으로 구성할 수 있습니다. 글로벌 테이블에 복제본을 추가할 때 재정의 값이 지정되지 않은 한 소스 테이블 또는 복제본의 읽기 용량이 초기 값으로 사용됩니다.

설정 동기화

DynamoDB 글로벌 테이블의 설정은 테이블 동작 및 복제의 다양한 측면을 제어하는 구성 파라미터입니다. 이러한 설정은 DynamoDB 컨트롤 플레인 API를 통해 관리되며, 글로벌 테이블을 만들거나 수정할 때 구성할 수 있습니다. 글로벌 테이블은 모든 복제본에서 특정 설정을 자동으로 동기화하여 일관성을 유지하면서 리전별 최적화에 유연성을 부여합니다. 동기화되는 설정과 동작 방식을 이해하면 글로벌 테이블을 효과적으로 구성하는 데 도움이 됩니다. 설정은 복제본 간에 동기화되는 방식에 따라 세 가지 주요 범주로 나뉩니다.

다음 설정은 글로벌 테이블의 복제본 간에 항상 동기화됩니다.

  • 용량 모드(프로비저닝된 용량 또는 온디맨드)

  • 테이블 프로비저닝된 쓰기 용량

  • 테이블 쓰기 오토 스케일링

  • 글로벌 보조 인덱스(GSI) 정의

  • GSI 프로비저닝된 쓰기 용량

  • GSI 쓰기 오토 스케일링

  • 서버 측 암호화(SSE) 유형

  • MREC 모드의 스트림 정의

  • TTL(Time To Live)

  • 웜 처리량

  • 온디맨드 최대 쓰기 처리량

다음 설정은 복제본 간에 동기화되지만 복제본별로 재정의할 수 있습니다.

  • 테이블 프로비저닝된 읽기 용량

  • 테이블 읽기 오토 스케일링

  • GSI 프로비저닝된 읽기 용량

  • GSI 읽기 오토 스케일링

  • 테이블 클래스

  • 온디맨드 최대 읽기 처리량

참고

다른 복제본에서 설정을 수정하면 재정의 가능한 설정 값이 변경됩니다. 예를 들어, 미국 동부(버지니아 북부) 및 미국 서부(오리건)에 복제본이 있는 MREC 글로벌 테이블이 있습니다. 미국 동부(버지니아 북부) 복제본은 프로비저닝된 읽기 처리량이 200RCU로 설정되어 있습니다. 미국 서부(오리건)의 복제본에는 프로비저닝된 읽기 처리량 재정의가 100RCU로 설정되어 있습니다. 미국 동부(버지니아 북부) 복제본의 프로비저닝된 읽기 처리량 설정을 200RCU에서 300RCU로 업데이트하면 미국 서부(오리건)의 복제본에도 새로 프로비저닝된 읽기 처리량 값이 적용됩니다. 이렇게 하면 미국 서부(오리건) 복제본의 프로비저닝된 읽기 처리량 설정이 재정의된 값인 100RCU에서 새 값인 300RCU로 변경됩니다.

다음 설정은 복제본 간에 동기화되지 않습니다.

  • 삭제 방지

  • 시점 복구

  • Tags

  • 테이블 CloudWatch Contributor Insights 활성화

  • GSI CloudWatch Contributor Insights 활성화

  • Kinesis Data Streams 정의

  • 리소스 정책

  • MRSC 모드의 스트림 정의

다른 모든 설정은 복제본 간에 동기화되지 않습니다.

DynamoDB Accelerator(DAX)

글로벌 테이블 복제본에 대한 쓰기는 DynamoDB Accelerator(DAX)를 우회하여 DynamoDB를 직접 업데이트합니다. 따라서 쓰기가 DAX 캐시를 업데이트하지 않으므로 DAX 캐시가 오래된 상태가 될 수 있습니다. 글로벌 테이블 복제본에 대해 구성된 DAX 캐시는 캐시 TTL이 만료될 때만 새로 고쳐집니다.

글로벌 테이블 관리에 대한 고려 사항

새 글로벌 테이블 복제본을 추가하는 데 사용된 테이블은 새 복제본이 만들어진 후 24시간이 경과할 때까지 삭제할 수 없습니다.

글로벌 테이블 복제본이 포함된 AWS 리전을 비활성화하면 리전이 비활성화된 후 20시간이 지나면 해당 복제본이 단일 리전 테이블로 영구적으로 변환됩니다.