Создайте приложение ASP.NET MVC для веб-фермы - PullRequest
17 голосов
/ 12 августа 2010

Какой самый эффективный способ подготовить веб-ферму приложения ASP.NET MVC.

Самое важное - поделиться информацией текущего пользователя (Контекст) и (не так важно) кэшированными объектами, такими как элементы поиска (Штаты, Типы улиц, округа и т.of / read MemCache, но не нашел простого применимого способа (документации) о том, как его реализовать и протестировать.

1 Ответ

21 голосов
/ 12 августа 2010

Контекст запроса
Любой запрос, поступающий в веб-ферму, обрабатывается доступным сервером IIS. Там создается контекст, и весь запрос обслуживается одним и тем же сервером. Так что контекст не должен быть проблемой. Запрос представляет собой конвейер выполнения без сохранения состояния, поэтому ему не нужно обмениваться данными с другими серверами в любой форме или форме. Он будет обслуживаться от начала и до конца на одной и той же машине.
Информация пользователя считывается из файла cookie и обрабатывается сервером, который обслуживает запрос. Это зависит от того, куда вы кешируете полный пользовательский объект.

Session
Если вы используете словарь TempData, вы должны знать, что он хранится в словаре Session. В ферме серверов это означает, что вы должны использовать другие средства, чем сеансы InProc, поскольку они не используются совместно серверами IIS по всей ферме. Вы должны настроить другие менеджеры сеансов, которые используют либо БД, либо другие (сервер состояний и т. Д.).

Cache
Когда дело доходит до кеширования, это другая история. Чтобы сделать его максимально эффективным, кеш также должен быть обслужен. По умолчанию это не так. Но если смотреть на кеш, это едва ли означает, что когда кеша нет, его следует читать и хранить в кеше. Поэтому, если конкретный сервер фермы серверов не имеет какого-либо объекта кэша, он создаст его. Со временем все они будут кешировать некоторые общедоступные данные.
Или ... Вы можете использовать библиотеки, такие как memcached (как вы упомянули об этом) и воспользоваться общим кэшем. В сети есть несколько примеров, как его использовать.

Но все эти решения приносят дополнительные издержки из-за нескольких вещей (таких как обработка сети и третьего процесса, выборка данных и т. Д.), Если не более Таким образом, кеш по умолчанию является самым быстрым, и если вам явно нужен разделяемый кеш, выберите его. Не разделяйте кеш, если в этом нет особой необходимости.

...