DynamoDB 글로벌 테이블 사용 - Amazon DynamoDB

DynamoDB 글로벌 테이블 사용

글로벌 테이블은 Amazon DynamoDB의 국제적인 입지를 기반으로 구축되어 완전관리형 다중 리전 다중 활성 데이터베이스를 제공하며, 이 데이터베이스는 대규모로 확장되는 글로벌 애플리케이션의 신속한 로컬 읽기 및 쓰기 성능을 제공할 수 있습니다. 글로벌 테이블은 선택된 AWS 리전 간에 DynamoDB 테이블을 자동으로 복제합니다. 글로벌 테이블은 기존 DynamoDB API를 사용하므로 애플리케이션을 변경할 필요가 없습니다. 글로벌 테이블 사용에 따른 선결제 비용이나 약정은 없으며 사용한 리소스에 대해서만 비용을 지불합니다.

이 가이드에서는 DynamoDB 글로벌 테이블의 효과적인 사용 방법에 대해 설명합니다. 글로벌 테이블에 대한 주요 정보를 제공하고, 기능의 기본 사용 사례를 설명하며, 두 가지 일관성 모드를 설명하고, 고려해야 할 세 가지 쓰기 모델을 분류하여 소개하며, 구현할 수 있는 네 가지 주요 요청 라우팅 옵션을 살펴보고, 라이브 리전 또는 오프라인 리전에서 대피하는 방법을 설명하며, 처리량 용량 계획에 대해 생각하는 방법을 설명하고, 글로벌 테이블을 배포할 때 고려해야 할 사항에 대한 체크리스트를 제공합니다.

이 가이드에서는 AWS 다중 리전 기초 백서 및 AWS를 사용한 데이터 복원력 설계 패턴 비디오에서 설명하듯이 AWS 다중 리전 배포의 더 광범위한 컨텍스트를 다룹니다.

DynamoDB 글로벌 테이블 설계에 대한 주요 사실

  • 글로벌 테이블에는 현재 버전인 글로벌 테이블 버전 2019.11.21(현재)('V2'라고도 함)과 글로벌 테이블 버전 2017.11.29(레거시)('V1'이라고도 함)의 두 가지 버전이 있습니다. 이 가이드에서는 현재 버전에만 중점을 둡니다.

  • DynamoDB(글로벌 테이블 제외)는 리전에 기반한 서비스입니다. 즉, 가용성이 높고, 전체 가용 영역(AZ) 장애를 포함해 리전의 인프라 장애에 대한 내재적 복원력을 지원합니다. 단일 리전 DynamoDB 테이블은 99.99% 가용성을 지원하도록 설계되었습니다. 자세한 내용은 DynamoDB 서비스 수준 계약(SLA)을 참조하세요.

  • DynamoDB 글로벌 테이블은 두 개 이상의 리전 사이에서 데이터를 복제합니다. 다중 리전 DynamoDB 테이블은 99.999% 가용성을 제공하도록 설계되었습니다. 적절한 계획을 세우면 글로벌 테이블은 리전 장애에 대한 복원력을 지닌 아키텍처를 만드는 데 도움이 될 수 있습니다.

  • DynamoDB에는 글로벌 엔드포인트가 없습니다. 모든 요청은 리전 엔드포인트에 대해 생성되며, 이 엔드포인트는 해당 리전에 로컬인 글로벌 테이블 인스턴스에 액세스합니다.

  • DynamoDB에 대한 직접 호출은 여러 리전 사이를 이동할 수 없습니다. 한 리전을 홈 리전으로 지정한 애플리케이션이 해당 리전의 로컬 DynamoDB 엔드포인트에만 직접 액세스하는 것이 모범 사례입니다. 한 리전의 DynamoDB 계층에 있든 주변 스택에서 문제가 감지되면 최종 사용자 트래픽을 다른 리전에서 호스팅된 다른 애플리케이션 엔드포인트로 라우팅해야 합니다. 글로벌 테이블은 모든 리전이 홈 리전에 해당하는 애플리케이션이 동일한 데이터에 액세스할 수 있도록 지원합니다.

일관성 모델

