6 Stimmen

Gibt es eine feste Grenze dafür, wie lange der Start einer Azure-Rolle dauern kann?

Nehmen wir an, ich beziehe eine ziemlich langlaufende Startup-Aufgabe in meine Azure-Rolle zu integrieren - das kann bis zu mehreren Minuten dauern. Was passiert, wenn die Startaufgabe "zu lange" läuft?

Ich teste derzeit auf dem Compute Emulator und beobachte Folgendes.

Ich habe eine 450 Megabyte große .zip-Datei zusammen mit Info-Zip entpacken . Die Startaufgabe entpackt das Archiv. Die Bereitstellung beginnt und ich schaue in den Task-Manager. Zahlreiche Dienstprozesse werden gestartet, dann wird unzip.exe ausgeführt. Nach etwa zwei Minuten werden alle diese Prozesse gestoppt und dann neu gestartet und unzip.exe wird erneut gestartet.

Es sieht also so aus, als ob ein Einsatz etwa zwei Minuten lang laufen darf, dann zwangsweise zurückgesetzt und neu gestartet wird.

Ist dies das erwartete Verhalten? Bleibt es in der echten Cloud bestehen? Gibt es feste Grenzen dafür, wie lange ein Rollenstart dauern kann? Wie kann ich diese Situation angehen, außer das Entpacken in die RoleEntryPoint.OnStart() ?

7voto

codingoutloud Punkte 2045

Ich hatte die gleiche Frage und habe ein Experiment gemacht. Ich führte einen Startup Task aus - taskType="simple", so dass er die Rollen vor der Ausführung blockiert - und ließ ihn 50 Stunden lang laufen. Der Fabric Controller beschwerte sich nicht und das Portal zeigte keinen Fehler an. Nach Ablauf der 50 Stunden beendete er seine lange "Nichtstun"-Schleife, der Startup-Task wurde beendet und meine Web-Rolle konnte problemlos gestartet werden.

Mein empirischer Test zeigt also, dass Startup-Tasks sehr lange dauern können! Mindestens 50 Stunden.

2voto

RichBower Punkte 206

Dies sollte den Load Balancer darüber informieren, dass Ihr Prozess noch beschäftigt ist:

http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleinstancestatuscheckeventargs.setbusy.aspx

1voto

dunnry Punkte 6850

Ich habe Startaufgaben ausgeführt, die ziemlich lange laufen (etwa 20-30 Minuten), und die Rolle befindet sich einfach im Zustand "Beschäftigt". Ich glaube nicht, dass es eine harte Grenze dafür gibt, wie lange die Rolle in diesem Zustand verbleibt, solange die Startup-Aufgabe noch ausgeführt wird und nicht mit einem Rückgabewert ungleich Null beendet wird (dies ist in der Tat ein Problem für die meisten Ersteller von Startup-Aufgaben, wenn sie zum ersten Mal eine Eingabeaufforderung anzeigen). Die FC läuft technisch gesehen immer noch einwandfrei, so dass es keinen Grund gäbe, die Rolle "wiederherzustellen" (d.h. die Herzschläge laufen noch).

Der Dev-Emulator merkt nur, wenn die Rolle noch nicht gestartet ist und warnt Sie. Wenn Sie auf die Option "Warten" klicken, wird die Startup-Aufgabe bis zum Abschluss ausgeführt. Die Cloud tut dies natürlich nicht (warnt Sie).

Ich habe noch nie eine Aufgabe ausprobiert, die sehr lange lief, also könnte es eine sehr lange Grenze geben. Ich glaube mich zu erinnern, dass 3 Stunden eine magische Zahl in einigen Timeout-Fällen wie Rollenwiederholungen war, aber ich habe nie versucht...

0voto

BrentDaCodeMonkey Punkte 5483

Es gibt einige Herzschläge, die der Azure Fabric Agent gegen die Rolle ausführt. Wenn diese nicht bestätigt werden (z. B. ein lang andauernder blockierender Prozess), kann dies dazu führen, dass die Rolle als nicht verfügbar gekennzeichnet wird.

Sie könnten versuchen, Ihren Startprozess in einen Hintergrund-Thread zu packen, der unabhängig läuft. So können Sie verhindern, dass die Rolle während des Starts des Prozesses wiederverwendet wird. Bedenken Sie aber, dass Sie möglicherweise einige Anpassungen vornehmen müssen, wenn Sie Anfragen erhalten, bevor die Rolle vollständig gestartet ist. Es gibt auch eine Möglichkeit (ich kann mich nicht mehr an ATM erinnern), die Rolle zu markieren und sie vorübergehend aus dem Load Balancer zu nehmen, während Ihr Prozess abgeschlossen wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X