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:

  • Confiabilidade/disponibilidade: quando um ou mais nós falham, o balanceador de carga pode rotear solicitações para outros nós de funcionamento para continuar processando solicitações.
  • Capacidade/desempenho: vários nós podem processar mais solicitações do que um único servidor. O balanceador de carga equilibra a carga de trabalho ao distribuir as solicitações para os nós.
  • Escalabilidade: quando é necessária mais ou menos capacidade, 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.
  • Manutenção: os nós de um Web farm podem contar com um conjunto de serviços compartilhados, o que resulta em um gerenciamento de sistema mais fácil. 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.

Configure 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 a possibilidade de 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 saber mais sobre a configuração do sistema de Proteção de dados para implantações de web farm, confira Configurar a 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, consulte Caching 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 a proteção de dados do ASP.NET Core).

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

Para obter mais informações, consulte Introdução ao Identity no ASP.NET Core.
Sessão proteção de dados (criptografados cookie ) (consulte Configurar a proteção de dados do ASP.NET Core ) e Caching (consulte Caching distribuído no ASP.NET Core ).

Para obter mais informações, consulte Gerenciamento de sessão e estado: estado da sessão.
TempData Proteção de dados (criptografados cookie ) (consulte Configurar a proteção de dados do ASP.NET Core ) ou sessão (consulte Gerenciamento de sessão e estado: estado de sessão).

Para obter mais informações, consulte Gerenciamento de sessão e estado: TempData.
Antifalsificação Proteção de dados (confira Configurar a proteção de dados do ASP.NET Core).

Para obter mais informações, consulte Impedir ataques de solicitação intersite forjada (XSRF/CSRF) 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 cookie autenticação do. O usuário entra no aplicativo em um nó do web farm. Se a próxima solicitação chegar ao mesmo nó em que se conectou, o aplicativo poderá descriptografar a autenticação cookie e permitir o acesso ao recurso do aplicativo. Se a próxima solicitação chegar em um nó diferente, o aplicativo não poderá descriptografar a autenticação cookie do nó em que o usuário se conectou e a autorização para o recurso solicitado falhará.

Quando qualquer um dos sintomas a seguir ocorre intermitentemente, o problema geralmente é rastreado para proteção de dados inadequada ou configuração de cache para um ambiente de Web farm:

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

Para saber mais sobre a configuração de Proteção de dados para implantações de web farm, confira Configurar a proteção de dados do ASP.NET Core. Para saber mais sobre a configuração de cache para implantações de web farm, confira Caching 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 saber mais e obter um código de exemplo, consulte solucionar problemas e depurar projetos ASP.NET Core.

Recursos adicionais