2017-12-29 2 views
1

Javascript (Node.js) 용 AWS SDK를 사용하여 DynamoDB 테이블에서 데이터를 읽습니다. 자동 크기 조정 기능은 대부분의 시간 동안 훌륭한 작업을 수행하며, 소비 된 읽기 용량 단위 (RCU)는 하루 중 가장 낮습니다. 그러나 자정 무렵에 실행되는 프로그래밍 된 작업으로 인해 제공된 RCU의 약 10 배를 소모하며 자동 조정에 용량 조정에 약간의 시간이 걸리기 때문에 많은 읽기 요청이 조절됩니다. 또한 내 요청이 완료되지 않은 것으로 판단됩니다 (오류 로그에서 예외를 찾을 수는 없지만).프로비저닝 된 처리량을 초과 할 때 수행해야 할 작업은 무엇입니까?

이 상황을 처리하기 위해 AWS API (updateTable)를 사용하여 제공된 RCU를 늘리는 방법을 고려했지만 응용 프로그램 요구 사항이 RCU 수를 계산하는 것은 간단하지 않을 수 있습니다.

그래서 내 두 번째 추측은 실패한 요청을 다시 시도하고 자동 확장이 준비된 RCU를 기다리는 것입니다. AWS의 문서 일부 스택 오버플로 답변 (particularlly에 대한 ProvisionedThroughputExceededException)에 의해 지적 : 아마존 DynamoDB의에 대한

AWS SDK를 자동으로이 예외를받을 요청을 다시 시도하십시오. 따라서 요청이 너무 많거나 재시도 대기열이 너무 커서 끝내지 않는 한, 요청은 결국 성공적입니다.

나는 비슷한 질문 (this one, this onethis one)을 읽었습니다하지만, 난 여전히 혼란 스러워요 :이 예외가 발생 요청이 너무 크거나 재시도 큐가 자동 후에 때문에 (마무리 너무 큰 경우 재시도) 또는 재 시도 전에 실제로?

가장 중요하게는은 내 맥락에서 예외가되어야한다는 것입니까? (그래서 나는 그것을 잡을 수 있고, 자동 저울이 RCU를 올릴 때까지 재 시도하겠습니까?)

답변

2

예.

응용 프로그램이 용량을 초과하는 요청을 전송할 때마다 Dynamo에서 ProvisionedThroughputExceededException 메시지가 나타납니다. 그러나 SDK가이를 처리하고 다시 시도합니다. 기본 Dynamo 재시도 시간은 50ms에서 시작하고 기본 재시도 횟수는 10 회이며 백 오프는 기본적으로 지수입니다.

  • 50ms의
  • 이 100ms
  • 200ms의
  • 에는 400ms
  • 800ms
  • 1.6s
  • 3.2s
  • 6.4s
  • :

    이것은 당신이에 시도를 얻을 의미 012

  • 25.6s

10 일 후 요청을 다시 시도하는 경우

  • 12.8s
  • 3,516,은 아직 성공하지 않은 SDK는 응용 프로그램에 다시 ProvisionedThroughputExceededException을 통과하고 당신이 좋아하는 당신은 어떻게 그것을 처리 할 수 ​​있습니다.

    처리량을 늘리면 처리 할 수 ​​있지만 다른 옵션은 Dynamo 연결을 만들 때의 기본 다시 시도 시간을 변경하는 것입니다. 예를

    new AWS.DynamoDB({maxRetries: 13, retryDelayOptions: {base: 200}}); 
    

    를 들어 이것은 당신이 200ms의 초기 지연, 13 번을 다시 시도 의미 할 것입니다. 그러면 25.6 초가 아닌 819.2 초까지 요청을 완료 할 수 있습니다.

    관련 문제