Saltar al contenido

Procesamiento paralelo en PHP: ¿cómo se hace?

Luego de investigar con especialistas en esta materia, programadores de diversas áreas y profesores hemos dado con la respuesta al problema y la dejamos plasmada en este post.

Solución:

yo suelo exec(). Es fácil y limpio. Básicamente, necesita crear un administrador de subprocesos y scripts de subprocesos que harán lo que necesita.

No me gusta fsockopen() porque abrirá una conexión de servidor, que se acumulará y puede alcanzar el límite de conexión de apache

No me gusta curl funciona por la misma razón

No me gusta pnctl porque necesita la extensión pnctl disponible, y debe realizar un seguimiento de las relaciones entre padres e hijos.

Nunca jugué con Gearman …

Bueno, supongo que tenemos 3 opciones allí:

A. Multi-hilo:

PHP no es compatible con multiproceso de forma nativa. Pero hay una extensión PHP (experimental) llamada pthreads (https://github.com/krakjoe/pthreads) que le permite hacer precisamente eso.

B. Procesos múltiples:

Esto se puede hacer de 3 formas:

  • Bifurcando
  • Ejecutando comandos
  • Tubería

C.Procesamiento paralelo distribuido:

Cómo funciona:

  1. El Client La aplicación envía datos (mensaje AKA) “se puede formatear JSON” al motor (motor MQ) “puede ser un servicio web local o externo”
  2. El MQ Engine almacena los datos “principalmente en la memoria y opcionalmente en la base de datos” dentro de una cola (puede definir el nombre de la cola)
  3. El Client La aplicación solicita al motor MQ un dato (mensaje) para procesarlos en orden (FIFO o en función de la prioridad) “también puede solicitar datos de una cola específica”.

Algunos motores MQ:

  • ZeroMQ (buena opción, difícil de usar) una biblioteca IPC orientada a mensajes, es un servidor de cola de mensajes en Erlang, almacena trabajos en la memoria. Es una biblioteca de sockets que actúa como un marco de concurrencia. Más rápido que TCP para productos agrupados y supercomputación.
  • RabbitMQ (buena opción, fácil de usar) autohospedado, Enterprise Message Queues, No es realmente una cola de trabajo, sino más bien una cola de mensajes que se puede usar como una cola de trabajo pero requiere semántica adicional.
  • Beanstalkd (la mejor opción, fácil de usar) (Laravel construido en soporte, construido por Facebook, para cola de trabajo) – tiene una herramienta de “consola Beanstalkd” que es muy agradable
  • Gearman
    (problema: sistema de intermediario centralizado para procesamiento distribuido)
  • Apache ActiveMQ
    el corredor de mensajes de código abierto más popular en Java, (problema: muchos errores y problemas)
  • Amazon SQS
    (Soporte integrado de Laravel, alojado, por lo que no se requiere administración. No es realmente una cola de trabajo, por lo que requerirá trabajo adicional para manejar semánticas como enterrar un trabajo)
  • IronMQ
    (Soporte integrado de Laravel, Escrito en Go, Disponible tanto como versión en la nube como en las instalaciones)
  • Redis
    (Laravel incorporó soporte, no tan rápido ya que no está diseñado para eso)
  • gorrión
    (escrito en Ruby basado en memcache)
  • Estornino
    (escrito en Ruby basado en Memcache, construido en Twitter)
  • Cernícalo
    (solo otro QM)
  • Kafka
    (Escrito en LinkedIn en Scala)
  • EagleMQ
    gestor de colas de código abierto, de alto rendimiento y ligero (escrito en C)

Más de ellos se pueden encontrar aquí: http://queues.io

Si su aplicación se ejecutará en un entorno Unix / Linux, le sugiero que elija la opción de bifurcación. Es básicamente un juego de niños para que funcione. Lo he usado para un administrador Cron y tenía un código para que volviera a una ruta de código compatible con Windows si la bifurcación no era una opción.

Las opciones de ejecutar el script completo varias veces, como usted dice, agregan bastante sobrecarga. Si su guión es pequeño, puede que no sea un problema. Pero probablemente se acostumbre a hacer procesamiento paralelo en PHP por la forma que elija. Y la próxima vez, cuando tenga un trabajo que utilice 200 MB de datos, podría muy bien ser un problema. Así que será mejor que aprendas una forma en la que puedas quedarte.

También he probado Gearman y me gusta mucho. Hay algunas cosas en las que pensar, pero en general ofrece una muy buena manera de distribuir trabajos a diferentes servidores que ejecutan diferentes aplicaciones escritas en diferentes idiomas. Además de configurarlo, usarlo desde PHP, o cualquier otro lenguaje, es … una vez más … un juego de niños.

Bien podría ser una exageración para lo que tienes que hacer. Pero le abrirá los ojos a nuevas posibilidades en lo que respecta al manejo de datos y trabajos, por lo que le recomendaría que pruebe Gearman solo por ese hecho.

Sección de Reseñas y Valoraciones

Agradecemos que quieras reafirmar nuestro estudio añadiendo un comentario y dejando una valoración te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *