2015-05-15 5 views
6

Ich habe mit Azure .NET SDK 2.6 einen brandneuen Cloud-Service mit einer einzigen Worker-Rolle erstellt. Der RoleEntryPoint ist ziemlich leer.Warum dauert die Bereitstellung von Azure aus Visual Studio so lange?

Das erste Mal dauerte es eine Weile wegen der VM-Erstellung. Ich erwarte, dass die folgenden Veröffentlichungsversuche viel schneller wären. Stellt sich heraus es dauert mindestens ~ 5 Minuten. Inspizieren Bereitstellung Aktivitätsprotokolle in VS ich sehe:

20:17:06 - Checking for Remote Desktop certificate... 
20:17:07 - Applying Diagnostics extension. 
20:17:29 - Preparing deployment for AzureCloudService2 - 15/05/2015 20:17:03... 
20:17:29 - Connecting... 
20:17:29 - Verifying storage account ... 
20:17:30 - Uploading Package... 
20:17:51 - Updating... 
20:19:59 - Instance 0 of role WorkerRole1 is ready 
20:20:00 - Starting... 
20:20:19 - Initializing... 
20:20:19 - Created web app URL: ... 
20:20:19 - Complete. 

Warum auf der Erde es 2 Minuten dauert diese App aktualisieren? Gibt es eine Möglichkeit, dies zu beschleunigen?

+1

Warum sollte jemand diese Frage abstimmen? Rückkopplungsschleife ist so langsam in Azure, dass Entwickler Leistung beeinträchtigt. – Gatis

+0

Ich wünschte, meine Einsätze dauern nur 5 Minuten! Du kennst den Kampf nicht ... – Sav

+0

Sav Vielleicht möchtest du diese Frage verbessern und sie für Azure-Leute attraktiver machen? – Gatis

Antwort

5

2 bis 4 Minuten, um die Azure-Bereitstellung zu aktualisieren sind nicht so Spiel bedenkt, dass:

  1. Es enthält das Paket
  2. Das Paket ein paar Mal intern kopiert wird das Hochladen, bis sie die Instanz erreicht
  3. Wir montieren effektiv das Paket als eine andere Platte an der Maschine
  4. Stellen Sie sicher, dass alles in Ordnung ist
  5. Ihre Anwendungen von der neuen Platte montiert (im Sinne von Stoppi laufen Schalter
  6. die alte ng, die neue Ausgangs)
  7. Aushängen die alte Platte das alte Paket enthält
  8. , dass alles Benachrichtigen Sie ist ok

Und das ist eine grobe Vereinfachung dessen, was eigentlich los ist. All dies geschieht asynchron und wenn es für jeden Gegenstand 15-20 Sekunden dauert, sehen Sie meinen Punkt hier.

Es gibt einige Dinge, die Sie tun können, wenn Sie schneller Implementierungen wollen:

  1. Sprechen Sie die Größe des Pakets kleiner, wenn Sie große Dateien dort haben. Es ist besser, Ihre großen Abhängigkeiten während des Startvorgangs vom Speicher herunterzuladen, als sie im Paket zu bündeln
  2. Wenn es sich um eine WebRole handelt und Sie Updates schnell testen möchten, können Sie WebDeploy als Teil der Bereitstellung aktivieren und dann ein normales "Veröffentlichen" ausführen. . "Workflow von innerhalb VS. Es ist nur ein Kontrollkästchen, wenn Sie Ihr Paket von VS veröffentlichen. Es dauert einige Sekunden, um die Dateien danach zu aktualisieren. Beachten Sie jedoch, dass Sie für Änderungen, die Sie persistieren möchten, haben, um das Cloud-Paket zu aktualisieren, indem Sie eine vollständige Neuverteilung durchführen. Andernfalls werden die von Ihnen vorgenommenen Änderungen verloren gehen. Dies ist im Grunde nur für die Entwicklung.
  3. Wenn es sich um eine WorkerRole handelt, können Sie Ihre Lasten in Prozesse (einfache .exe) aufteilen, die der EntryPoint Ihrer WorkerRole vom Speicher herunterlädt, entpackt und ausführt. Wenn Sie eine neuere Version haben, laden Sie einfach ein neues Paket in den Speicher hoch. Ihre Workerrolle überwacht einfach den Speicher für neuere Versionen des Pakets und lädt sie dann herunter, entpackt und führt die neue .exe-Datei aus, nachdem sie die alte Datei gelöscht hat.

Ich hoffe, es hilft.

+0

Meine App war eine Hallo Welt. Es gibt nichts zu entfernen. Es dauerte 21 Sekunden, um hochgeladen zu werden.Der Schritt, der am längsten dauert, ist das "Aktualisieren", insgesamt 2:08. Ich frage mich, ob es optimiert werden könnte. – Gatis

+0

Das Hochladen beginnt erst nach einigen Überprüfungen, das ist eindeutig suboptimal. – Gatis

+1

Wenn sie asynchron ablaufen (vorausgesetzt man meint parallel), sollten sie nicht länger die längste Aufgabe übernehmen. – Gatis