Есть ли способ развернуть недавно скомпилированный код веб-приложения ASP.NET на IIS 7, не отталкивая пользователей? - PullRequest
1 голос
/ 08 августа 2011

Наша компания выпускает обновления нашего многофункционального клиентского приложения (написанного в основном для ASP.NET, служб WCF и ASP.NET AJAX) на веб-сервере IIS 7 нашего клиента Windows Server 2008.Время от времени у нас большие выпуски обновлений.И иногда есть ошибки, которые пользователи улавливают сразу после выпуска, которые не обнаруживаются ни во время тестирования автоматизации, ни на этапе тестирования.Есть ли способ плавно развернуть код ASP.NET в IIS 7, пока пользователи все еще включены, не нарушая свои рабочие процессы, содержащие код, который не был затронут?Я обнаружил, что если я просто скопирую код из рабочей области (без web.config) вручную и вставлю его в корневую корневую рабочую веб-папку, никто на самом деле не вылетит.Но мне интересно, есть ли какие-либо побочные эффекты в этой стратегии для пользователей, усердно работающих в приложении.Мне просто интересно, могут ли прерваться какие-либо другие соединения или как они вообще обрабатываются в этой ситуации (то есть: соединение SQL, вызовы службы WCF, сохраняют ли они тот же сеанс и будет ли это иметь какое-либо влияние и т. Д.)?Если бы я выбрал этот метод, у меня было бы что-то в web.config, которое показывало бы сообщение каждому пользователю (на главной странице) - например, баннер с надписью «Пожалуйста, выйдите из системы и очистите свой кэш», поэтомуони будут видеть обновления к решению проблем.Но это относится только к затронутым пользователям.

Если кто-то не считает, что это хорошая стратегия для небольших обновлений, и имеет лучшую стратегию, такую ​​как изменение параметра web.config, который вынуждает пользователядругой сервер или что-то во время развертывания.Или какая-то другая методология, мои уши слушают.Очевидно, последний звучит безопаснее, но я просто не знаю, как это можно сделать.Я читал о серверах с балансировкой нагрузки, но я думаю, что этот тип настройки сервера делается для разных целей, например, если сервер выходит из строя, не так ли?Или это будет лучшим решением, когда вы отключите один сайт?Я приветствую любые идеи.

Ответы [ 2 ]

3 голосов
/ 08 августа 2011

Если в миксе есть балансировщик нагрузки: вы удалите сервер (ы) со старым кодом и добавите сервер (ы) с новым кодом. Это позволяет трафику на старых серверах кода не выгонять людей. Новый сервер (ы) принимает трафик.

Мы делаем это с новым выпуском на один сервер за раз, пока не заменим весь код в нашей ферме серверов. Это дает приложению время для выпечки в реальном мире. Если возникают проблемы, и они возникают, вам нужно вернуть только один сервер. использование балансировок нагрузки облегчает задачу.

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

3 голосов
/ 08 августа 2011

Раньше я тоже подчеркивал минимальное влияние на релизы, но сейчас мы его снимаем.Реальность двоякая:

  1. Вы не можете гарантировать, что все, над кем вы сейчас работаете, НЕ является тем, что вы собираетесь обновить.Учтите это: пользователь работает над x.aspx и находится в середине обратной передачи.Вы бросаете новый x.aspx.

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

...