Мы разрабатываем веб-приложение, где приблизительно с 50% запросов записи, мы заканчиваем тем, что продвинули данные к нескольким хранилищам данных и ввели и обновили значительное количество записей в тех хранилищах данных. Для улучшения времени отклика мы хотим обработать такие запросы асинхронно в фоновом режиме.
Наше веб-приложение пишется в Ruby on Rails.
Двумя решениями, к которым я склонен, является Resque и Gearman.
Resque: Больше информации здесь: http://github.com/blog/542-introducing-resque Resque кажется очень хорошо удовлетворенным для Ruby, и он конкретно предназначен для обработки фонового задания. "Фоновые задания могут быть любым классом Ruby или модулем, который отвечает для выполнения. Ваши существующие классы могут легко быть преобразованы в фоновые задания, или можно создать новые классы конкретно, чтобы сделать работу".
Gearman: это конкретно не означало только для фоновых заданий для асинхронной обработки, но это - что-то, что это может определенно сделать. По-видимому, более устойчивый, или таким образом, это кажется. Другое преимущество Gearman состоит в том, что, в то время как Ваш клиентский код мог бы быть в Ruby, код рабочего мог быть в, скажем, PHP. Хотя прямо сейчас мы - приложение абсолютно Ruby on Rails, кто знает, могли ли в будущем мы хотеть использовать PHP или что-то еще в зависимости от задания под рукой.
Что бы вы посоветовали? У Вас есть опыт с любым из двух? Какие реальные производственные проблемы я должен иметь в виду при выборе между двумя? И я даже сравниваю яблоко с яблоком здесь?
У меня был некоторый опыт работы с Gearman, когда я искал механизм распределенного разветвления, который мог бы предложить распределение рабочей нагрузки для асинхронного режима. обработка в кластерной среде.
Я могу вам сказать, что это работает в «смоделированном» случае, когда асинхронная обработка была отправлена на 2 машины (2 рабочих на каждой машине = 4 рабочих). Не в реальном сценарии (что бы там ни говорилось). Реальный сценарий будет реализован, когда «моделирование» предоставит полезную информацию.
Механизм, который вы собираетесь выбрать, - это только один фактор в распределении рабочей нагрузки, поэтому будьте уверены, что вы не получите поврежденные или недействительные данные, когда распределенные «рабочие», которые работают параллельно, начнут писать в хранилища данных.
Я бы посоветовал воспользоваться подходом «моделирования», который я использовал, и провести ваши тесты, прежде чем решать, какой из них использовать.
с уважением,