DAX не снижает емкость чтения DynamoDB

У меня есть таблица DynamoDB, которая используется почти исключительно для чтения. ~50 000 000 операций чтения на 1 запись, так что, похоже, это хороший пример использования DAX.

В настоящее время в этой таблице только 112 элементов, и мы запускаем только queries (никогда не сканирует). В настоящее время мы выдаем в общей сложности 3 запроса, каждый раз, когда мы запрашиваем, это один из этих 3 запросов, и запросы запрашиваются из лямбда-функций. Таблица установлена ​​на автоматическое масштабирование между 50 и 2000.

Я запустил кластер DAX с 2 узлами и изменил код в нашем приложении, чтобы использовать кластер DAX исключительно для чтения и записи. Вот метрики DAX с приборной панели.

Из метрик DAX видно, что кластер запрашивается. TTL установлен на 24 часа, так что я ожидаю увидеть, что емкость чтения таблицы должна упасть до минимального заданного порога в течение большей части дня, потому что все должно происходить из кластера DAX. Только один раз в день, когда TTL очищает запросы, таблица "Динамо" должна быть нажата. То, что я на самом деле вижу, это без изменений в мощности Динамо. Он остается статически на 2000 обеспеченных и ~1000 потребляемых независимо.

Я также подтвердил, что DAX попадает в мои журналы:

INFO: connected to cluster endpoints: [Backend{addr=/172.31.140.192:8111,healthy=true,active=true,config=ServiceEndpoint{18446744072535932612,null,[-84, 31, -116, -64],8111,REPLICA,us-east-1a,0}}, Backend{addr=/172.31.146.78:8111,healthy=true,active=true,config=ServiceEndpoint{2014424391,null,[-84, 31, -110, 78],8111,LEADER,us-east-1b,1962776298892615}}]

Я заметил пару метрик, которые подтверждают, что порог потребления все еще остается на своем первоначальном уровне. Я также вижу, что существует ОГРОМНОЕ несоответствие между 'Query Request Count' и 'Query Cache Hits' (см. Конец этого поста об ошибке панели инструментов). Это странно, поскольку мы выдаем статические запросы (те же 3 запроса для каждого запроса).

Я не уверен, что я неправильно понял DAX или есть какое-то условие, о котором я не знаю, но я был бы очень признателен, если бы кто-то мог помочь диагностировать, почему это может происходить.

Для справки вот DAX Docs.


AWS BUG

'Количество запросов Query' отображается как ~7k, но когда я нажимаю на график, он показывает как ~ 1,5k. я

Я предполагаю, что это ошибка, но AWS не ответил на мой запрос об ошибке. В настоящее время я предполагаю, что подробный вид является правильным.

1 ответ

После более подробного изучения я считаю, что это, скорее всего, ошибка AWS. Я создал специальный тест для проверки этого следующим образом:

  1. Я создал новую выделенную таблицу со 100 элементами управления всего 1 КБ.
  2. Я запустил новый кластер DAX с 2 узлами.
  3. Я создал 2 статических запроса. Один, чтобы получить те же 10 предметов, а второй, чтобы получить те же 50 предметов.
  4. Я запускал запрос по циклу 1000 раз с 10-секундными интервалами.

Я обнаружил, что не имеет значения, что я выполнял один и тот же запрос раз за раз, когда таблица DynamoDB каждый раз выполнялась для обоих статических запросов. Интересно, что приборная панель DAX сообщила, что запросы были отправлены, и она также заявила, что 999 из 1000 запросов, где хиты и только 1, были пропущены. Это именно то, что я ожидал бы, за исключением того, что запрос, кажется, передается в базовую таблицу независимо.

Я также запустил очень похожий тест, но вместо использования запросов я использовал элемент get batch, и в этом случае кэш работал как положено, а таблица DynamoDB работала только после истечения TTL.

Единственное объяснение тому, что вы видите, - это то, что вы делаете несколько запросов с установленным флагом чтения. Это объясняет, почему метрики "Query Cache Hits" и "Query Cache Misses" не добавляются к метрике "Query Request Count". Потому что последовательные чтения не учитываются ни как попадания, так и пропуски. Это также объясняет, почему вы по-прежнему видите высокую потребляемую мощность DynamoDB, поскольку согласованные чтения проходят через DynamoDB. Можете ли вы дважды проверить, установлен ли флаг согласованного чтения в false? Вы используете клиент DynamoDB напрямую, или вы используете маппер или клиент документа?

Что касается "ошибки AWS", я думаю, вы просто видите различные агрегации метрик в 1 и 5 минут. Если вы установите интервал в 5 минут в подробном представлении, вы должны увидеть тот же график на приборной панели.

Другие вопросы по тегам