Итак, у нас запущено приложение фляги Python, использующее Celery и AWS SQS для удовлетворения наших асинхронных задач.
Одна сложная проблема, с которой мы столкнулись в последнее время, - это создание задачи, выполняемой за x дней,или через 3 часа, например.У нас было несколько потребностей для чего-то подобного.
На данный момент мы создаем события в базе данных с метками времени, которые хранят время, когда они должны быть запущены.Затем мы используем ритм сельдерея для запуска запланированного задания каждую секунду, чтобы проверить, есть ли какие-либо события для обработки (на основе метки времени триггера), а затем обработать их.Однако это каждую секунду запрашивает базу данных о событиях, которые, по нашему мнению, могут быть улучшены.
Мы рассмотрели использование параметра eta в сельдерее (http://docs.celeryproject.org/en/latest/userguide/calling.html), который позволяет запланировать запуск задачи вx количество времени. Однако, кажется плохой практикой иметь большие etas, а также AWS SQS имеет тайм-аут видимости около двух часов, и поэтому все, что больше, чем это время, может вызвать конфликт.
Я чешумоя голова прямо сейчас. С одной стороны это работало, и довольно прилично в том, что вещи были отделены с помощью SNS, SQS и т. д. для обеспечения устойчивости к масштабированию. Однако, просто не хочется писать запрос к базе данных каждую секунду длясобытия для обработки. Конечно, есть более простой способ или услуга, предоставляемая Google / AWS, для планирования какого-либо события (pub / sub) на какое-то время в будущем (x часов, минут и т. д.)
Любые идеи