CapacityModes
1 용량 모드
![[Pasted image 20240701104719.png]]
- DynamoDB는 테이블의 용량(읽기/쓰기 처리량)을 관리하는 두 가지 모드를 제공합니다.
- 이 모드들은 테이블의 성능과 비용에 직접적인 영향을 미칩니다.
- 프로비저닝된 모드 (Provisioned Mode)
- 기본 모드로, 초당 읽기/쓰기 횟수를 미리 지정합니다.
- 용량을 사전에 계획해야 하며, 프로비저닝된 용량 단위에 대해 비용을 지불합니다.
- 예측 가능한 워크로드나 일정한 트래픽 패턴을 가진 애플리케이션에 적합합니다.
- 온디맨드 모드 (On-Demand Mode)
- 워크로드에 따라 읽기/쓰기가 자동으로 확장/축소됩니다.
- 용량 계획이 필요 없으며, 사용한 만큼만 비용을 지불합니다.
- 예측하기 어려운 워크로드나 급격한 트래픽 변동이 있는 애플리케이션에 적합합니다.
- 프로비저닝된 모드보다 비용이 더 높을 수 있습니다.
2 프로비저닝된 모드 (Provisioned Mode)
- 기본 모드로, 테이블의 초당 읽기/쓰기 횟수를 미리 지정합니다.
- 용량을 사전에 계획해야 하며, 프로비저닝된 읽기 및 쓰기 용량 단위에 대해 비용을 지불합니다.
- 예측 가능한 워크로드나 일정한 트래픽 패턴을 가진 애플리케이션에 적합합니다.
2.1 프로비저닝된 모드의 특징
- 읽기 용량 단위(RCU)와 쓰기 용량 단위(WCU)로 처리량을 측정합니다.
- 자동 스케일링 옵션을 통해 수요에 맞춰 처리량을 조정할 수 있습니다.
- "버스트 용량"을 통해 일시적으로 처리량을 초과할 수 있습니다.
- 버스트 용량이 소진되면 "ProvisionedThroughputExceededException"이 발생합니다.
2.2 스로틀링(Throttling)과 해결 방법
- 프로비저닝된 RCU나 WCU를 초과하면
ProvisionedThroughputExceededException이 발생합니다.
스로틀링의 주요 원인
- 핫 키(Hot Keys): 특정 파티션 키에 대한 읽기가 과도하게 많은 경우 (예: 인기 있는 아이템)
- 핫 파티션(Hot Partitions): 특정 파티션에 트래픽이 집중되는 경우
- 대용량 아이템: RCU와 WCU는 아이템 크기에 따라 달라지므로, 매우 큰 아이템의 경우 더 많은 용량 단위를 소비합니다.
해결 방법
- 예외 발생 시 지수 백오프(Exponential backoff) 사용
- 클라이언트 요청이 스로틀링될 때 지수 백오프를 통해 재시도 간격을 점차 늘려줍니다.
- 초기 재시도 간격을 짧게 시작해 점차 길게 함으로써 서버 부하를 줄이고 성공 확률을 높입니다.
- AWS SDK에서는 이미 지수 백오프 전략이 기본적으로 구현되어 있어 추가적인 작업이 필요하지 않습니다.
- 파티션 키를 최대한 분산하여 사용
- 트래픽이 특정 파티션에 집중되지 않도록 파티션 키를 더 고르게 분산해야 합니다.
- 파티션 키에 주기적인 값(예: 날짜, 지역) 등을 추가하여 더 많은 파티션으로 데이터를 분산시킵니다.
- 이로 인해 트래픽이 여러 파티션으로 나누어져 전체적인 스로틀링을 완화할 수 있습니다.
- RCU 관련 문제의 경우, DynamoDB Accelerator(DAX)를 사용하여 캐싱 계층 추가 고려
- DAX는 DynamoDB에 캐싱 계층을 추가하여 자주 조회되는 데이터를 메모리에서 빠르게 가져올 수 있게 합니다.
- 읽기 요청이 캐시에서 처리되므로 RCU를 줄일 수 있고, 스로틀링 문제도 완화됩니다.
- DAX는 일관성 요구사항이 덜 엄격한 애플리케이션에 적합하며, 응답 시간을 크게 단축할 수 있습니다.