DAX с DynamoDB по требованию
Заявка:
У меня есть приложение Java, которое имеет всплески / всплески на входе, которые представляют события. Для каждого события всегда есть чтение, принятое решение (логика), а затем возможная запись (вставка или обновление) на основе этого решения. Большинство операций чтения не приводят к записи (вставке / обновлению) изо дня в день. Теоретически это хороший сценарий для DAX и DynamoDB с биллингом / настройкой по требованию.
Сценарий /Issue:
Когда происходит всплеск, состоящий из всплесков записей, то иногда (но не всегда) мы наблюдаем всплеск общих экземпляров AmazonClientException. Исключения имеют retry
(т.е. isRetry()
) из false
и основной причиной является экземпляр InternalServerException с общим значением сообщения / строкой, которое включает в себя текст, на который был получен ответ 500 (без дополнительных подробностей или ясности).
Эти исключения DAX и их трассировки стека действительно не дают представления об их истинной причине (например, регулирование, исключение пропускной способности временного предоставления до изменения размера, недоступность хоста и т. Д.). Это выглядит как неожиданное поведение ответа от DAX для того, что мне кажется, что я изменяю размеры по требованию DynamoDB (дополнительные советы см. В дополнительной информации ниже), но я все еще немного теряю ясность в отношении причины, когда они происходят в ответ на этот сценарий.
Дополнительная информация:
- Я использую последний доступный экземпляр клиента Java DAX.
- Вне очередей чтение / запись постоянно успешны. Это включает в себя создание медленной подачи с событиями / данными в контролируемом тестовом примере, которые были захвачены при создании исключений в пакете.
- При использовании Provisioned (не по требованию) мы не видим этих неопределенных клиентских исключений. Мы видим, что пропускная способность достигла исключений из DAX, как и ожидалось для тех же сценариев пакетной передачи / всплеска, и мы используем успешную стратегию повторных попыток возврата, основанную на этих исключениях
isRetry()
(т.е.true
) определить, что мы можем / должны повторить попытку.