Hospedar o ASP.NET Core em um web farm

Por Chris Ross

Um web farm é um grupo de dois ou mais servidores web (ou nós) que hospedam várias instâncias de um aplicativo. Quando as solicitações de usuários chegam a um web farm, um balanceador de carga distribui as solicitações para os nós de farm da web. Os web farms melhoram:

  • Disponibilidade/confiabilidade: quando um ou mais nós falham, o balanceador de carga pode rotear solicitações para outros nós em funcionamento para continuar a processar solicitações.
  • Capacidade e desempenho: vários nós podem processar mais solicitações que um único servidor. O balanceador de carga equilibra a carga de trabalho ao distribuir as solicitações para os nós.
  • Escalabilidade: quando a necessidade da capacidade for maior ou menor, o número de nós ativos pode ser aumentado ou diminuído para corresponder à carga de trabalho. Tecnologias de plataforma de web farm, como o Serviço de Aplicativo do Azure, podem adicionar ou remover nós por solicitação do administrador do sistema ou automaticamente sem a intervenção humana.
  • Facilidade de manutenção: os nós de um web farm podem contar com um conjunto de serviços compartilhados, o que resulta em um gerenciamento mais fácil do sistema. Por exemplo, os nós de um web farm podem contar com um servidor de banco de dados individual e um local de rede comum para recursos estáticos, como imagens e arquivos para download.

Este tópico descreve as configurações e dependências para aplicativos ASP.NET Core hospedados em um web farm que conta com recursos compartilhados.

Configuração geral

Hospedar e implantar o ASP.NET Core
Aprenda como configurar ambientes de hospedagem e implantar aplicativos ASP.NET Core. Configure um gerenciador de processo em cada nó do web farm para automatizar o início e a reinicialização do aplicativo. Cada nó requer o runtime do ASP.NET Core. Para saber mais, confira os tópicos na área Hospedar e implantar da documentação.

Configurar o ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga
Saiba mais sobre a configuração para aplicativos hospedados por trás de servidores proxy e balanceadores de carga, o que muitas vezes oculta informações de solicitação importantes.

Implantar aplicativos ASP.NET Core no Serviço de Aplicativo do Azure
Serviço de Aplicativo do Azure é um serviço de plataforma de computação em nuvem da Microsoft para hospedar aplicativos Web, incluindo o ASP.NET Core. O Serviço de Aplicativo é uma plataforma totalmente gerenciada que fornece escalabilidade automática, balanceamento de carga, aplicação de patch e implantação contínua.

Dados do aplicativo

Quando um aplicativo é dimensionado para várias instâncias, pode haver um estado do aplicativo que exija o compartilhamento entre os nós. Se o estado for transitório, considere compartilhar um IDistributedCache. Se o estado compartilhado exigir persistência, considere armazenar o estado compartilhado em um banco de dados.

Configuração necessária

O serviço de cache e a proteção de dados exigem uma configuração para aplicativos implantados em um web farm.

Proteção de dados

O sistema de proteção de dados do ASP.NET Core é usado por aplicativos para proteger os dados. A proteção de dados baseia-se em um conjunto de chaves de criptografia armazenados em um token de autenticação. Quando o sistema de Proteção de dados é inicializado, ele aplica as configurações padrão que armazenam localmente o token de autenticação. Sob a configuração padrão, um token de autenticação exclusivo é armazenado em cada nó do web farm. Consequentemente, cada nó do web farm não pode descriptografar os dados criptografados por um aplicativo em qualquer outro nó. A configuração padrão normalmente não é adequada para hospedagem de aplicativos em um web farm. Uma alternativa à implementação de um token de autenticação compartilhado é sempre rotear as solicitações do usuário para o mesmo nó. Para obter mais informações sobre a configuração do sistema de Proteção de Dados para implantações de farm da Web, confira Configurar Proteção de Dados do ASP.NET Core.

Cache

Em um ambiente de web farm, o mecanismo de cache deve compartilhar os itens em cache pelos nós do web farm. O serviço de cache deve contar com um cache Redis comum, um banco de dados compartilhado do SQL Server ou uma implementação personalizada de cache que compartilha os itens em cache pelo web farm. Para obter mais informações, confira Cache distribuído no ASP.NET Core.

Componentes dependentes

Os cenários a seguir não exigem configuração adicional, mas dependem de tecnologias que exigem configurações para web farms.

Cenário Depende de...
Autenticação Proteção de Dados (confira Configurar Proteção de Dados do ASP.NET Core).

Para obter mais informações, confira Usar a autenticação de cookie sem ASP.NET Core Identity e Compartilhar cookie de autenticação entre aplicativos ASP.NET.
Identity Configuração e autenticação do banco de dados.

Para obter mais informações, confira Introdução a Identity no ASP.NET Core.
Session Proteção de Dados (cookie criptografados) (confira Configurar Proteção de Dados do ASP.NET Core) e Cache (confira Cache distribuído no ASP.NET Core).

Para obter mais informações, confira Sessão e gerenciamento de estado: estado da sessão.
TempData Proteção de Dados (cookie criptografados) (confira Configurar Proteção de Dados do ASP.NET Core) ou Sessão (confira Sessão e gerenciamento de estado: estado da sessão).

Para obter mais informações, confira Sessão e gerenciamento de estado: TempData.
Antifalsificação Proteção de Dados (confira Configurar Proteção de Dados do ASP.NET Core).

Para obter mais informações, consulte Impedir ataques de XSRF/CSRF (solicitação intersite forjada) no ASP.NET Core.

Solucionar problemas

Proteção de dados e cache

Quando a proteção de dados ou cache não está configurada para um ambiente de web farm, erros intermitentes ocorrem quando as solicitações são processadas. Isso acontece porque os nós não compartilham os mesmos recursos e as solicitações do usuário não são sempre roteadas para o mesmo nó.

Considere um usuário que entra no aplicativo usando a autenticação de cookie. O usuário entra no aplicativo em um nó do web farm. Se a sua próxima solicitação chegar ao mesmo nó no qual ele se conectou, o aplicativo consegue descriptografar o cookie de autenticação e permite o acesso ao recurso do aplicativo. Se a sua próxima solicitação chegar em um nó diferente, o aplicativo não consegue descriptografar o cookie de autenticação a partir do nó em que o usuário entrou e a autorização do recurso solicitado falhará.

Quando qualquer um dos seguintes sintomas ocorrem de forma intermitente, o problema normalmente é rastreado, indicando a configuração incorreta de proteção de dados ou cache para um ambiente de web farm:

  • Quebras de autenticação: o cookie de autenticação está configurado incorretamente ou não pode ser descriptografado. Falha de login OpenIdConnect ou OAuth (Facebook, Microsoft, Twitter) com o erro "Falha de correlação".
  • Quebras de autorização: Identity é perdida.
  • O estado de sessão perde os dados.
  • Os itens em cache desaparecem.
  • O TempData falhará.
  • Os POSTs falham: a verificação antifalsificação falha.

Para obter mais informações sobre a configuração da Proteção de Dados para implantações de farm da Web, confira Configurar Proteção de Dados do ASP.NET Core. Para obter mais informações sobre a configuração de cache para implantações de farm da Web, confira Cache distribuído no ASP.NET Core.

Obter dados de aplicativos

Se os aplicativos do web farm forem capazes de responder às solicitações, obtenha as solicitações, conexão e dados adicionais dos aplicativos que usarem o middleware embutido de terminal. Para obter mais informações e código de exemplo, confira Solucionar problemas e depurar projetos do ASP.NET Core.

Recursos adicionais