DynamoDB 스트림 사용량 평가 - Amazon DynamoDB

DynamoDB 스트림 사용량 평가

이 섹션에서는 DynamoDB Streams 사용량을 평가하는 방법을 간략히 살펴봅니다. DynamoDB에 최적화되지 않은 특정 사용 패턴이 있으며, 이러한 패턴은 성능 및 비용 측면에서 모두 최적화될 수 있는 여지가 있습니다.

다음과 같은 스트리밍 및 이벤트 기반 사용 사례를 위한 두 가지 기본 스트리밍 통합이 있습니다.

이 페이지에서는 이러한 옵션에 대한 비용 최적화 전략에 초점을 맞출 것입니다. 대신 두 옵션 중 하나를 선택하는 방법을 알아보려면 변경 데이터 캡처의 스트리밍 옵션 섹션을 참조하세요.

DynamoDB Streams에 대한 비용 최적화

DynamoDB Streams의 요금 페이지에 설명되어 있는 것처럼, DynamoDB는 테이블의 처리량 용량 모드에 관계없이 테이블의 DynamoDB 스트림에 대한 읽기 요청 수에 따라 요금을 청구합니다. DynamoDB 스트림에 대한 읽기 요청은 DynamoDB 테이블에 대한 읽기 요청과 다릅니다.

스트림과 관련된 각 읽기 요청은 GetRecords API 호출 형태로, 응답에서 최대 1,000개 또는 1MB 상당 중 먼저 도달하는 양의 레코드를 반환할 수 있습니다. 다른 DynamoDB 스트림 API에는 요금이 부과되지 않으며 DynamoDB 스트림은 유휴 상태에 대해 요금이 청구되지 않습니다. 즉, DynamoDB 스트림에 대한 읽기 요청이 없는 경우 테이블에서 DynamoDB 스트림이 활성화되어 있어도 요금이 부과되지 않습니다.

다음은 DynamoDB Streams용 몇 가지 소비자 애플리케이션입니다.

  • AWS Lambda 함수

  • Amazon Kinesis Data Streams 기반 애플리케이션

  • AWS SDK를 사용하여 구축된 고객 소비자 애플리케이션

DynamoDB Streams의 AWS Lambda 기반 소비자가 전송한 읽기 요청은 무료이지만, 다른 유형의 소비자에 의한 호출에는 요금이 부과됩니다. 매달 Lambda를 사용하지 않는 소비자가 전송한 첫 2,500,000건의 읽기 요청도 무료로 제공됩니다. 이는 각 AWS 리전의 AWS 계정에 있는 모든 DynamoDB 스트림에 대한 모든 읽기 요청에 적용됩니다.

DynamoDB Streams 사용량 모니터링

결제 콘솔의 DynamoDB Streams 요금은 AWS 계정 내 AWS 리전의 모든 DynamoDB 스트림에 대해 함께 그룹화됩니다. 현재 DynamoDB 스트림에 태그를 지정하는 것은 지원되지 않으므로 비용 할당 태그를 사용하여 DynamoDB Streams의 세부 비용을 식별할 수는 없습니다. GetRecords 호출 볼륨은 DynamoDB 스트림 수준에서 얻어 스트림당 요금을 계산할 수 있습니다. 볼륨은 DynamoDB 스트림의 CloudWatch 지표 SuccessfulRequestLatency와 해당 SampleCount 통계로 표시됩니다. 이 지표에는 지속적인 복제를 수행하기 위해 글로벌 테이블에서 실행하는 GetRecords 호출과AWS Lambda 소비자가 실행하는 호출이 포함되며, 둘 다에는 요금이 부과되지 않습니다. DynamoDB Streams에서 게시한 다른 CloudWatch 지표에 대한 자세한 내용은 DynamoDB 지표 및 차원 섹션을 참조하세요.

AWS Lambda를 소비자로 사용

AWS Lambda 함수를 DynamoDB Streams의 소비자로 사용하는 것이 가능한지 평가해 보세요. 그러면 DynamoDB 스트림에서 읽기와 관련된 비용을 절감할 수 있기 때문입니다. 반면 DynamoDB Streams Kinesis 어댑터 또는 SDK 기반 소비자 애플리케이션은 DynamoDB 스트림에 대한 GetRecords 호출 수에 따라 요금이 부과됩니다.

