2009-10-23 15 views
13

¿recomendaría usar beanstalkd [http://kr.github.com/beanstalkd/] paraPHP procesamiento asincrónico con beanstalkd. ¿Lo recomiendas?

procesamiento asíncrono en PHP?

Necesito comentarios/comentarios pros-contra, de cualquiera que haya usado esta lib.

Gracias,

+0

También me gustaría leer comentarios sobre la estabilidad a largo plazo de beanstalkd por parte de alguien que lo ha usado en un entorno de producción –

+0

. Estoy muy interesado también. – inakiabt

+1

¿Has probado Gearman? Supongo que la comunidad de Gearman-PHP es más activa. – mixdev

Respuesta

15

que he usado en la producción de habichuelas mágicas, y también durante la prueba arrojó millones de mensajes sencillos a través de él - por lo general en-masa, pero el sistema de producción de más de 100.000 tenido tareas puestas a través de él hasta que me fui la compañia. Todavía puede estar funcionando, en cuyo caso serían decenas de millones ahora, o más, si hubieran extendido su uso más, tal como lo había planeado.

Lo recomendaría, ya que tiene varios puntos excelentes.

  • named tubes se pueden utilizar para limitar los trabajos entregados. Miro un tubo basado en el nombre de host de la máquina, que limitaba el lugar donde estaría funcionando un trabajador, lo que es útil para archivos cargados que solo se almacenan en un servidor en particular).
  • Los retrasos se pueden utilizar para establecer eventos futuros
  • Las últimas versiones del servidor también admiten bin-logging, dando persistencia, aunque nunca se ha bloqueado en mí.

Mi primera tarea que puse a través de él era el procesamiento de imágenes - y haciendo que el trabajo fuera de un proceso/mod_php Apache me permitió cambiar el tamaño de las imágenes más grandes sin afectar al servidor (soplar el servidor web). Con una cola ligeramente cargada, creó las miniaturas antes de que la página se haya actualizado después de la carga.

Existen muchas otras tareas potenciales que también se pueden procesar de forma asíncrona.

El único problema que tuve fue asegurarse de que los trabajadores completaron sin incidentes, o que se detectaron errores para que el trabajo pudiera ser 'enterrado', asegurando así que el trabajo no se volviera a poner en la cola para ejecutar nuevamente (y hacer que el trabajador se cuelgue nuevamente).

Hacer que los trabajadores también se reinicien para borrar la memoria también puede ser útil ya que PHP es menos adecuado para procesos de larga ejecución.

+0

¿Qué se usó para eliminar trabajos de la cola y ejecutarlos? ¿Esto también se hizo en PHP? Si es así, ¿se ejecutó a los trabajadores usando algo como System_Daemon o hubo un trabajo de cron que se ejecutó de vez en cuando? Otros enfoques? –

+1

Comienzo un script de shell con Supervisord, y se mantiene a sí mismo volviendo a ejecutar, esperando un nuevo elemento, y luego volviendo. Hay una publicación con más detalles en mi blog - http://www.phpscaling.com/2009/06/23/doing-the-work-elsewhere-sidebar-running-the-worker/ –

Cuestiones relacionadas