Обработка заданий в фоновом режиме из веб-приложения

Я хочу запланировать и запустить множество заданий в фоновом режиме во время выполнения веб-приложения.
Веб-приложение построено на основе Symfony 2 и Doctrine 2.

Я знаю, что обработку заданий можно выполнять с помощью таких библиотек, как Resque или Sidekiq. Однако эти библиотеки и мое приложение написаны на разных языках, поэтому мне интересно, как я могу запускать задания Sidekiq, написанные на Ruby, которые должны интегрироваться с моим приложением, написанным на PHP.

Что я спрашиваю себя, так это то, что единственный способ сделать это - переписать большой объем кода для запроса базы данных с PHP на ruby, чтобы иметь возможность выполнять задание в Sidekiq/Resque.


person Stefano    schedule 23.01.2014    source источник
comment
Вы рассматривали решения php?   -  person Calimero    schedule 23.01.2014
comment
вы смотрели на github.com/chrisboulton/php-resque?   -  person PolishDeveloper    schedule 23.01.2014
comment
Я рассматривал возможность запуска PHP-скрипта с простым бесконечным циклом в cmd, но думаю, что это не самое подходящее решение. @Piotr Я посмотрю на проект, который вы мне дали, он кажется интересным, но меня интересуют выступления   -  person Stefano    schedule 23.01.2014
comment
Это зависит от того, насколько велик ваш проект. Если он невелик, вы можете использовать бесконечный цикл и очередь чтения из БД, я знаю одно такое внутреннее решение, и оно отлично работает даже для крупных компаний. Если вам не нужен приоритет очереди, несколько рабочих и т. д., бесконечный цикл и сторожевой таймер, который проверяет, работает ли бесконечный цикл, должны быть в порядке.   -  person PolishDeveloper    schedule 23.01.2014
comment
мое приложение не такое большое, как facebook, но что меня пугает, так это то, что будет много запросов к базе данных, которые нужно будет выполнять каждую минуту, затем мне придется отправлять уведомления в браузеры и электронные письма, поэтому задания должны выполняться надежно и быстро   -  person Stefano    schedule 23.01.2014


Ответы (2)


Вы ознакомились с Gearman? Он позволяет запускать фоновые задания так же, как Sidekiq, но не зависит от языка. Например, вы можете использовать PHP для всего или вы можете ставить задачи в очередь на PHP, а фактические рабочие процессы будут написаны на Ruby.

person Michael S.    schedule 23.01.2014
comment
Очереди — фундаментальный компонент Gearman, так что да. Однако планирование не поддерживается Gearman. Хотя вы можете легко сделать свой собственный. Создайте задание cron или периодическую задачу, которая запускается каждые X минут, проверяет таблицу базы данных, содержащую столбец меток времени, имя задания и сериализованные аргументы, и запускает все задания, метки времени которых предшествуют текущему времени. - person Michael S.; 24.01.2014

Я использовал Resque в нескольких проектах, используя https://github.com/chrisboulton/php-resque и https://github.com/chrisboulton/php-resque-scheduler

Он работает очень хорошо, я даже сделал пакет Symfony, чтобы сделать работу с ним действительно простой. https://github.com/mcfedr/resque-bundle — поддерживает фоновые и запланированные задания. Гораздо мощнее, чем использование cron.

Основная причина выбора Resque по сравнению с другими вариантами заключается в том, что он работает на Redis, который легко развертывать и масштабировать. В AWS я использую управляемые экземпляры Elasticache для абсолютно беспроблемной настройки.

person mcfedr    schedule 02.12.2014