Планирование одноразовых заданий с помощью AWS - PullRequest
1 голос
/ 13 февраля 2020

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

Все наши код до сих пор реализован как лямбда-функции.

Я рассматриваю три варианта реализации этого:

  1. Создание записи в DynamoDB с ключом ha sh быть ключом даты и диапазона, являющимся уникальным идентификатором. Запланируйте запуск лямбды один раз в день и заберите все записи / задачи, запланированные на этот день, отправьте сообщение для каждой из них.

  2. Использование SDK Создание правила события cloudwatch с выражением cron, указывающим одиночный выполнение и заставить его вызывать лямбда-функцию (цель) с идентификатором пользователя / сообщения. Лямбда будет вызываться по заданному c расписанию с указанием c пользователя / сообщения для доставки.

  3. Создайте экземпляр функции шага и настройте его для режима сна и вызова шага с logi c чтобы отправить сообщение, когда наступит подходящий момент.

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

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

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

Если вы ожидаете МНОГО расписаний, то подход DynamoDB, вероятно, является лучшим подходом. Запустите лямбду по фиксированному расписанию, посмотрите, какие записи еще не были запущены, и соответствуют ли они текущему времени или равны ему. В этой модели вы захотите удалить записи, которые вы уже обработали (или пометить их каким-либо образом), чтобы вы больше не обрабатывали их. Не полагайтесь на расписание, запускаемое с определенными интервалами и проверяющее записи между последним и текущим временем, если только вы не записываете, когда это было в последний раз (то есть не предполагайте, что вы запускали минуту go, потому что вы запланировали это запускать каждую минуту).

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

0 голосов
/ 13 февраля 2020

Вместо использования DynamoDB я бы предложил использовать s3. Сохраните сообщение и время срабатывания как пары ключ-значение.

  1. S3 для сохранения даты и времени в качестве хранилища значения ключа.
  2. Используйте лямбда-триггер s3, чтобы создать правила облачной стражи, которые будут нацелены на конкретные 10101 *
  3. Вы можете даже запланировать cron для лямбды, которая будет читать файлы из s3 и обновите требуемый cron для отправки сообщения.

Надеюсь, что это соответствует вашим требованиям

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