Зачем использовать пошаговую функцию (AWS) вместо setTimeout (Javascript) для функциональности планировщика

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

  1. Создайте лямбду с помощью nodeJS и используйте setTimeout для ожидания
  2. Создайте пошаговую функцию для ожидания x количества секунд, которая вызовет мою лямбду для выполнения HTTP-запроса.

Я пытаюсь понять, каковы плюсы и минусы каждого из них. setTimeout выглядит простым в реализации и без явных недостатков. Есть ли причина, по которой я должен использовать ступенчатые функции?


person Ravi Chaudhary    schedule 27.03.2018    source источник
comment
Насколько большим может быть число секунд?   -  person t.niese    schedule 27.03.2018
comment
это число может быть очень большим. До сих пор мы не думали устанавливать какие-либо ограничения   -  person Ravi Chaudhary    schedule 27.03.2018


Ответы (2)


В мгновение ока я могу придумать следующее, обновлю, если получу больше очков

  1. Лямбда может тайм-аут. В то время как StepFunctions может ждать, например. также год.
  2. Lambda будет стоить за время ожидания, а StepFunction — нет.
  3. Существует ограничение на количество одновременных исполнений для лямбда-выражений до 1000, в то время как StepFunction может иметь максимум 1 000 000 открытых исполнений.

Ссылка:
https://docs.aws.amazon.com/step-functions/latest/dg/limits.html#service-limits-state-machine-executions
https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html#per-function-concurrency

person raevilman    schedule 27.03.2018

У меня нет никаких знаний о пошаговых функциях aws, поэтому я ничего не могу сказать об этом. Но использование setTimeout в nodejs с возможной действительно большой задержкой может стать настоящей проблемой, если вы хотите создать стабильный и поддерживаемый API по следующим причинам:

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

  • если ваше приложение дает сбой, все текущие ожидающие запросы теряются.

  • если системный nodejs работает, необходимо перезапустить его, чтобы установить критическое обновление безопасности, тогда все ожидающие запросы будут потеряны.

Так что setTimeout не следует использовать для таких дублей. Если вы хотите сделать это в узле, вам нужно будет хранить/отражать эти запросы в постоянном хранилище.

person t.niese    schedule 27.03.2018