Как улучшить архитектуру сервиса отложенных задач?

Необходимо реализовать сервис, выполняющий http-запросы в определенное время. Установка таймера осуществляется передачей сообщения через очередь (RabbitMQ).
Сервис представлят собой job-server с точным временем запуска задачи.

Наилучшее решение, которое смог придумать: хранить полученные задачи в БД. Каждая задача имеет абсолютное время запуска. Отдельный демон периодически (например, раз в секунду/) выбирает из базы задачи, дата страбатывания которых меньше текущего времени + длительность периода срабатывания. Если записи найдены, выполнить запрос для каждой из задач. Повторить цикл.
Добавление задач в пул (БД) осуществляется отдельным демоном, слушающим очередь.

Требования:
- минимальный период между добавлением задачи и её срабатыванием - 30 сек
- точность указания времени срабатывания - 1 сек
- максимальный период установки таймера - не ограничен
- порядок срабатывания зависит только от даты срабатывания, но не зависит от порядка поступления их в пул
- язык для реализации сервиса - php 5.6

Есть ли более оптимальные/эффективные варианты? Может есть готовые решения? Либо можно ли улучшить мой вариант?
  • Вопрос задан
  • 163 просмотра
Пригласить эксперта
Ответы на вопрос 1
@smple
Создать консольное приложение с бесконечным циклом.
Которое ждет наступление следующего события, как только оно наступает оно делает http запрос и берет следующее событие.

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

Технологии для написания демонов https://daemon.io/ или reactphp.org можно еще почитать про создание демонов на php, но для этой задачи php не лучший язык, задача небольшая можно реализовать на чем угодно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы