Что происходит, когда умирает лямбда? - PullRequest
0 голосов
/ 12 декабря 2018

Я новичок в AWS, поэтому я не уверен, что такое поведение, когда возникает следующая ситуация.

Допустим, у меня есть поток Kinesis с данными JSON (и, скажем, каждую пару минут несколько тысячсообщения вставляются).

Теперь есть лямбда-функция, которая вызывается каждый раз, когда в Kinesis вставляется новое сообщение, которое читает сообщение и выполняет некоторую обработку перед вставкой в ​​Redshift.

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

Заранее спасибо.

1 Ответ

0 голосов
/ 13 декабря 2018

Сбой лямбда-функции при выполнении обработки

Это возможно.

и занимает несколько минут илидаже пару часов (я не знаю, возможно ли это вообще), чтобы вернуться.

Это не совсем возможно.

Лямбда-функция может запускаться только до тех пор, пока она не вернет ответ, не выдаст ошибку или не сработает таймер таймаута, в зависимости от того, что наступит раньше.Это никогда не займет пару часов.

Lambda будет создавать новый контейнер каждый раз, когда вызывается функция, если только у него уже нет одного готового для вас или вы не достигнете предела параллелизма (обычно 1000+).

Однако ... для потоков Kinesis происходит немного иначе из-за необходимости обработки по порядку.

Источники событий на основе опроса (или модели извлечения), которыеоснованы на потоках: они состоят из потоков данных Kinesis или DynamoDB.В случае сбоя вызова лямбда-функции AWS Lambda пытается обработать ошибочный пакет записей до истечения срока действия данных, который может быть до семи дней.

Исключение рассматривается как блокировка, а AWS Lambda не будетчитать любые новые записи из сегмента до тех пор, пока не истечет или не будет успешно обработан неудачный пакет записей.Это гарантирует, что AWS Lambda обрабатывает события потока по порядку.

https://docs.aws.amazon.com/lambda/latest/dg/retries-on-errors.html

Таким образом, ваша функция Lambda, выбрасывающая исключение или выполняющая его время ожидания, просто вызовет уничтожение службы Lambdaнемедленно создать контейнер и сразу же создать новый, а затем еще раз повторить вызов с теми же данными, пока не истечет срок действия данных (в соответствии с настройкой Kinesis).

Задержка обычно не превышает тайм-аут иливремя, необходимое для возникновения исключения, плюс некоторое количество миллисекунд (до нескольких секунд для холодного запуска).Тайм-аут настраивается индивидуально для самой функции Lambda, до 15 минут (но этот максимум, вероятно, слишком длинный).

Потенциально важно запомнить несколько скрытых деталей - есть система, котораячасть службы Lambda, которая читает ваш поток Kinesis, а затем сообщает другой части службы Lambda, чтобы она вызывала вашу функцию с пакетом записей.Служба Lambda (не ваша функция Lambda) проверяет поток, извлекая данные - поток технически не передает данные в Lambda.Потоки DynamoDB и SQS работают аналогично - Lambda извлекает данные и обрабатывает повторные попытки, повторно вызывая функцию.Другая служба не несет ответственности за передачу данных.

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