Я пытаюсь создать свое первое PHP-приложение с балансировкой нагрузки, которое использует рабочие процессы / серверы. Я использую cloudcontrol для своего хостинга, поскольку они обеспечивают удобство среды управляемого сервера с помощью сценариев балансировки нагрузки и развертывания, так что я могу сосредоточиться больше на ядре своего приложения, а не на администраторе сервера.
Мое приложение выполняет вызовы API api graph, а также изменяет размеры изображений - трудоемкие операции. Чтобы сократить время отклика, я пытаюсь использовать рабочий надстройку cloudcontrol для выполнения этих трудоемких операций в фоновом режиме. Вызов работника облачного контроля достаточно прост, поскольку CC предоставляет API / SDK для этого:
http://cloudcontrol.com/developers/documentation/add-ons/worker/
https://code.launchpad.net/~cloudcontrol/phpcclib/trunk
Однако, если внешний интерфейс моего приложения будет использовать ajax-опрос (один раз в секунду или около того), чтобы увидеть, завершено ли задание, мой сервер приложений должен иметь доступ к какому-либо выводу работника, чтобы узнать, завершилось ли задание или нет.
Так что это то, что я считаю необходимым: так как я не могу установить gearman или какой-либо другой реальный сервер очередей заданий (у меня нет консольного доступа к серверам с балансировкой нагрузки, компромисс платформы cloudcontrols), я должен реализовать некоторые вид стека для заданий в базе данных.
Вот как я думаю, это будет работать в моем коде на очень высоком уровне: я добавляю задание в свой стек / очередь в моей базе данных, а затем немедленно вызываю рабочий процесс. Мой обычный поток http продолжит работу и вернет вывод пользователю (и останется свободным отвечать на запросы других пользователей) - пока рабочий процесс продолжается в фоновом режиме. Клиент пользователя будет периодически опрашивать мой сервер, чтобы узнать, завершено ли его задание, и рабочий процесс завершится после его завершения.
Из проведенного мною исследования такую структуру / систему массового обслуживания, по-видимому, нелегко построить (обсуждается в первых двух абзацах этого сообщения в блоге). В настоящее время я изучаю mongoqueue , но пока не уверен, что он удовлетворит потребности моего приложения. Мое приложение использует базу данных mysql, и мне интересно, если использование отдельной базы данных MongoDB для очередей заданий предотвратит проблемы с производительностью, изолировав эту задачу от моей обычной базы данных.
Мой реальный вопрос: 1. Является ли путь, по которому я сейчас иду, хорошей идеей, и 2. Существуют ли какие-либо документы / учебные пособия / библиотеки, о которых люди знают, которые могут мне помочь? Спасибо!