Чтобы избежать исключения, очевидным ответом будет «Использовать автоматическое масштабирование на емкости DynamoDb».И это то, что я сделал, с определенной степенью удачи: когда всплеск запроса возник, у меня все еще было исключение, но в среднем автомасштабирование работало довольно хорошо.Вот CloudFormation для автоматического масштабирования:
MyTableWriteScaling:
Type: AWS::ApplicationAutoScaling::ScalableTarget
Properties:
MaxCapacity: 250
MinCapacity: 5
ResourceId: !Join ["/", ["table", !Ref myTable ]]
ScalableDimension: "dynamodb:table:WriteCapacityUnits"
ServiceNamespace: "dynamodb"
RoleARN: {"Fn::GetAtt": ["DynamoDbScalingRole", "Arn"]}
WriteScalingPolicy:
Type: AWS::ApplicationAutoScaling::ScalingPolicy
Properties:
PolicyName: !Join ['-', [!Ref 'AWS::StackName', 'MyTable', 'Write', 'Scaling', 'Policy']]
PolicyType: TargetTrackingScaling
ScalingTargetId: !Ref MyTableWriteScaling
ScalableDimension: dynamodb:table:WriteCapacityUnits
ServiceNamespace: dynamodb
TargetTrackingScalingPolicyConfiguration:
PredefinedMetricSpecification:
PredefinedMetricType: DynamoDBWriteCapacityUtilization
ScaleInCooldown: 1
ScaleOutCooldown: 1
TargetValue: 60
DependsOn : MyTableWriteScaling
Тем не менее, у меня все еще было Исключение.Я знал, что дросселированные запросы в конечном итоге будут написаны, но я искал способ предотвратить исключение, так как не смог его перехватить.
Способ сделать это был представлен Amazon в ноябре28 и это DynamoDB по запросу.
Весьма полезно, в объявлении, которое мы читаем:
DynamoDB по требованию полезен, если трафик вашего приложения трудно прогнозировать и контролировать, ваша рабочая нагрузка имеет большие всплески короткой продолжительности,или если ваше среднее использование таблиц значительно ниже пика.
Настройка по требованию в CloudFormation не может быть проще:
HotelStay:
Type: AWS::DynamoDB::Table
Properties:
BillingMode: PAY_PER_REQUEST
...
Изменение BillingMode
и удалениеProvisionedThroughput
предотвратило появление такого рода исключений, они просто исчезли навсегда.