Lambda 함수 호출 요금은 표준 Lambda 요금을 기준으로 부과되지만 DynamoDB Streams에 의해 발생하는 요금은 없습니다. Lambda는 초당 4회의 기본 속도로 DynamoDB 스트림의 샤드에서 레코드를 폴링합니다. 레코드를 사용할 수 있으면 Lambda가 함수를 호출하고 결과를 기다립니다. 처리가 성공하면 Lambda가 레코드를 더 받을 때까지 폴링을 재개합니다.

DynamoDB Streams Kinesis 어댑터 기반 소비자 애플리케이션 조정

Lambda 기반이 아닌 소비자가 전송한 읽기 요청은 DynamoDB Streams에 대해 요금이 청구되므로 실시간에 가까운 요구 사항과 소비자 애플리케이션이 DynamoDB 스트림을 폴링해야 하는 횟수 사이의 균형을 찾는 것이 중요합니다.

DynamoDB Streams Kinesis 어댑터 기반 애플리케이션을 사용하여 DynamoDB 스트림을 폴링하는 빈도는 구성된 idleTimeBetweenReadsInMillis 값에 따라 결정됩니다. 이 파라미터는 동일한 샤드에 대한 이전 GetRecords 호출에서 레코드가 반환되지 않는 경우 소비자가 샤드를 처리하기 전에 기다려야 하는 시간(밀리초)을 결정합니다. 이 파라미터의 기본값은 1000밀리초입니다. 실시간에 가까운 처리가 필요하지 않은 경우 이 파라미터를 늘려 소비자 애플리케이션이 더 적은 GetRecords 호출을 실행하고 DynamoDB Streams 호출에 최적화되도록 할 수 있습니다.

Kinesis Data Streams에 대한 비용 최적화

Kinesis 데이터 스트림이 DynamoDB 테이블에 대한 변경 데이터 캡처 이벤트를 전달할 대상으로 설정된 경우, Kinesis 데이터 스트림에 별도의 크기 조정 관리가 필요할 수 있으며 이는 전체 비용에 영향을 미칩니다. DynamoDB는 DynamoDB 서비스에서 대상 Kinesis 데이터 스트림으로 시도한 1KB DynamoDB 항목 크기로 각 단위가 구성된 변경 데이터 캡처 단위(CDU)를 기준으로 요금을 청구합니다.

DynamoDB 서비스 요금 외에도 표준 Kinesis 데이터 스트림 요금이 부과됩니다. 요금 페이지에 언급되어 있는 것처럼 서비스 요금은 용량 모드(프로비저닝 및 온디맨드)에 따라 달라지며, 이는 DynamoDB 테이블 용량 모드와 달리 사용자가 정의합니다. 개괄적으로 보면 Kinesis Data Streams는 DynamoDB 서비스에 의해 스트림으로 수집된 데이터뿐만 아니라 용량 모드를 기준으로도 시간당 요금을 청구합니다. Kinesis 데이터 스트림의 사용자 구성에 따라 데이터 검색(온디맨드 모드의 경우), 데이터 보존 기간 연장(기본 24시간 이후), 향상된 팬아웃 소비자 검색과 같은 추가 요금이 부과될 수 있습니다.

Kinesis Data Streams 사용 모니터링

DynamoDB용 Kinesis Data Streams는 표준 Kinesis 데이터 스트림 CloudWatch 지표와 함께 DynamoDB의 지표를 게시합니다. 충분하지 않은 Kinesis 데이터 스트림 용량이나 Kinesis 데이터 스트림 저장 데이터를 암호화하도록 구성된 AWS KMS 서비스와 같은 종속 구성 요소로 인해 Kinesis 서비스가 DynamoDB 서비스의Put 시도를 제한할 수 있습니다.

DynamoDB 서비스에서 Kinesis 데이터 스트림에 대해 게시한 CloudWatch 지표에 대한 자세한 내용은 Kinesis Data Streams를 사용하여 변경 데이터 캡처 모니터링 섹션을 참조하세요. 제한으로 인한 서비스 재시도에 따른 추가 비용을 피하려면 프로비저닝 모드에서 Kinesis 데이터 스트림의 크기를 적절하게 조정하는 것이 중요합니다.

