2013-11-12 3 views
1

Я пытаюсь создать распределенную систему с помощью демонов PHP (через Upstart), запускать SWF-решения и действия, чтобы заменить многие наши задания cron и некоторые процессы, которые может выполняться асинхронно в фоновом режиме.Обновление сценариев активности Upstart + PHP + SWF до завершения действий

Однако есть вещи, которые я не уверен на:

  • Что хороший способ обновить эти сценарии, когда они работают, потенциально более чем на одном сервере?

  • Как я могу гарантировать, что любые эксплуатационные мероприятия закончить перед обновлением скриптов и перезапуска демона

я должен придерживаться PHP из-за кодовые, но это не исключает немного другие «обертывание» скриптов, если необходимо.

ответ

1

В худшем случае вы никогда не сможете гарантировать, что работник не будет получать активность до того, как вы ее убьете.

Вы должны повернуть вспять - SWF-функции должны быть идемпотентными, то есть давать одинаковый результат, даже если они выполняются несколько раз для одного входа. Если у вас есть длительные действия (которые, как я полагаю, вы делаете), используйте heartbeats, чтобы SWF периодически знал, что ваши действия живы и здоровы (если у вас короткие действия, слишком низкие тайм-ауты активности). Теперь, когда развертывание приходит и убивает работника активности на одной машине, SWF запланирует убитые мероприятия для обработки на другой машине (потому что сердцебиение таймаут или активность таймауту!)

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

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

+1

Просто незначительное разъяснение. SWF не требует, чтобы действия были идемпотентными. Это гарантирует, что они вызываются не чаще одного раза. Разработчик рабочего процесса должен создать только идемпотентные действия и логику принятия решения, чтобы их безоговорочно повторить. –