글로벌 테이블을 생성할 때 일관성 모드를 구성할 수 있습니다. 글로벌 테이블은 다중 리전 최종 일관성(MREC)과 다중 리전 강력한 일관성(MRSC)(2025년 6월에 도입됨)이라는 두 가지 일관성 모드를 지원합니다.

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

MREC에 대한 주요 사실

  • MRSC를 사용하는 글로벌 테이블은 액티브-액티브 복제 모델도 사용합니다. DynamoDB의 관점에서 볼 때 각 리전의 테이블은 읽기 및 쓰기 요청을 수락할 수 있는 동등한 지위를 갖습니다. 로컬 복제본 테이블은 쓰기 요청을 받은 후 백그라운드에서 다른 원격 참여 리전에 쓰기 작업을 복제합니다.

  • 항목은 개별적으로 복제됩니다. 단일 트랜잭션 내에서 업데이트된 항목은 함께 복제되지 않을 수 있습니다.

  • 소스 리전의 각 테이블 파티션은 다른 모든 파티션과 병렬로 쓰기 작업을 복제합니다. 원격 리전 내 쓰기 작업 시퀀스는 소스 리전 내에서 나타나는 쓰기 작업 시퀀스와 일치하지 않을 수 있습니다. 테이블 파티션에 대한 자세한 내용은 블로그 게시물 Scaling DynamoDB: How partitions, hot keys, and split for heat impact performance를 참조하세요.

  • 글로벌 테이블에 새로 쓰여진 항목은 일반적으로 1초 안에 모든 복제본 테이블에 전파됩니다. 가까운 리전이 대체로 더 빨리 전파됩니다.

  • Amazon CloudWatch는 각 리전 페어의 ReplicationLatency 지표를 제공합니다. 도착하는 항목을 보고 도착 시간을 최초 쓰기 시간과 비교해 평균을 내 계산됩니다. 타이밍은 소스 리전의 CloudWatch 내에 저장됩니다. 평균 및 최대 타이밍을 보는 것은 평균 및 최악의 복제 지연을 결정하는 데 유용할 수 있습니다. 이 지연 시간에는 SLA가 없습니다.

  • 개별 항목이 서로 다른 두 리전에서 거의 같은 시간에(이 ReplicationLatency 기간 내) 업데이트되고 첫 번째 쓰기 작업이 복제되기 전에 두 번째 쓰기 작업이 발생하는 경우 쓰기 충돌이 발생할 수 있습니다. MREC를 사용하는 글로벌 테이블은 쓰기 작업의 타임스탬프를 기반으로 최종 쓰기 우선 메커니즘을 사용하여 이러한 충돌을 해결합니다. 첫 번째 작업은 두 번째 작업에서 '손실'됩니다. 이러한 충돌은 CloudWatch 또는 AWS CloudTrail에 기록되지 않습니다.

  • 각 항목에는 비공개 시스템 속성으로 보관되는 마지막 쓰기 타임스탬프가 있습니다. 최종 쓰기 우선 접근 방식은 수신 항목의 타임스탬프가 기존 항목의 타임스탬프보다 커야 하는 조건부 쓰기 작업을 사용하여 구현됩니다.

  • 글로벌 테이블은 모든 항목을 모든 참여 리전에 복제합니다. 다른 복제 범위를 지정하려는 경우 여러 글로벌 테이블을 생성하고 각 테이블에 서로 다른 참여 리전을 할당할 수 있습니다.

  • 복제본 리전이 오프라인 상태이거나 ReplicationLatency가 증가하더라도 로컬 리전은 쓰기 작업을 수락합니다. 로컬 테이블은 각 항목이 성공할 때까지 원격 테이블에 항목 복제를 계속 시도합니다.

  • 드문 경우이긴 하지만 리전이 완전히 오프라인 상태가 되었다가 나중에 다시 온라인 상태가 되면 보류 중인 아웃바운드 및 인바운드 복제가 모두 재시도됩니다. 테이블을 다시 동기화하기 위한 특별한 작업은 필요하지 않습니다. 최종 쓰기 우선 메커니즘은 데이터의 최종 일관성을 보장합니다.

  • 언제든지 DynamoDB MREC 테이블에 새 리전을 추가할 수 있습니다. DynamoDB는 초기 동기화 및 진행 중인 복제를 처리합니다. 리전(원본 리전 포함)을 제거할 수도 있으며, 이 경우 해당 리전의 로컬 테이블이 삭제됩니다.