Kinesis Data Streams에 적절한 용량 모드 선택

Kinesis Data Streams는 프로비저닝 모드와 온디맨드 모드의 두 가지 용량 모드에서 지원됩니다.

  • Kinesis 데이터 스트림과 관련된 워크로드에 예측 가능한 애플리케이션 트래픽, 일정하거나 점진적으로 증가하는 트래픽 또는 정확하게 예측할 수 있는 트래픽이 있는 경우 Kinesis Data Streams의 프로비저닝 모드가 적합하며 비용 효율성이 더 높습니다.

  • 새로운 워크로드이거나, 워크로드에 예측할 수 없는 애플리케이션 트래픽이 있거나, 용량을 관리하지 않으려는 경우에는 Kinesis Data Streams의 온디맨드 모드가 적합하며 비용 효율성이 더 높습니다.

비용을 최적화하는 모범 사례는 Kinesis 데이터 스트림과 연결된 DynamoDB 테이블에 Kinesis 데이터 스트림의 프로비저닝 모드를 활용할 수 있는 예측 가능한 트래픽 패턴이 있는지 평가하는 것입니다. 새로운 워크로드인 경우 처음 몇 주 동안은 Kinesis Data Streams의 온디맨드 모드를 사용하고 CloudWatch 지표를 검토하여 트래픽 패턴을 파악한 다음, 워크로드의 특성에 따라 해당 스트림을 프로비저닝 모드로 전환할 수 있습니다. 프로비저닝 모드의 경우 Kinesis Data Streams의 샤드 관리 고려 사항에 따라 샤드 수를 추정할 수 있습니다.

DynamoDB용 Kinesis Data Streams를 사용하는 소비자 애플리케이션 평가

Kinesis Data Streams는 DynamoDB Streams처럼 GetRecords 호출 수에 대해 요금을 부과하지 않으므로 소비자 애플리케이션은 빈도가 GetRecords 제한 한도 미만인 경우 원하는 횟수만큼 호출을 실행할 수 있습니다. Kinesis Data Streams의 온디맨드 모드의 경우 데이터 읽기 요금은 GB당 부과됩니다. 프로비저닝 모드 Kinesis Data Streams의 경우 데이터가 7일 미만인 경우 읽기 요금이 부과되지 않습니다. Lambda가 Kinesis Data Streams 소비자 기능을 하는 경우 Lambda는 초당 1회의 기본 속도로 Kinesis 스트림의 각 샤드에서 레코드를 폴링합니다.

두 가지 유형의 Streams 사용에 대한 비용 최적화 전략

AWS Lambda 소비자를 위한 이벤트 필터링

Lambda 이벤트 필터링을 사용하면 필터 기준에 따라 Lambda 함수 호출 배치에서 사용할 수 없도록 이벤트를 삭제할 수 있습니다. 이는 소비자 함수 로직 내에서 원치 않는 스트림 레코드를 처리하거나 폐기하는 Lambda 비용을 최적화합니다. 이벤트 필터링을 구성하고 필터링 기준을 작성하는 방법에 대한 자세한 내용은 Lambda 이벤트 필터링을 참조하세요.

AWS Lambda 소비자 조정

호출당 처리량을 늘리도록 BatchSize를 늘리고, 처리 중복(추가 비용 발생) 방지를 위해 BisectBatchOnFunctionError를 활성화하며, 재시도를 너무 많이 하지 않도록 MaximumRetryAttempts를 설정하는 등 Lambda 구성 파라미터를 조정하여 비용을 더욱 최적화할 수 있습니다. 기본적으로 실패한 소비자 Lambda 호출은 스트림에서 레코드가 만료될 때까지 무한정 재시도됩니다. 이는 DynamoDB Streams의 경우 약 24시간이며 Kinesis Data Streams의 경우 24시간에서 최대 1년까지 구성할 수 있습니다. 위에서 언급한 옵션을 포함하여 DynamoDB Stream 소비자를 위해 사용할 수 있는 추가 Lambda 구성 옵션은 AWS Lambda 개발자 안내서를 참조하세요.