Загрузка без простоев / Откат в IIS

Я не уверен, что это правильный способ задать этот вопрос, но вот в основном то, что я хотел бы сделать:

1.) Переместите набор изменений на сайт в IIS.
2.) Не перебивайте пользователей.
3.) Быть в состоянии откатиться без особых усилий.

Итак, я знаю, что должно произойти несколько вещей:

1.) Вне сессии Proc - обработано
2.) Из кеша Proc - обработано

Итак, вопросы, которые остаются:
1.) Как мне не мешать пользователям? Если я просто загружаю файлы в корзину, приложение перезагружается и занимает 10+ секунд, чтобы вернуться в онлайн
2.) Как мне откатиться без усилий?

Я думал, что возможным решением было бы создать два сайта в IIS, один общедоступный и один частный. Загрузки идут в приват и нагреваются. После прогрева сайты меняются местами. Откат влечет за собой только обмен на приватный без загрузки.

Это звучит теоретически, но я не уверен в механике. Есть идеи?

2 ответа

Решение

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

Для его настройки вам понадобятся:

Установите ARR для начала.

Настройте 3 сайта в IIS:

  • Веб-сайт 1 будет тем сайтом, к которому ваши пользователи подключаются, скажем так http://192.168.1.1/, Это также сайт ARR. Просто настройте пустой каталог, чтобы он указывал на него, и поместите его в свой пул приложений. Настройте пул приложений так, чтобы он не превышал время ожидания в соответствии с этими инструкциями.
  • Веб-сайты 2 и 3 будут сайтами, на которых фактически размещается ваш контент. Они должны быть на их собственных IP-адресах и из-за того, как работает ARR, на другом порту, чем веб-сайт 1. Допустим, они http://192.168.1.2:8080 а также http://192.168.1.3:8080, Они также должны быть в своих собственных пулах приложений и указывать на разные каталоги в файловой системе (но оба каталога обычно имеют одинаковое содержимое)

После установки ARR в диспетчере IIS появится новая категория "Фермы серверов" - щелкните правой кнопкой мыши и создайте новую ферму.

  • дать ему имя, которое имеет значение для вас
  • добавьте Webserver 2 и Webserver 3 в качестве серверов - обязательно нажмите кнопку "дополнительные настройки", откройте категорию "applicationRequestRouting" и измените httpPort на 8080 для каждого сервера
  • Завершите работу мастера - вас спросят, хотите ли вы создать правила перезаписи URL - нажмите Да
  • Теперь у вас есть ферма серверов - чтобы завершить настройку, перейдите в ферму и нажмите кнопку настройки Proxy - включите "перезаписать хост в заголовках ответов" и примените изменения.
  • В диспетчере IIS перейдите к категории сервера корневого уровня и нажмите кнопку "Перезапись URL-адреса". Будет создано правило для вашей фермы.
    • дважды щелкните правило, чтобы перейти к настройкам
    • откройте окно условий
    • добавить новое условие для {SERVER_PORT} не соответствует 8080
    • применить изменения

На данный момент у вас есть основы того, что нам нужно для выполнения вашего запроса. Если вы идете в http://192.168.1.1/ Вы получите свой веб-сайт либо с Веб-сайта 1, либо с Веб-сайта 2, но будет совершенно очевидно, что есть другие сайты.

Теперь, когда вы хотите развернуть новую версию своего приложения, вы можете:

  • остановите 1 сервер вашей фермы (в инструментах фермы серверов перейдите в "Мониторинг и управление", выберите сервер и выберите "Сделать сервер недоступным изящно")
  • разверните новую версию сайта в автономной системе
  • прогрейте сайт, который находится в автономном режиме, используя его альтернативный IP/ порт
  • снова сделать сайт доступным для фермы
  • повторить процесс для другого сервера

Инструмент веб-развертывания вступает в игру, когда вы говорите о желании все это написать в сценарии. Это позволяет легко создать пакет для вашего приложения и развернуть его из командной строки. Вы также можете легко откатить этот пакет, если возникнут проблемы. ARR также можно создавать с помощью сценариев Microsoft.Web.Administration DLLs.

Еще одна вещь - если вы на самом деле работаете в Windows 2008 R2 (то есть IIS 7.5), взгляните на модуль Application Warmup - это должно также облегчить вам часть прогрева.

MattB ударил его из воды. +1 Я отвечу более подробно, но я не собираюсь брать его очки. Я добавлю к тому, что он сказал.

У меня есть настройка, аналогичная описанной, и она прекрасно работает. ARR - это путь, даже на одном сервере.

Однако пару вещей я бы добавил.

Создайте 2 сайта, как рекомендует Мэтт. Назовите их как yoursite.com01 и yoursite.com02.

Создайте 2 правила перезаписи URL. Один для www.yourdomain.com и еще один staging.yourdomain.com. Для производства используйте {HTTP_HOST} со значением (^www.yourdomain.com$)|(yourIP). (или любую другую привязку, которую вы предпочитаете). Для подготовки используйте {HTTP_HOST} со значением (^staging.yourdomain.com$). Назовите правила yoursite.com и staging.yoursite.com.

Свяжите Rule=yoursite.com с site=yoursite.com01 и rule=staging.yoursite.com с site=yoursite.com02.

Настройте FTP на staging.yoursite.com.

Производственный трафик теперь идет к Rule=staging.yoursite.com и Site=yoursite.com01. Поступая в противоположность.

Вы можете развернуться в любой точке, выполнить тестирование, предварительную раскрутку, провести тестирование других людей и т. Д. Делать это в течение дня, это не имеет значения. Развертывание на одну и ту же учетную запись FTP каждый раз. Отлично работает с серверами сборки.

Затем, когда вы будете готовы к запуску, просто внесите 3 изменения: - переместите привязку FTP с yoursite.com02 на yoursite.com01 - измените правило перезаписи URL yoursite.com, чтобы он указывал на yoursite.com02 - измените постановку правила перезаписи URL. yoursite.com, чтобы указать на yoursite.com01

Теперь у вас нулевое время простоя, мгновенное переключение и возможность немедленного отката!

Единственное, что нужно учесть - это состояние сеанса вне процесса. Убедитесь, что ваш сервер состояний принимает оба идентификатора сайта, чтобы вы не теряли состояние сеанса во время обмена.

Также обратите внимание, что это только веб, а не база данных.

Для сценариев используйте редактор конфигурации. Внесите необходимые изменения и нажмите "Создать скрипт". Это даст вам код C#, appcmd или AHAdmin.

У меня это было в течение нескольких месяцев с веб-страницей для обмена экземплярами, и я никогда не оглядываюсь назад. Это делает развертывание таким освежающим по сравнению с традиционными развертываниями.

Другие вопросы по тегам