Загрузка без простоев / Откат в IIS
Я не уверен, что это правильный способ задать этот вопрос, но вот в основном то, что я хотел бы сделать:
1.) Переместите набор изменений на сайт в IIS.
2.) Не перебивайте пользователей.
3.) Быть в состоянии откатиться без особых усилий.
Итак, я знаю, что должно произойти несколько вещей:
1.) Вне сессии Proc - обработано
2.) Из кеша Proc - обработано
Итак, вопросы, которые остаются:
1.) Как мне не мешать пользователям? Если я просто загружаю файлы в корзину, приложение перезагружается и занимает 10+ секунд, чтобы вернуться в онлайн
2.) Как мне откатиться без усилий?
Я думал, что возможным решением было бы создать два сайта в IIS, один общедоступный и один частный. Загрузки идут в приват и нагреваются. После прогрева сайты меняются местами. Откат влечет за собой только обмен на приватный без загрузки.
Это звучит теоретически, но я не уверен в механике. Есть идеи?
2 ответа
Вот как я мог бы подойти к этой проблеме - имейте в виду, что я не делал этого раньше, это просто концепции, которые я немного опробовал в своей среде разработки. Вы должны быть в состоянии установить довольно надежную среду, используя это и некоторые скрипты на вашем языке. По сути, мы собираемся настроить среду балансировки нагрузки гетто и использовать ее для переключения между новым сайтом и старым сайтом.
Для его настройки вам понадобятся:
- Модуль маршрутизации запросов приложений IIS (ARR)
- Средство веб-развертывания IIS (msdeploy)
- 3 разных веб-сайта IIS (с 3 разными IP-адресами - использование портов или заголовков хостов здесь может не работать)
Установите 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.
У меня это было в течение нескольких месяцев с веб-страницей для обмена экземплярами, и я никогда не оглядываюсь назад. Это делает развертывание таким освежающим по сравнению с традиционными развертываниями.