2009-02-08 10 views
9
  • Как настроить один или несколько рабочих сценариев для систем, ориентированных на очереди?
  • Как вы организуете запуск - и при необходимости перезагружаете рабочие сценарии по мере необходимости? (Я думаю о таких инструментах, как init.d /, Руби на основе «бога», DaemonTools Djb, и т.д, и т.д.)

Я разрабатывающей асинхронной системы очередей/работник, в этом случае с помощью PHP & BeanstalkdD (хотя фактический язык и демон не важен). Сами задачи не слишком сложны - кодирование массива с командами и параметрами в JSON для транспорта через демон Beanstalkd, подбирая их в рабочем сценарии, чтобы действовать по мере необходимости.Системы обслуживания - что является хорошим способом запуска нескольких сотрудников?

Есть целый ряд других аналогичных очередей/работника расстановок там, такие как Starling, Gearman, Amazon's SQS и другие более «предприятие» ориентированные системы, такие как MQ и RabbitMQ IBM. Если вы запускаете что-то вроде Gearman или SQS - как сделать вы начать и контролировать рабочий бассейн? Вопросы касаются начального старта работника, а затем могут добавлять дополнительных дополнительных работников, закрывая их по желанию (хотя я могу отправить сообщение через очередь, чтобы закрыть их - пока какой-то «наблюдатель» не будет автоматически перезапустите их). Это не проблема PHP, речь идет о прямых Unix-процессах настройки одного или нескольких процессов для запуска при запуске или добавления большего количества работников в пул.

A bash script to loop a script уже на месте - это вызывает скрипт PHP, который затем собирает и запускает задачи из очереди, изредка выезжая, чтобы очистить себя (он также может приостановить несколько секунд при сбое или через запланированный мероприятие). Это прекрасно работает, и создание рабочих процессов поверх этого не будет очень тяжелым.

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

+0

Hi! Как вы внедрили свою систему в конце? У меня есть аналогичная проблема с реализацией и вы хотите получить от вас обратную связь. – wormhit

ответ

0

Реальное промежуточное программное обеспечение для сообщений, такое как WebSphere MQ или MSMQ, предлагает «триггеры», когда служба, входящая в состав MQM, запускает работника, когда новые сообщения помещаются в очередь.

AFAIK, система обслуживания «веб-службы» может сделать это по характеру зверя. Однако я только посмотрел на SQS. Там вам нужно опросить очередь, и в случае с Amazon чрезмерно нетерпеливый опрос будет стоить вам реальных $$.

4

Я помогаю другу, который работает над проектом, который включает в себя очередь на основе Gearman, которая будет отправлять различные асинхронные задания различным демонам PHP и C на пуле нескольких серверов.

рабочих были разработан, чтобы вести себя так же, как классические Unix/Linux демоны, благодаря простым сценариям оболочки в /etc/init.d/, и команды, как:

invoke-rc.d myWorker start|stop|restart|reload

Этого механизм прост и эффективно. И поскольку он полагается на стандартные функции linux, даже люди с ограниченным знанием вашего приложения могут запустить демон или остановить его, если они знают, как его называют системным (иначе говоря, «myWorker» в приведенном выше примере).

Другим преимуществом этого механизма является то, что это упрощает управление вашими работниками. У вас может быть 10 демонов на вашем компьютере (myWorker1, myWorker2, ...) и запустить «рабочий менеджер» или остановить их в зависимости от длины очереди.И поскольку эти команды можно запускать через ssh, вы можете легко управлять несколькими серверами.

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

+0

Это надежный метод для запуска рабочих. http://pear.php.net/package/System_Daemon также может быть полезен при создании сценариев init.d. –

+0

Я на самом деле наткнулся на этот пакет несколько часов назад, глядя, из любопытства, на то, что было доступно для создания сценариев инициализации :) Выглядит потрясающе, чтобы сэкономить время. – Nicolas

+0

ли это работает на Amazon Linux? cenOS/RHEL –

0

Я недавно работал над таким инструментом. Это не совсем закончено (подумал, что для этого потребуется больше нескольких дней, прежде чем я удалю что-то, что я могу назвать 1.0) и явно не готов к производству, но важная часть уже закодирована. Любой может посмотреть здесь код: https://gitorious.org/workers_pool.

+0

Это работает? Что ж? – SamB

+0

@SamB: он работает, но я еще не реализовал «go run in the background как daemon», и мне все же нужно сделать симпатичный интерфейс командной строки, используя getopt для настройки параметров (в настоящее время они определены в заголовок, и я должен перекомпилировать их, чтобы изменить их). Осталось немного работы, но мне просто нужен временной интервал. В любом случае, мой ответ был больше о том, как смотреть на код, чтобы увидеть, как это можно сделать, чем использовать мой маленький проект. – p4bl0

0

Supervisor - хороший инструмент для наблюдения. Он включает веб-интерфейс, где вы можете контролировать и управлять рабочими.

Вот простой конфигурационный файл для рабочего.

[program:demo] 
command=php worker.php ; php command to run worker file 
numprocs=2 ; number of processes 
process_name=%(program_name)s_%(process_num)03d ; unique name for each process if numprocs > 1 
directory=/var/www/demo/ ; directory containing worker file 
stdout_logfile=/var/www/demo/worker.log ; log file location 
autostart=true ; auto start program when supervisor starts 
autorestart=true ; auto restart program if it exits 

 Смежные вопросы

  • Нет связанных вопросов^_^