2009-04-14 4 views
3

Справочная информация: репликации файлов 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 файлы, которые я по-видимому, много, кроме. Никакой помощи нет.

+0

Вы используете II6 или IIS7? –

+0

IIS6 на данный момент, но обновления до IIS7 находятся в плане дальнего действия. На мой взгляд, решение, требующее IIS7, было бы прекрасным. –

ответ

0
  1. Просто любопытно, какая файловая система, которую вы используете? NTFS не является файловой системой общего хранилища. Другими словами, вы не можете одновременно записывать несколько файлов в файловую систему.

  2. Я бы предложил виртуальные каталоги под сайтом в IIS. Это, вероятно, потребует немного перестройки макета вашего кода, но не должно быть слишком большим. Таким образом, у вас будет корневой домашний каталог сайта с web.config, который специфичен для этой машины, а затем vdir, сопоставленный с любым ресурсом, который вы установили для общедоступной файловой системы.

+0

Хотя это не идеальное решение, на самом деле не может быть такого, поэтому я отмечаю это как ответ.Особенно, если наиболее часто обновляемый контент можно отнести к определенному виртуальному каталогу, некоторая репликация корня, редко меняющегося содержимого будет приемлемой. –

1

Мой первый вопрос: что вы держите в web.config & можете ли вы переместить его в базу данных? Мы сохраняем каждый параметр конфигурации в таблице в нашей базе данных и используем machine.config для хранения информации о подключении db.

Не знаете, сколько будет переписывать вас, но это позволит избежать вашей проблемы.

Другой вариант - разместить ваши элементы конфигурации во внешнем файле и ссылаться на него с web.config. Изменения в этом файле не будут перечитываться до тех пор, пока aspnet wp не будет переработан, но позволит вам изменить настройку, а затем цикл каждого сервера через IISRESET.

<configuration> 
    <appSettings file="OtherFile.config"> 
... 
+0

Это не имеет ничего общего с appSettings. Это для материала, который ДОЛЖЕН быть в файле web.config, например, ссылки на сборку и определения httpHandler. –

+0

Ah - спасибо за обновление вопроса. – Chuck

+0

Web.Config имеет раздел AppSettings, я считаю, что это то, что вам нужно для выполнения вашей задачи. Вы упустили это? Вам необходимо использовать раздел appSettings для решения вашей проблемы. Не изобретайте колесо. – D3vtr0n