КПП и повторные рабочие с ненадежными внешними зависимостями - PullRequest
2 голосов
/ 18 ноября 2011

Я использую gearman для постановки в очередь различных заданий, некоторые из которых всегда могут быть обслужены немедленно, а некоторые могут «выйти из строя», поскольку требуют ненадежного внешнего обслуживания.(Например, для отправки электронной почты может потребоваться SMTP-сервер, который часто недоступен.)

Если внешняя служба выходит из строя, я хотел бы сохранить все задания, для которых требуется эта служба, в очереди и периодически повторять одну работу(скажем, каждые несколько минут), пока сервис снова не станет доступным.(Возможно, при необходимости отправка электронной почты, если служба не была доступна в течение нескольких часов.)

Однако мне бы хотелось, чтобы задания, для которых не требуется отказавший сервис, были переданы работникам как можно скорее.Как этого достичь?(Я с радостью добавлю некоторую логику к рабочим, если это необходимо, хотя, кажется, немного «поздно» задушить рабочую сторону.)

1 Ответ

2 голосов
/ 20 ноября 2011

Gearman уже должен справиться с этим.Пока у вас есть некоторые работники, которые специализируются на обработке заданий с ненадежными зависимостями и не справляются с другими заданиями, наряду с некоторыми работниками, которые либо выполняют все задания, либо просто работают без ненадежных зависимостей.

Все, что вам нужно сделать, это добавить некоторый код ненадежным работникам зависимости, чтобы они принимали задания только после того, как проверили, что зависимая служба запущена, если служба не работает, просто заставьте их немного подождать иповторно протестируйте службу (и продолжайте до бесконечности), как только служба будет запущена, попросите их присоединиться к серверу gearmand, выполнить работу, вернуться к работе, повторно протестировать службу и т. д. и т. д.

Пока зависимая служба не работает, рабочиекоторые не обрабатывают задания, для которых требуется служба, будут продолжать проходить через очередь заданий для других заданий.Gearmand не будет блокировать всю очередь заданий (или работника) на одном типе задания, если есть работники, которые могут обрабатывать другие типы заданий.

Ключ к пониманию того, как вы определяете свои типы заданий и работников.

РЕДАКТИРОВАТЬ -

А-а-а, я знал, что мои размышления немного истощены (я писал свою систему редукторов около года назад и с тех пор не касался ее).Мое решение проблемы такого типа состояло в том, чтобы все работники, которые обычно обрабатывают зависимые задания, отменили свою возможность обработки зависимых заданий на сервере gearmand после обнаружения сбоя в зависимой службе.(и все работники, которые в настоящее время пытаются завершить эту работу, должны вернуть ошибку.) Как только служба станет резервной, попросите тех же работников перерегистрировать свою способность справляться с этой работой.Учтите, что для этого работникам необходим другой канал связи о статусе зависимых служб.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...