Pagodabox или PHPfog + Gearman
Все,
Я ищу хороший способ справиться с какой-либо из этих двух служб.
Я вижу, PHPFog поддерживает IronWorks, но мне нужно что-то еще в реальном времени. Через эти облачные сервисы PaaS я не могу использовать popen(background.php --token=1234)
, Так что я думаю, что лучшее решение, возможно, состоит в том, чтобы попытаться сбросить работника-механика, чтобы справиться с работой. (На самом деле я предпочел бы использовать веб-сокеты, чтобы держать соединение открытым и получать отзывы о работе, а не долго опрашивать таблицу БД через AJAX, но никто из этих ребят не поддерживает веб-сокеты)
Вопрос 1, есть ли лучшее решение, чем использовать gearman для разгрузки работы?
Вопрос 2: http://help.pagodabox.com/customer/portal/articles/430779 Я вижу, что pagodabox поддерживает "рабочих слушателей"... Кто-нибудь настраивал это с gearman? Будет ли это работать?
Спасибо
1 ответ
Я использую PagodaBox с фоновым рабочим приложением, которое я сейчас создаю. По сути, PagodaBox демонизирует PHP-процесс для вас (что означает, что он будет непрерывно работать в фоновом режиме), поэтому все, что вам действительно нужно сделать, - это создать скрипт, который проверяет таблицу базы данных на предмет выполнения задач, запускает их, а затем немного спит так, он не выполняет слишком много запросов к вашей базе данных.
Это упрощенная версия того, что у меня работает:
// Remove time limit
set_time_limit(0);
// Show ALL errors
error_reporting(-1);
// Run daemon
echo "--- Starting Daemon ---\n";
while(true) {
// Query 'work_queue' table for new tasks
// Loop over items and do whatever tasks are associated with them
// Update row to mark task as completed
// Wait a bit
sleep(30);
}
Преимущество этого подхода в том, что его легко протестировать через CLI:
php tasks.php
Вы увидите все echo
операторы проходят через консоль во время ее работы, и, конечно, это гораздо проще сделать, чем более сложную настройку с другими зависимостями, такими как Gearman.
Поэтому, когда вы добавляете новую задачу в таблицу, максимальное время ожидания запуска этой задачи в пакете составляет 30 секунд (или независимо от того, какое у вас время сна). Это лучше и предпочтительнее для заданий cron, потому что если вы настраиваете задание cron запускаться каждую минуту (минимально возможный интервал), а работа, которую вам нужно делать, занимает больше минуты, другой процесс cron начнет работать в той же очереди и Вы можете закончить довольно много дублирующихся задач, которые могут вызвать множество проблем, которые трудно отладить и устранить неисправности. Поэтому, если вместо этого у вас есть только один фоновый работник, который выполняет все задачи, или несколько фоновых работников, которые работают с различными типами задач, вы никогда не столкнетесь с этой проблемой.