2017-02-13 6 views
-1

Вот моя проблема:Callback для множественного завершения выполнения AWS Lambda

Я должен сравнить объект кандидата с некоторыми критериями, с миллионами других кандидатов в дб. Поскольку лямбда позволяет выполнять только 5 минут, поэтому он вызывает таймаут.

Мое решение:

Я планировал сделать это сравнение с 10000 кусков кандидатов, так что я должен назвать 10 лямбда-функции (через SNS), чтобы обработать 100,000 кандидатов, а затем сохранить результаты каждого лямбда в некоторые таблицы DynamoDB. Но как получить обратный вызов, когда все лямбда-функции выполняются, чтобы я мог собирать эти результаты для отдельных лямбда, а затем вычислять окончательные результаты. Как достичь этого или есть лучший способ достичь моей цели. Любая помощь очень ценится.

+0

Вместо того, чтобы бороться с 10 функциями лямбда, которые делают то же самое, почему бы не создать экземпляр EC2/Elastic Beanstalk и запустить приложение там? –

+0

Это требование клиента @ GerritvanHuyssteen. –

+0

Что вы подразумеваете под «сравнением»? Вы пытаетесь найти одного лучшего кандидата из многих, кого сравнивают? Или вам нужно ранжировать верхний X на основе некоторых критериев? – JohnH

ответ

1

Я не уверен, что AWS Lambda действительно подходит для вашего случая использования. Однако, просто сосредоточив внимание на основной части вашего вопроса, вы можете использовать DynamoDB Atomic Counters, чтобы определить, когда вся обработка завершена. Вы бы сделать следующее:

  • Первоначально вставить запись в DynamodB с полем, как numberOfLambdaCalls набор атрибутов для числа одновременных казней вы сбрасывая, и атрибут completedLambdaCalls установлен в 0.
  • По мере выполнения каждой функции, как часть обновления записи DynamoDB, они будут увеличивать атрибут completedLambdaCalls атомарно.
  • Каждая функция может проверить возвращенный результат обновления, чтобы узнать, были ли они завершены обработкой, например if numberOfLambdaCalls == completedLambdaCalls, и если они есть, выполните любое действие, необходимое для запуска вашего ответа.
+0

Спасибо, Марк. Ваш ответ почти прав. это на самом деле привело меня к более точному решению, которое является «Condiditional Update» http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html#WorkingWithItems.ConditionalUpdate –

+0

Я хотел бы знать, что конкретно неверно о моем ответе. И как Conditional Update решает вашу проблему в точности? –

+0

Из документов AWS «Однако в банковском приложении было бы безопаснее использовать условное обновление, а не атомный счетчик». Атомный счетчик может вызывать неправильный счетчик в случаях одновременных обновлений, в то время как условное обновление позволяет добавить условное выражение. например два запроса concrrent получают одинаковое значение счетчика, скажем 10. Затем мы можем добавить условие на обновление, что существующее значение должно быть 10. Итак, 1-й будет обновлять его 11, а второй будет терпеть неудачу, и при повторном запуске он обновит счетчик до 12 –

Смежные вопросы