DynamoDB Stream в Lambda медленно / не подходит - PullRequest
0 голосов
/ 17 октября 2018

Я подключил лямбду к таблице DyDB через поток.Когда запись записывается в таблицу, она запускает лямбду.Трафик очень бурный, поэтому какое-то время ничего не может случиться, тогда я напишу несколько тысяч записей.

Я вижу, что будет запущено несколько лямбда-экземпляров, но их недостаточно для обработки пакета.,Затем в случайное время число лямбда-экземпляров подскочит на порядок или два (от 2 до 90 и более), и оно наверстает упущенное.Проблема в том, что скачок может не произойти в течение 30 минут или более.

Я вижу записи, записанные в таблицу очень быстро (в секундах).Обработка лямбды 20 записей не должна занимать более 2 минут.Кажется, что лямбды проводят большую часть своего времени, сидя без дела, ожидая появления записей.Ключ записи для таблицы - GUID.

Вещи, которые я пробовал

  • Играя с количеством записей, чтобы убедиться в отсутствии лямбда-таймаутов (20 кажется консервативным,но 100 вызывает тайм-ауты)
  • Перемещение лямбды в другую подсеть
  • Пакетная запись в таблицу (~ 500-1000 записей в пакете)
  • Разделение записейв надежде, что это вызовет больше лямбд (~ 20-100 записей в пакете)
  • Увеличение лямбда-памяти до максимума (3 ГБ)
  • Уменьшение памяти, чтобы быть больше, чем используется (1 ГБ, 300 МБб)

Есть ли лучший шаблон для использования?Должен ли я пропустить поток и просто написать сообщения SNS?Меня не волнует порядок, но я бы предпочел не запускать работу более одного раза.

1 Ответ

0 голосов
/ 18 октября 2018

Итак, вот что я выяснил.

Похоже, что проблема заключается в конфликте в потоке DynamoDB экземплярами lambda.

Мое решение состояло в том, чтобы пропустить поток DynamoDB и не использовать его, а затем отправить в очередь SNS.Лямбды принимают сообщения и масштабируются намного лучше.Времена прошли от часов до секунд.

...