Размещение ASP.NET Core в веб-ферме

Автор: Крис Росс (Chris Ross)

Веб-ферма — это группа из двух или нескольких веб-серверов (или узлов), на которых размещается несколько экземпляров приложения. При поступлении запросов от пользователей на веб-ферму подсистема балансировки нагрузки распределяет эти запросы между узлами веб-фермы. Веб-фермы обеспечивают следующие улучшения:

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

В этом разделе описаны настройки и зависимости для размещенных в веб-фермах приложений ASP.NET Core, которые зависят от общих ресурсов.

Общая конфигурация

Размещение и развертывание ASP.NET Core
Сведения о настройке сред размещения и развертывании приложений ASP.NET Core. Настройка диспетчера процессов на каждом узле веб-фермы для автоматического запуска и перезапуска приложений. Для каждого узла требуется среда выполнения ASP.NET Core. Дополнительные сведения см. в разделе Размещение и развертывание ASP.NET Core.

Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки
Сведения о конфигурации приложений, размещаемых за прокси-серверами и подсистемами балансировки нагрузки, которые могут мешать передаче важных сведений в запросах.

Развертывание приложений ASP.NET Core в Службе приложений Azure
Служба приложений Azure — это платформа облачных вычислений Microsoft, предназначенная для размещения веб-приложений, включая ASP.NET Core. Служба приложений — это полностью управляемая платформа, которая обеспечивает автоматическое масштабирование, балансировку нагрузки, исправления и непрерывное развертывание.

Данные приложений

Когда приложение масштабируется до нескольких экземпляров, может возникнуть такое состояние, когда требуется совместное использование на нескольких узлах. Если состояние временное, рассмотрите возможность совместного IDistributedCacheиспользования. Если общее состояние должно сохраняться постоянно, рассмотрите возможность хранения сведений об общем состоянии в базе данных.

Требуемая конфигурация

Для защиты данных и кэширования необходимо настроить приложения, развернутые в веб-ферме.

Защита данных

Система защиты данных в ASP.NET Core используется приложениями для защиты данных. Защита данных зависит от набора криптографических ключей, хранящихся в наборе ключей. При инициализации системы защиты данных применяются параметры по умолчанию, которые предусматривают локальное хранение набора ключей. В соответствии с конфигурацией по умолчанию уникальный набор ключей хранится на каждом узле веб-фермы. Следовательно, узел веб-фермы не может расшифровать данные, зашифрованные с помощью приложения на другом узле. Обычно конфигурация по умолчанию не подходит для размещения приложений в веб-ферме. Кроме использования общего набора ключей можно прибегнуть к варианту, когда запросы пользователей на постоянной основе направляются на один и тот же узел. Дополнительные сведения о настройке системы защиты данных для развертываний в веб-фермах см. в статье Настройка защиты данных в ASP.NET Core.

Кэширование

В среде веб-фермы механизм кэширования должен совместно использовать кэшированные элементы на узлах веб-фермы. Кэширование должно зависеть от общего кэша Redis, общей базы данных SQL Server или пользовательской реализации кэширования, которая совместно использует кэшированные элементы в веб-ферме. Дополнительные сведения см. в статье Распределенное кэширование в ASP.NET Core.

Зависимые компоненты

Для следующих сценариев дополнительная конфигурация не требуется, но они зависят от технологий, которые требуют настройки для веб-ферм.

Сценарий Зависит от…
Проверка подлинности Защита данных (см. статью Настройка защиты данных в ASP.NET Core).

Дополнительные сведения см. в статьях Использование файлов cookie для аутентификации без ASP.NET Core Identity и Совместное использование файлов cookie для аутентификации между приложениями ASP.NET.
Identity Проверка подлинности и конфигурация базы данных.

Дополнительные сведения см. в статье Введение в Identity в ASP.NET Core.
Сеанс Защита данных (зашифрованные файлы cookie) (см. статью Настройка защиты данных в ASP.NET Core) и кэширование (см. статью Распределенное кэширование в ASP.NET Core).

Дополнительные сведения см. в разделе "Управление сеансами и состоянием: состояние сеанса".
TempData Защита данных (зашифрованные файлы cookie) (см. статью Настройка защиты данных в ASP.NET Core) или сеанс (см. раздел Управление сеансами и состояниями: состояние сеанса).

Дополнительные сведения см. в разделе "Управление сеансами и состоянием": TempData.
Защита от подделки Защита данных (см. статью Настройка защиты данных в ASP.NET Core).

Дополнительные сведения см. на странице Предотвращение атак с использованием подделки межсайтовых запросов (XSRF/CSRF) в ASP.NET Core.

Устранить неполадки

Защита и кэширование данных

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

Представьте пользователя, который входит в приложение, используя проверку подлинности с помощью файлов cookie. Пользователь вошел в приложение на одном узле веб-фермы. Если следующий запрос пользователя направляется на тот же узел, на котором был выполнен вход в систему, приложение сможет расшифровать файл cookie проверки подлинности и разрешит доступ к ресурсу приложения. Если же следующий запрос направляется на другой узел, приложение не сможет расшифровать файл cookie проверки подлинности с узла, на котором пользователь вошел в систему, и попытка авторизации для запрашиваемого ресурса будет отклонена.

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

  • Разрывы проверки подлинности: проверка подлинности cookie неправильно настроена или не может быть расшифровывается. Сбои при попытке использования имен входа для OAuth (Facebook, Майкрософт, Twitter) или OpenIdConnect — попытки завершаются ошибкой "Не удалось выполнить корреляцию".
  • Сбои при попытке авторизации — Identity отсутствует.
  • Отсутствие данных о состоянии сеанса.
  • Удаление кэшированных элементов.
  • Сбои свойства TempData.
  • Сбой POSTs: анти-подделка проверка завершается ошибкой.

Дополнительные сведения о настройке защиты данных для развертываний в веб-фермах см. в статье Настройка защиты данных в ASP.NET Core. Дополнительные сведения о настройке кэширования для развертываний в веб-фермах см. в статье Распределенное кэширование в ASP.NET Core.

Получение данных из приложений

Если фермы веб-приложения способны отвечать на запросы, получите данные о запросе, подключении и дополнительные данные из приложений с помощью встроенного терминала ПО промежуточного слоя. Дополнительные сведения и примеры кода см. в статье Устранение неполадок и отладка проектов ASP.NET Core.

Дополнительные ресурсы