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 начнет работать в той же очереди и Вы можете закончить довольно много дублирующихся задач, которые могут вызвать множество проблем, которые трудно отладить и устранить неисправности. Поэтому, если вместо этого у вас есть только один фоновый работник, который выполняет все задачи, или несколько фоновых работников, которые работают с различными типами задач, вы никогда не столкнетесь с этой проблемой.

Другие вопросы по тегам