Mejores prácticas al administrar trabajos asincrónicos de larga duración

12

Estoy en la fase de diseño de un proyecto donde el usuario final enviará una solicitud desde una página web que generará un trabajo procesado asincrónico de larga ejecución. ¿Existe una "mejor práctica" para este problema? ¿Son los servicios web y los corredores de servicios una buena manera de hacerlo? ¿La cola de mensajería de Microsoft es aplicable aquí?

John Ruf
fuente
Si lo hace a través de la web, y si lleva mucho tiempo, puede enviar un mensaje de texto o un correo electrónico al usuario cuando haya finalizado.
Trabajo

Respuestas:

6

No sé sobre "mejores prácticas". Sé los errores más comunes.

Primer error: DOS usted mismo

Utiliza el controlador web para procesar el trabajo de larga ejecución. Esto puede ser malo o extremadamente malo dependiendo de su porcentaje de visitas que se conviertan en trabajos de larga duración, cuánto tiempo se ejecutan y cuánto tráfico sostenido obtiene.

Desea asegurarse de que no está obteniendo más de 1 trabajo de ejecución prolongada dentro del período de tiempo que lleva completar ese trabajo de ejecución prolongada. Si haces DOS tú mismo. También empeorará cuanto más tráfico obtenga suponiendo que el porcentaje y el tiempo se mantengan consistentes. Es uno de esos problemas que impone un límite al crecimiento del tráfico.

Segundo error: el engendro del webhandler

Generar un proceso desde el controlador web para manejar un proceso de larga ejecución puede ser complicado y, como resultado, también propenso a errores.

  • Debe disociarse del padre correctamente; de ​​lo contrario, el webhandler espera a que se complete el niño.
  • Cuando se bifurca un hijo en Unix, hereda los identificadores abiertos del padre. Estos se cerrarán automáticamente a menos que se sobrescriban. Esto incluye cosas como conexiones de bases de datos, controladores de archivos, otras conexiones de red abiertas. Todo lo cual se cierra cuando se completa el proceso secundario.

Opciones

Por lo general, uso at(1)para disociar limpiamente del controlador web sin bifurcación.

También puede usar una implementación de sondeo con cron.

Puede comunicarse con otro proceso del servidor que maneja el procesamiento. Que la comunicación se puede hacer con sockets, pipeso mayores abstracciones de nivel como una llamada http RESTO o encaminar un mensaje cola.

dietbuddha
fuente
2

Supongo que estás hablando de más de unos minutos.

Si son pocos minutos, puede iniciar un subproceso de trabajo en segundo plano y mostrar un cierto progreso en la interfaz de usuario. Muchas aplicaciones web usan ese método.

Si es más de, digamos 5 minutos, es posible que desee delegar la tarea a un servicio dedicado. Un ejemplo son los informes generados por Google Analytics.

La cola de mensajería de Microsoft se puede usar para transmitir información de un sistema a otro o de un componente a otro.


fuente
¿Cómo logran esto lenguajes como PHP? Conozco algunas aplicaciones web que hacen esto pero están escritas en PHP
TheLQ
No soy un experto en PHP, pero supongo que en lugar de un hilo lanzado por la misma página, se llama a otro. Esto es lo que realmente sucede con AJAX.