Справочная информация: репликации файлов Lameконкретного сервера web.config на веб-сайте размещается от общего диска
В настоящее время у нас есть массивное, высокого трафика веб-приложения ASP.NET с балансировкой нагрузки через 8 различных IIS сервера. Из-за характера сайта незначительные изменения в файлах .aspx и .ascx часто происходят в течение дня, а после тестирования и публикации для жизни реплицируются на каждый из общедоступных веб-серверов через xcopy-развертывание по расписанию каждый 10 минут.
Конечно, это невероятно неэффективно, так как каждый сервер должен иметь избыточную копию всего сайта, и мы хотели бы устранить 10-минутное опубликованное отставание.
Возможные улучшения: Хостинг от Shared Storage
Теперь у нас есть возможность использовать централизованное хранилище с интерфейсом ISCSI провести весь сайт централизованно, с каждым сервером, считая, что удаленный хранилище на локальном диске. Публикации будут мгновенными и общесистемными.
Примечание: Хостинг диска с UNC-ресурсом невозможен, так как в структуре сайта существует так много разных каталогов, каждый из которых требует, чтобы FileSystemWatcher для ASP.NET отслеживал изменения, что максимальное количество команд SMB быстро достиг. Да, мы знаем о настройках реестра MaxCmds и MaxMpxCt.
Проблема: Web.config изменения приводят массовые перекомпилирует
Проблема, которую мы предвидим, что некоторые изменения в структуре файловой системы может привести к почти каждый скомпилированный .aspx или .ascx придется перекомпилировать, в результате чего запросы в очереди и восприятие того, что сервер не работает. Большинство ресурсов не используются в масштабах всей системы, и поэтому перекомпиляция их при изменении приводит к тому, что ресурсы практически не связаны. Глобальная главная страница, используемая всеми страницами на сайте, может вызвать это, но с этим легко управлять кодом.
Главным виновником является файл web.config. Изменения в файле web.config приводят к переработке всего веб-приложения и перекомпиляции. Таким образом, мы в настоящее время не реплицируем изменения web.config. Любые изменения в web.config требуют выведения веб-сервера из балансировщика нагрузки, применения (и тестирования) изменений, а затем согревания сервера с помощью нежелательных запросов до того, как он будет установлен обратно на балансировщик нагрузки.
Однако, если файл web.config, как и вся структура каталогов веб-приложения, расположен в централизованном хранилище, есть только одна копия файла, и отдельные серверы не могут быть исправлены и разогреты больше.
Вопрос
Есть ли способ, чтобы получить веб-приложение ASP.NET, чтобы принимать свои приказы из другого источника, чем файл с именем Web.config?
В идеале было бы один файл на сервере, например:
- default.aspx
- global.asax
- Web-ServerA.config
- Web-ServerB.конфиг
- ...
- Web-ServerN.config
Где название "web.config" определено в любом случае? Есть ли параметр реестра, который можно установить для каждого сервера? Есть ли запись, которая может быть сделана в файле machine.config или глобальном web.config, чтобы указать, какой файл использовать?
вещи из Scope
Просто так я чист, я не спрашиваю, как иметь различные AppSettings для отладки, тестирования и жить. Есть и другие темы, которые охватывают это, и все мои web.configs будут идентичны большую часть времени, и только когда мне нужно, чтобы они были разными, это когда выполняется обновление.
Мы не используем web.config для получения любых сведений о приложениях; это для действительно важных вещей, таких как ссылки на сборку, определения httpHandler и другие параметры system.web, которые нельзя привязывать к базам данных.
Update
Я попытался найти в реестре Web.config, и ничего не нашли для приложений, которые отметили, что я недавно отредактировал web.config файлы, которые я по-видимому, много, кроме. Никакой помощи нет.
Вы используете II6 или IIS7? –
IIS6 на данный момент, но обновления до IIS7 находятся в плане дальнего действия. На мой взгляд, решение, требующее IIS7, было бы прекрасным. –