Запросы DynamoDB занимают 2000мс без видимой причины - PullRequest
0 голосов
/ 23 сентября 2019

Я использую DynamoDB для запроса некоторых данных.Внизу вы можете увидеть количество миллисекунд для определенного процента запросов.

Большую часть времени DynamoDB работает нормально с временем отклика около 100 мс.(есть только запросы по первичному ключу или индексам).Около 0,4% запросов занимают более 800 мс (что является пределом, который служба должна предоставлять для ответа) даже в «спокойные» времена.Это не идеально, но достаточно хорошо.

Однако определенная нагрузка (которая даже не большая) вызывает поведение DynamoDB, которое приводит к тому, что около 5% запросов имеют время отклика 2000 мс.В одном запросе есть несколько запросов, но если один из этих запросов занимает более 800 мс, весь запрос завершается вызывающим абонентом.

Мы используем Node.js, и вот как мы используем библиотеку AWS:

Вот так мы запускаем библиотеку

const dynamodb = new AWS.DynamoDB.DocumentClient({
    region: config.server.region,
});

/// ...

dynamodb.query(params).promise()

Пример запроса

{ 
   "TableName":"prod-UserDeviceTable",
   "KeyConditionExpression":"#userId = :userId",
   "ExpressionAttributeNames":{ 
      "#userId":"userId"
   },
   "ExpressionAttributeValues":{ 
      ":userId":"e3hs8etjse3t13se8h7eh4"
   },
   "ConsistentRead":false
}

Еще несколько замечаний:

  • ЦП службы в настоящее времяавтоматическое масштабирование ниже 10%, более высокая нагрузка или использование процессора не ухудшают работу сервиса, мы даже пытались достичь 50% с тем же временем отклика
  • Нет "увеличения" времени отклика.Его обычно меньше 100 мс, а затем из ниоткуда его 2000 на 1-5%.Как видно из графика
  • В запросах не используется ConsistentRead
  • Мы используем глобальные таблицы в 4 регионах.Это происходит во всех регионах (служба развернута независимо во всех 4 регионах)
  • Метрики DynamoDB для используемых таблиц не показывают скачков времени отклика
  • Служба развернута в ECS Fargate,но он был развернут ранее в ECS EC2 с теми же результатами
  • Все таблицы во всех регионах по требованию
  • Задержка 2000 мс происходит в любом месте службы в течение времени жизни запроса при запросе динамодат (= происходит для разныхзапросы, даже для разных таблиц)
  • Когда я повторяю тот же запрос, который снова занял более 2000 мс, он занимает всего 100 мс или меньше

graph01graph02

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...