#asp.net #iis #deployment #iis-7
#asp.net #iis #развертывание #iis-7
Вопрос:
В настоящее время, когда у нас есть обновления, которые мы хотим внедрить на наш действующий веб-сайт, мы запускаем файл .bat, который копирует всю структуру папок из нашей среды разработки на действующие серверы. При этом папка, на которую указывает виртуальный каталог, заменяется новой, обновленной. Это делается, когда сервер и IIS находятся в режиме реального времени и, очевидно, когда пользователи получают доступ к веб-сайту.
Иногда мы получаем ошибки, вызванные тем, что файлы или папки становятся «заблокированными» сразу после обновления, и обычно единственным вариантом является остановка IIS или перезагрузка сервера. Мы предполагаем, что эта «блокировка» вызвана тем, что файл .bat пытается перезаписать файл, пока он используется IIS.
Кто-нибудь еще сталкивался с этим и / или что бы вы порекомендовали в качестве наилучшего способа обновления веб-сайта в реальном времени «на лету» с минимальным временем простоя (т. Е. практически без простоев вообще).
Спасибо.
Комментарии:
1. Если у вас не может быть простоев, то лучше всего иметь другую копию запущенного сервера, на которую вы можете перенаправлять пользователей, когда захотите обновить основной. Затем вы перенаправляете своих пользователей обратно на основной после обновления. Вы можете использовать сервер состояния, расположенный на другом сервере, чтобы гарантировать, что любое состояние сеанса поддерживается при переключении с одного на другое. В настоящее время мы экспериментируем с платформой Microsoft Web Farm Framework, которая, похоже, очень хорошо справляется с подобными задачами.
Ответ №1:
Перепечатано как ответ, а не комментарий, там был глупый момент!
Если у вас не может быть простоев, то лучше всего иметь другую копию запущенного сервера, на которую вы можете перенаправлять пользователей, когда захотите обновить основной. Затем вы перенаправляете своих пользователей обратно на основной после обновления.
Вы можете использовать сервер состояния, расположенный на другом сервере, чтобы гарантировать, что любое состояние сеанса сохраняется при переключении с одного на другое.
В настоящее время мы экспериментируем с платформой Microsoft Web Farm Framework, которая, похоже, очень хорошо справляется с подобными задачами.
Наша настройка включает сервер внешнего интерфейса, основной и дополнительный веб-серверы, а также отдельный сервер состояния. WFF синхронизирует копии веб-приложений на обоих компьютерах и на сервере состояния, гарантируя, что если пользователь переключает серверы между запросами (или их текущий сервер переходит в автономный режим), они не должны заметить изменения.
Чтобы обновить основной веб-сайт, отключите его от балансировки нагрузки, что перенаправит все его запросы на дополнительный сервер. Выполните обновление, верните его в режим ротации, а затем повторите процесс со вторым сервером.
Ответ №2:
Купите второй веб-сервер, купите балансировщик нагрузки. Отметьте 1 сервер в автономном режиме, обновите, снова включите. Отметьте сервер 2 в автономном режиме, обновите, верните в оперативный режим.
Комментарии:
1. Спасибо за ответ, у нас уже есть настройка, которую вы описываете. Однако на серверах запущено множество веб-приложений (более 10), и наши разработчики вносят много обновлений в день, поэтому мы хотим сделать процесс обновления как можно более простым и быстрым. Отсюда причина, по которой метод simple .bat file хорошо работал до сих пор.
2. Много обновлений кодовой базы в день? Это нехорошо. Если вы просто вносите изменения в html или разметку на самих aspx-страницах, вы должны иметь возможность обновлять серверы без необходимости переводить их в автономный режим. Однако, если вы часто обновляете исходный код или код контроллера…….
Ответ №3:
Другой вариант — иметь две папки, которые вы чередуете для каждого развертывания, как при сине-зеленом развертывании. Итак, когда синяя папка в данный момент запущена, вы развертываете новую кодовую базу в зеленой папке, а затем, когда она будет готова, вы меняете настройки IIS, чтобы указать на зеленую папку.