MRSC에 대한 주요 사실

  • MRSC를 사용하는 글로벌 테이블은 액티브-액티브 복제 모델도 사용합니다. DynamoDB의 관점에서 볼 때 각 리전의 테이블은 읽기 및 쓰기 요청을 수락할 수 있는 동등한 지위를 갖습니다. MRSC 글로벌 테이블 복제본의 항목 변경 사항은 쓰기 작업이 성공적인 응답을 반환하기 전에 하나 이상의 다른 리전에 동기식으로 복제됩니다.

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

  • MRSC 복제본에서 최종적으로 일관된 읽기 작업에는 최근에 다른 리전에서 수행된 변경이 포함되지 않을 수 있으며, 동일한 리전에서 최근에 수행된 변경도 포함되지 않을 수 있습니다.

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

  • MRSC를 사용하면 쓰기 작업과 강력하게 일관된 읽기 작업의 지연 시간이 길어집니다. 이러한 작업에는 교차 리전 통신이 필요합니다. 이 통신은 액세스 중인 리전과 글로벌 테이블에 참여하는 가장 가까운 리전 간의 왕복 지연 시간에 따라 증가하는 지연 시간을 추가할 수 있습니다. 자세한 내용은 AWS re:Invent 2024 프레젠테이션, Multi-Region strong consistency with DynamoDB global tables를 참조하세요. 최종적으로 일관된 읽기 작업에서는 추가 지연 시간이 발생하지 않습니다. 리전에서 이러한 지연 시간을 실험적으로 계산할 수 있는 오픈 소스 테스터 도구가 있습니다.

  • 항목은 개별적으로 복제됩니다. MRSC를 사용하는 글로벌 테이블은 트랜잭션 API를 지원하지 않습니다.

  • MRSC 글로벌 테이블은 정확히 3개의 리전에 배포되어야 합니다. 복제본 세 개 또는 복제본 두 개와 감시자 하나로 MRSC 글로벌 테이블을 구성할 수 있습니다. 감시자는 글로벌 테이블 복제본에 쓴 최근 데이터를 포함하는 MRSC 글로벌 테이블의 구성 요소입니다. 감시자는 MRSC의 가용성 아키텍처를 지원하면서 전체 복제본에 대한 선택적 대안을 제공합니다. 감시자에 대한 읽기 또는 쓰기 작업은 수행할 수 없습니다. 감시자는 스토리지 또는 쓰기 비용을 발생시키지 않습니다. 감시자는 두 복제본과 다른 리전에 있습니다.

  • MRSC 글로벌 테이블을 생성하려면 데이터가 없는 기존 DynamoDB 테이블에 복제본 1개와 감시자 또는 복제본 2개를 추가합니다. 기존 MRSC 글로벌 테이블에는 복제본을 추가할 수 없습니다. MRSC 글로벌 테이블에서 단일 복제본 또는 감시자를 삭제할 수 없습니다. MRSC 글로벌 테이블에서 복제본 2개를 삭제하거나 복제본 1개와 감시자를 삭제할 수 있습니다. 두 번째 시나리오에서는 나머지 복제본을 단일 리전 DynamoDB 테이블로 변환합니다.

  • DescribeTable API의 출력에서 MRSC 글로벌 테이블에 감시자가 구성되었는지와 감시자가 구성된 리전을 확인할 수 있습니다. 감시자는 DynamoDB에서 소유하고 관리하며, 감시자가 구성된 리전의 AWS 계정 계정에는 표시되지 않습니다.

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

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

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

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

  • MRSC 글로벌 테이블은 리전 세트에 걸쳐 있을 수 없습니다. 예를 들어 MRSC 글로벌 테이블에는 미국 및 EU 리전 세트의 복제본이 포함될 수 없습니다.

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

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

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

  • 로컬 리전은 쿼럼을 설정하기 위해 복제본 또는 감시를 호스팅하는 두 번째 리전이 있는 한 모든 읽기 및 쓰기 작업을 허용합니다. 두 번째 리전을 사용할 수 없는 경우 로컬 리전은 최종적으로 일관된 읽기만 처리할 수 있습니다.

  • 드물지만 리전이 완전히 오프라인 상태가 되는 경우 나중에 다시 온라인 상태가 되면 자동으로 따라잡습니다. 포착될 때까지 기록 작업과 강력하게 일관된 읽기 작업은 포착 리전에만 오류를 반환하고 다른 리전에 대한 요청은 계속 정상적으로 수행됩니다. 추적 리전에 대한 최종적으로 일관된 읽기 작업은 지금까지 리전으로 전파된 데이터를 반환하며, 리더 노드와 로컬 복제본 간의 일반적인 로컬 일관성 동작이 적용됩니다. 테이블을 다시 동기화하기 위한 특별한 작업은 필요하지 않습니다.

