2012-01-27 13 views
5

Esto puede ser una pregunta muy simple, pero todavía no he visto una respuesta directa. Supongamos que estoy usando un rol de trabajador de Azure para realizar algún tipo de tarea larga, por ejemplo, una que demora una hora. Ahora, responda que MS decide que la función de trabajador necesita algo de mantenimiento y trata de cerrarla 30 minutos después del trabajo.Impedir que Azure deje de trabajar durante el procesamiento

¿Hay alguna manera de hacer que Azure espere hasta que ese rol termine de ejecutarse para realizar el mantenimiento? Veo el método OnStop, pero parece que solo se pueden retrasar las cosas durante un tiempo determinado antes de que se apague de todos modos.

Si esto no es posible, ¿cómo planea esto para las operaciones que toman una cantidad decente de tiempo y no se pueden dividir en trozos más pequeños? ¿Revertiría los cambios realizados anteriormente y luego volvería a intentar la tarea?

Respuesta

4

Puede manejar el evento Stopping para retrasar el apagado de la instancia (en el elegante modo de apagado). En una situación de bloqueo, no se puede evitar el cierre ...

Aquí hay una sugerencia para la mitigación. Supongamos que su tarea está impulsada por la cola. Supongamos que su mensaje se parece al PROCESSWIDGET|123.

Lea el mensaje de cola en una instancia de trabajador y comience a procesarlo. En realidad, puede modificar el mensaje de cola a lo largo del camino y registrar su progreso. Entonces, en este ejemplo ficticio, digamos que hay 4 pasos para completar la tarea de una hora, cada uno de los cuales toma 15 minutos. A medida que se completa cada paso, puede actualizar su mensaje, agregando un estado de punto de control. Justo después de completar la primera tarea, actualiza el mensaje, y ahora se ve algo así como PROCESSWIDGET|123|STEP2.

Ahora ... algo va mal y la instancia de máquina virtual muere por algún motivo. El mensaje de cola finalmente se vuelve a visualizar, otra instancia de trabajador lo lee y ve el mensaje adjunto con el siguiente paso para realizar. Suponiendo que haya almacenado archivos intermedios en el almacenamiento Blob (u otro almacenamiento persistente), puede continuar desde donde lo dejó y no volver a procesar desde el principio.

Consulte this MSDN page para obtener más información sobre el método UpdateMessage().

+0

Además, solo para tu información, solo puedes retrasar el apagado durante 5 minutos. Entonces, simplemente se apagará. Como dice David, eso es solo para salidas elegantes también. – dunnry

+0

Sí, no me preocupan demasiado los accidentes. Es solo el mantenimiento regular. Uno de estos trabajos tendrá que importar 10 millones de archivos de texto de registro cada noche. Prefiero que Microsoft no cierre mi instancia para realizar actualizaciones durante ese proceso porque llevará tiempo. Creo que podría rastrear el número de línea y comenzar de nuevo en ese punto. –

+1

¿Es posible romper esa importación en lotes que se pueden ejecutar en paralelo? – BrentDaCodeMonkey

Cuestiones relacionadas