He visto algunas de las entradas anteriores a tocar en este tema, pero yo quería saber lo que la actual, moderno enfoque.

El caso de uso es: (1) supongamos que desea hacer una larga tarea en ejecución en un archivo de vídeo, digamos un 60 segundos de duración, decir jspm install que puede tardar hasta 60 segundos. (2) usted NO puede subdividir la tarea.

Otros requisitos incluyen:

  • necesita saber cuando una tarea termina
  • agradable ser capaz de detener una tarea en ejecución
  • estabilidad: si una tarea se muere, no bajar el servidor
  • necesita ser capaz de manejar 100s de solicitudes simultáneas

He visto estas soluciones mencionadas:

Que es el moderno, basado en estándares de enfoque? También, si nodejs no es adecuada para este tipo de tarea, que también es una respuesta válida.

OriginalEl autor U Avalos | 2015-10-06

2 Comentarios

  1. 10

    La respuesta corta es: Depende

    Si te refieres a un nodejs servidor, entonces la respuesta es no para este caso de uso. Nodejs de un solo hilo de eventos no pueden manejar la CPU de tareas, por lo que tiene sentido para subcontratar el trabajo a otro proceso o subproceso. Sin embargo, para este caso de uso, donde la CPU ejecuta la tarea durante un largo tiempo, tiene sentido para encontrar alguna manera de la formación de colas de tareas… es decir, tiene sentido usar un trabajador de la cola.

    Sin embargo, para este caso de uso en particular de la ejecución de código JS (jspm API), tiene sentido usar un trabajador de la cola que utiliza nodejs. Por lo tanto, la solución es: (1) el uso de un servidor nodejs que no hace nada, pero la cola de tareas en el trabajador de la cola. (2) el uso de un nodejs trabajador de la cola (como kue) para hacer el trabajo real. Uso cluster para difundir el trabajo a través de diferentes CPUs. El resultado es un simple, solo servidor que puede manejar cientos de solicitudes (w/o asfixia). (Bueno, casi, véase la nota más abajo…)

    Nota:

    • la solución anterior, utiliza procesos. Yo no investigar hilo soluciones, porque parece que estos han caído en desuso para el nodo.
    • el trabajador cola + clúster de dar el equivalente de un el hilo de la piscina.
    • sí, en el peor de los casos, el 100 paralelo solicitud tendrá 25 minutos para completar en un 4-núcleo de la máquina. La solución está a la vuelta de otro trabajador de la cola del servidor (si no me equivoco, con un db-copia de trabajador de la cola, como kue esto es trivial—acaba de hacer cada servidor de punto a punto de la misma db).

    OriginalEl autor U Avalos

  2. 4

    Estás hablando de un CPU de tareas, y una de larga duración, que definitivamente no es un node.js cosa. También mencionar cientos de tareas simultáneas.

    Usted puede tomar un vistazo a algo como Gearman servidor de trabajo por algo como eso – es una solución individualizada.

    Alternativamente, usted todavía puede tener Node.js gestionar las peticiones, simplemente no hacer el trabajo real de ejecución.

    Si es relativamente aceptable tener menor rendimiento óptimo, y desea mantener su código en JavaScript, puede hacerlo, pero debe tener algún tipo de cola de trabajo – algo así como Redis o RabbitMQ viene a la mente.

    Creo que la cola de trabajo será un requisito indispensable para la ejecución larga, cientos/seg tareas, independientemente de su tiempo de ejecución. Excepto si usted puede salir de este trabajo en otros servidores/servicios/máquinas – entonces no te importa, tu Node.js API es sólo una fachada y la capa de gestión para el trabajo del clúster, a continuación, Node.js es perfectamente bien para el trabajo, y usted necesita para centrarse en que el trabajo de clúster y, a continuación, puede realizar una mejor pregunta.

    Ahora, node.js todavía puede ser útil para usted, puede ayudar a gestionar y mantener a los cientos de tareas, en función de dónde vienen (es decir. sólo se puede permitir solicitudes para ir a través de su servidor de trabajo para determinados usuarios, o el límite de la «pausa» funcionalidad a los demás etc.

    Has mirado en neilk.net/blog/2013/04/30/… ?
    Si, no unduable. Es sólo que a menudo no es productiva. Si una tarea se tarda un minuto para completar y ejecutar el 100 videos en paralelo en un 4-núcleo de la máquina, es decir su última solicitud de esperar 25 minutos para el final. A veces está bien, a veces no. Cuando el desempeño es relevante, me gustaría ir con más rendimiento de las herramientas.

    OriginalEl autor Zlatko

Dejar respuesta

Please enter your comment!
Please enter your name here