2015-05-15 2 views
6

Я создал новый облачный сервис с одной рабочей ролью, используя Azure .NET SDK 2.6. RoleEntryPoint довольно пуст.Почему развертывание Azure из Visual Studio занимает так много времени?

Первый раз это заняло некоторое время из-за создания виртуальной машины. Я ожидаю, что попытки публикации будут намного быстрее. Оказывается, это занимает не менее 5 минут. Проверка журналов активности развертывания в VS я вижу:

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. 

Почему для обновления этого приложения требуется 2 минуты? Есть ли способ ускорить это?

+1

Зачем кому-то голосовать на этот вопрос? Цикл обратной связи настолько медленный, что влияет на производительность разработчика. – Gatis

+0

Желательно, чтобы мои развертывания заняли всего 5 минут! Вы не знаете, как бороться ... – Sav

+0

Sav Возможно, вы хотите повысить этот вопрос и сделать его более привлекательным для лазурных людей? – Gatis

ответ

5

2 до 4 минут для обновления развертывания Azure не тот матч, учитывая, что:

  1. Она включает в себя загрузку пакета
  2. пакет копируется несколько раз внутренне, пока он не достигнет вашего экземпляра
  3. Мы эффективно монтируем пакет в качестве другого диска в машину.
  4. Проверьте, что все в порядке
  5. Включите приложения для запуска с нового установленного диска (что означает stoppi нг старого, начиная новый)
  6. Unmount старого диска, содержащего старый пакет
  7. Notify, что все в порядке

И это упрощение, что на самом деле происходят. Все это происходит асинхронно, и если для каждого элемента требуется 15-20 секунд, вы видите мою точку зрения.

Есть некоторые вещи, которые вы можете сделать, если вы хотите быстрее развертываний:

  1. сделать размер пакета меньше, в случае, если у вас есть большие файлы там. Лучше загружать ваши большие зависимости из хранилища во время запуска, а не связывать их в пакете
  2. Если это WebRole и вы хотите быстро протестировать обновления, вы можете включить WebDeploy как часть развертывания, а затем выполнить обычную «Опубликовать». . "рабочий процесс из VS. Это просто флажок, когда вы публикуете свой пакет из VS. После этого требуется несколько секунд для обновления файлов. Имейте в виду, что для изменений, которые вы хотите сохранить, у вас есть, чтобы обновить пакет облаков, выполнив полное перераспределение, иначе, если экземпляр будет повторно отображен, вы потеряете сделанные вами изменения. Это в основном только для развития.
  3. Если это WorkerRole, вы можете разделить свои нагрузки на процессы (простой .exe), чтобы ваша WorkerRole's EntryPoint загружалась из хранилища, распаковывалась и выполнялась. Если у вас более новая версия, вы просто загружаете новый пакет в хранилище. Ваш рабочий класс просто контролирует хранилище для более новых версий пакета, а затем загружает его, распаковывает и запускает новый .exe-файл после уничтожения старого.

Надеюсь, что это поможет.

+0

My app was hello world. Нечего удалять. Потребовалось 21-е место для загрузки.Шаг, который занимает больше всего времени, - это «обновление», всего 2:08. Интересно, можно ли его оптимизировать. – Gatis

+0

Похоже, что загрузка начинается только после некоторых проверок, которые явно субоптимальны. – Gatis

+1

Если они происходят асинхронно (при условии, что вы имеете в виду параллельно), они не должны больше выполнять одну самую длинную задачу. – Gatis