2012-02-22 7 views
6

Estoy buscando construir un clúster de codificación de video distribuido de unas pocas docenas de máquinas. Nunca he trabajado con una cola de mensajes, pero los 2 con los que empecé a jugar fueron Gearman y Beanstalkd.Codificación de video distribuido - Gearman vs Beanstalkd

Beanstalk parece ser mucho más simple y fácil de usar que Gearman, pero no es tan rica en funciones como.

Una cosa que no entiendo es ... ¿cómo se generan nuevos trabajadores en todos los servidores? Planeo usar php. ¿Es tan simple como ejecutar worker.php en CLI con "&" y simplemente dejarlo sentado esperando trabajo?

Noté que Gearman en realidad no mata el proceso después de que se hace un trabajo, pero Beanstalk lo hace, así que tengo que reiniciar el script después de cada trabajo, en cada servidor.

Actualmente estoy más inclinado a utilizar habichuelas mágicas, el flujo general de las cosas que había planeado era:

Ejecutar un cron minuciosamente en cada servidor que comprueba si hay cantidad de trabajadores predefinido en funcionamiento. Si no se supone que es así, genere nuevos procesos de trabajo. Cada proceso tomará aproximadamente 2-30 minutos.

¿Tal vez tengo un error en mi lógica aquí? Déjame saber cuál sería una forma "mejor" o "adecuada" de hacer esto?

+0

Asegúrese de consultar Pheanstalk: https://github.com/pda/pheanstalk –

+0

Disculpe mi ingenuidad, pero con cualquiera de esos dos marcos de mensajes, ¿dónde se instala el "servidor"? ¿En la máquina remota que manejará el proceso descargado, o la máquina que informa a la máquina remota de un nuevo trabajo? – ariestav

+0

Demasiado caro para usar cualquiera de esos servicios. –

Respuesta

0

Terminología que utilizaré para intentar y ser claro ... Existe el concepto de productor y consumidor. El productor genera trabajos que se colocan en una cola (es decir, el servicio Beanstalk) que luego lee un consumidor.

Hay varias formas de escribir un consumidor. Puede realizar cada x marco de tiempo a través de un trabajo cron ejecutar la tarea o simplemente hacer que un consumidor se ejecute en un ciclo while 1 a través de php (o lo que sea).

Dónde instalar el servicio realmente depende de lo que está buscando. En mi caso, normalmente instalo el servicio ya sea en un consumidor o en su caja separada (a veces, este último es excesivo dependiendo de sus necesidades).

Si desea durabilidad en el lado de la cola, entonces debe usar el parámetro binlog de Beanstalk (-b). Si algo le sucede a su servicio Beanstalk esto le permitirá reiniciar con una pérdida mínima de datos en las colas (si no hay información). La durabilidad en el lado del productor puede provenir de tener múltiples colas para intentar en contra.