글로벌 테이블 핵심 개념 - Amazon 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 글로벌 테이블은 모두 애플리케이션의 복원력을 개선하기 위해 제어된 결합 주입 실험을 실행하는 완전관리형 서비스인 AWS Fault Injection Service(AWS FIS)와 통합됩니다. AWS FIS를 사용하여 다음을 수행할 수 있습니다.

  • 특정 장애 시나리오를 정의하는 실험 템플릿을 생성합니다.

  • 애플리케이션의 복원력을 검증하기 위해 결함을 주입하여 리전 격리를 시뮬레이션합니다(즉, 선택된 복제본으로 복제 및 선택된 복제본에서 복제를 일시 중지). 이를 통해 한 AWS 리전에서 중단이 발생했을 때 오류 처리, 복구 메커니즘, 다중 리전 트래픽 전환 동작을 테스트합니다.

예를 들어 글로벌 테이블의 복제본이 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건)에 있는 경우, 미국 동부(버지니아 북부)와 미국 서부(오리건)에서 정상 운영을 계속하면서 미국 동부(오하이오)에서 리전 격리를 테스트하는 실험을 실행할 수 있습니다. 이 제어된 테스트는 잠재적인 문제가 프로덕션 워크로드에 영향을 미치기 전에 이를 식별하고 해결하는 데 도움이 됩니다.

AWS FIS에서 지원하는 작업의 전체 목록을 보려면 AWS FIS 사용자 가이드작업 대상을 참조하고 리전 간 DynamoDB 복제를 일시 중지하려면 교차 리전 연결을 참조하세요.

AWS FIS에서 사용할 수 있는 Amazon DynamoDB 글로벌 테이블 작업에 대한 자세한 내용은 AWS FIS 사용자 가이드DynamoDB 글로벌 테이블 작업 참조를 참조하세요.

결함 주입 실험 실행을 시작하려면 AWS FIS 사용자 가이드의 AWS 실험 계획을 참조하세요.

참고

MRSC에서 AWS FIS 실험을 실행하는 동안 최종적으로 일관된 읽기가 허용되지만 MREC와 마찬가지로 결제 모드 변경 또는 테이블 처리량 구성과 같은 테이블 설정 업데이트는 허용되지 않습니다. 오류 코드에 대한 추가 세부 정보를 알아보려면 CloudWatch 지표 FaultInjectionServiceInducedErrors를 확인하세요.

TTL(Time To Live)

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

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

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

Streams

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

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

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

트랜잭션

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

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

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

읽기 및 쓰기 처리량

프로비저닝된 모드

복제는 쓰기 용량을 사용합니다. 프로비저닝된 용량에 대해 구성된 복제본은 애플리케이션 쓰기 처리량과 복제 쓰기 처리량의 조합이 프로비저닝된 쓰기 용량을 초과할 경우 요청을 스로틀링할 수 있습니다. 프로비저닝된 모드를 사용하는 글로벌 테이블의 경우 읽기 및 쓰기 용량에 대한 오토 스케일링 설정이 복제본 간에 동기화됩니다.

복제본 수준에서 ProvisionedThroughputOverride 파라미터를 사용하여 글로벌 테이블의 각 복제본에 대한 읽기 용량 설정을 독립적으로 구성할 수 있습니다. 기본적으로 프로비저닝된 읽기 용량에 대한 변경 사항은 글로벌 테이블의 모든 복제본에 적용됩니다. 글로벌 테이블에 새 복제본을 추가할 때 복제본 수준의 재정의가 명시적으로 지정되지 않은 한 소스 테이블 또는 복제본의 읽기 용량이 초기 값으로 사용됩니다.

온디맨드 모드

온디맨드 모드로 구성된 글로벌 테이블의 경우 쓰기 용량은 모든 복제본에서 자동으로 동기화됩니다. DynamoDB는 트래픽에 따라 용량을 자동으로 조정하며, 관리할 복제본별 읽기 또는 쓰기 용량 설정은 없습니다.

전역 테이블 모니터링

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

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

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

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

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

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

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