MREC DynamoDB 글로벌 테이블 사용 사례

MREC 글로벌 테이블은 다음과 같은 이점을 제공합니다.

  • 지연 시간이 짧은 읽기 작업. 데이터 사본을 최종 사용자 가까이 두어 읽기 작업 중 네트워크 지연 시간을 줄입니다. 데이터는 ReplicationLatency 값만큼 최신 상태로 유지됩니다.

  • 지연 시간이 짧은 쓰기 작업. 가까운 리전에 쓰기를 수행하여 네트워크 지연 시간과 쓰기에 걸리는 시간을 줄일 수 있습니다. 충돌이 발생하지 않도록 쓰기 트래픽을 신중하게 라우팅해야 합니다. 라우팅 기법은 DynamoDB의 라우팅 전략에서 자세히 설명합니다.

  • 원활한 리전 마이그레이션. 새 리전을 추가한 다음 이전 리전을 삭제하여 데이터 계층의 가동 중단 없이 한 리전에서 다른 리전으로 배포를 마이그레이션할 수 있습니다.

MREC 및 MRSC 글로벌 테이블 모두 다음과 같은 이점을 제공합니다.

  • 복원력 및 재해 복구 향상. 리전의 성능이 저하되었거나 전체 중단이 발생한 경우 해당 리전을 대피시킬 수 있습니다. 대피한다는 것은 해당 리전으로 이동하는 일부 또는 모든 요청을 다른 곳으로 이동하는 것을 의미합니다. 글로벌 테이블을 사용하면 DynamoDB SLA의 월별 가동 시간 비율이 99.99%에서 99.999%로 증가합니다. MREC 사용 시 초 단위로 측정되는 목표 복구 시점(RPO) 및 목표 복구 시간(RTO)를 지원합니다. MRSC 사용 시 0의 RPO를 지원합니다.

    예를 들어 Fidelity Investments는 re:Invent 2022 프레젠테이션에서 주문 관리 시스템에 DynamoDB 글로벌 테이블을 사용하는 방법을 소개했습니다. 이들의 목표는 온프레미스 처리로는 달성할 수 없는 규모에서 지연 시간을 안정적으로 줄이는 동시에 가용 영역 및 리전 장애에 대한 복원력을 유지하는 것이었습니다.

복원력 및 재해 복구가 목표라면 MRSC 테이블의 경우 쓰기 및 강력하게 일관된 읽기 지연 시간이 더 높지만 0의 RPO를 지원합니다. MREC 글로벌 테이블은 복제본 간 복제 지연(일반적으로 복제본 리전에 따라 몇 초 정도 소요)과 동일한 RPO를 지원할 수 있습니다.

결론 및 리소스

DynamoDB 글로벌 테이블에는 제어 기능이 거의 없지만, 신중하게 고려해야 합니다. 쓰기 모드, 라우팅 모델, 대피 프로세스를 결정해야 합니다. 글로벌 상태 유지를 위해서는 모든 리전에서 애플리케이션을 계측하고 경로를 조정하거나 대피를 수행할 준비가 되어 있어야 합니다. 그러면 99.999% 가용성을 위해 설계된 전 세계에 분산된 데이터세트(지연 시간이 짧은 읽기 및 쓰기 작업 지원)의 이점을 활용할 수 있습니다.

DynamoDB 글로벌 테이블에 대한 자세한 내용은 다음 리소스를 참조하세요.