Recomendações de hospedagem do Azure para aplicativos Web ASP.NET Core
Gorjeta
Este conteúdo é um excerto do eBook, Architect Modern Web Applications with ASP.NET Core e Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.
"Líderes de linha de negócios em todos os lugares estão ignorando os departamentos de TI para obter aplicativos da nuvem (também conhecidos como SaaS) e pagando por eles como se fossem uma assinatura de revista. E quando o serviço não é mais necessário, eles podem cancelar a assinatura sem nenhum equipamento deixado sem uso no canto."
- Daryl Plummer, analista do Gartner
Quaisquer que sejam as necessidades e a arquitetura do seu aplicativo, o Microsoft Azure pode suportá-lo. Suas necessidades de hospedagem podem ser tão simples quanto um site estático ou um aplicativo sofisticado composto por dezenas de serviços. Para aplicações Web monolíticas ASP.NET Core e serviços de suporte, existem várias configurações bem conhecidas que são recomendadas. As recomendações neste artigo são agrupadas com base no tipo de recurso a ser hospedado, sejam aplicativos completos, processos individuais ou dados.
Aplicações Web
Os aplicativos Web podem ser hospedados com:
Aplicações Web do Serviço de Aplicações
Contentores (várias opções)
Máquinas Virtuais (VMs)
Destes, os Aplicativos Web do Serviço de Aplicativo são a abordagem recomendada para a maioria dos cenários, incluindo aplicativos simples baseados em contêiner. Para arquiteturas de microsserviços, considere uma abordagem baseada em contêiner. Se você precisar de mais controle sobre as máquinas que executam seu aplicativo, considere as Máquinas Virtuais do Azure.
Aplicações Web do Serviço de Aplicações
Os Aplicativos Web do Serviço de Aplicativo oferecem uma plataforma totalmente gerenciada otimizada para hospedar aplicativos Web. É uma oferta de plataforma como serviço (PaaS) que permite que você se concentre em sua lógica de negócios, enquanto o Azure cuida da infraestrutura necessária para executar e dimensionar o aplicativo. Alguns dos principais recursos dos Aplicativos Web do Serviço de Aplicativo:
Otimização de DevOps (integração e entrega contínuas, múltiplos ambientes, testes A/B, suporte a scripts).
Escala global e alta disponibilidade.
Conexões com plataformas SaaS e seus dados locais.
Segurança e conformidade.
Integração com Visual Studio.
O Serviço de Aplicações do Azure é a melhor escolha para a maioria das aplicações Web. A implementação e a gestão estão integradas na plataforma, os sites podem ser dimensionados rapidamente para lidar com cargas elevadas de tráfego e o balanceamento de carga e o gestor de tráfego incorporados proporcionam elevada disponibilidade. Você pode mover sites existentes para o Serviço de Aplicativo do Azure facilmente com uma ferramenta de migração online. Você pode usar um aplicativo de código aberto da Galeria de Aplicativos Web ou criar um novo site usando a estrutura e as ferramentas de sua escolha. A funcionalidade WebJobs possibilita adicionar de forma fácil processamento de trabalhos em segundo plano à sua aplicação Web do Serviço de Aplicações. Se você tiver um aplicativo ASP.NET existente hospedado no local usando um banco de dados local, há um caminho claro para migrar. Você pode usar o Aplicativo Web do Serviço de Aplicativo com um Banco de Dados SQL do Azure (ou acesso seguro ao seu servidor de banco de dados local, se preferir).
Na maioria dos casos, mudar de um aplicativo ASP.NET hospedado localmente para um Aplicativo Web do Serviço de Aplicativo é um processo simples. Pouca ou nenhuma modificação deve ser exigida do próprio aplicativo e ele pode começar rapidamente a aproveitar os muitos recursos que os Aplicativos Web do Serviço de Aplicativo do Azure oferecem.
Além dos aplicativos que não são otimizados para a nuvem, os Aplicativos Web do Serviço de Aplicativo do Azure são uma excelente solução para muitos aplicativos monolíticos simples (não distribuídos), como muitos aplicativos ASP.NET Core. Nesta abordagem, a arquitetura é básica e simples de entender e gerenciar:
Um pequeno número de recursos em um único grupo de recursos normalmente é suficiente para gerenciar esse aplicativo. Os aplicativos que normalmente são implantados como uma única unidade, em vez daqueles aplicativos que são compostos por muitos processos separados, são bons candidatos para essa abordagem arquitetônica básica. Embora arquitetonicamente simples, essa abordagem ainda permite que o aplicativo hospedado aumente a escala (mais recursos por nó) e saia (mais nós hospedados) para atender a qualquer aumento na demanda. Com o dimensionamento automático, o aplicativo pode ser configurado para ajustar automaticamente o número de nós que hospedam o aplicativo com base na demanda e na carga média entre nós.
Aplicativos Web do Serviço de Aplicativo para Contêineres
Além do suporte para hospedagem direta de aplicativos Web, os Aplicativos Web do Serviço de Aplicativo para Contêineres podem ser usados para executar aplicativos em contêineres no Windows e Linux. Usando esse serviço, você pode facilmente implantar e executar aplicativos em contêineres que podem ser dimensionados com sua empresa. Os aplicativos têm todos os recursos dos Aplicativos Web do Serviço de Aplicativo listados acima. Além disso, os Aplicativos Web para Contêineres oferecem suporte a CI/CD simplificado com o Docker Hub, o Registro de Contêiner do Azure e o GitHub. Você pode usar o Azure DevOps para definir pipelines de compilação e implantação que publicam alterações em um registro. Essas alterações podem ser testadas em um ambiente de preparação e implantadas automaticamente na produção usando slots de implantação, permitindo atualizações sem tempo de inatividade. Reverter para versões anteriores pode ser feito com a mesma facilidade.
Existem alguns cenários em que os Aplicativos Web para Contêineres fazem mais sentido. Se você tiver aplicativos existentes que você pode colocar em contêineres, seja em contêineres Windows ou Linux, você pode hospedá-los facilmente usando este conjunto de ferramentas. Basta publicar seu contêiner e, em seguida, configurar Web Apps for Containers para extrair a versão mais recente dessa imagem do seu registro de escolha. Esta é uma abordagem "lift and shift" para migrar de modelos clássicos de hospedagem de aplicativos para um modelo otimizado para nuvem.
Essa abordagem também funciona bem se sua equipe de desenvolvimento for capaz de mudar para um processo de desenvolvimento baseado em contêiner. O "loop interno" do desenvolvimento de aplicativos com contêineres inclui a criação do aplicativo com contêineres. As alterações feitas no código, bem como na configuração do contêiner, são enviadas por push para o controle do código-fonte, e uma compilação automatizada é responsável pela publicação de novas imagens de contêiner em um registro como o Docker Hub ou o Azure Container Registry. Essas imagens são então usadas como base para desenvolvimento adicional, bem como para implantações para produção, como mostrado no diagrama a seguir:
O desenvolvimento com contentores oferece muitas vantagens, especialmente quando os contentores são utilizados na produção. A mesma configuração de contêiner é usada para hospedar o aplicativo em cada ambiente em que ele é executado, desde a máquina de desenvolvimento local até a criação e teste de sistemas até a produção. Essa abordagem reduz consideravelmente a probabilidade de defeitos resultantes de diferenças na configuração da máquina ou nas versões de software. Os desenvolvedores também podem usar as ferramentas com as quais forem mais produtivos, incluindo o sistema operacional, já que os contêineres podem ser executados em qualquer sistema operacional. Em alguns casos, aplicativos distribuídos envolvendo muitos contêineres podem consumir muitos recursos para serem executados em uma única máquina de desenvolvimento. Nesse cenário, pode fazer sentido atualizar para usar o Kubernetes e os Espaços de Desenvolvimento do Azure, abordados na próxima seção.
Como partes de aplicativos maiores são divididas em seus próprios microsserviços menores e independentes, padrões de design adicionais podem ser usados para melhorar o comportamento do aplicativo. Em vez de trabalhar diretamente com serviços individuais, um gateway de API pode simplificar o acesso e separar o cliente de seu back-end. Ter back-ends de serviço separados para diferentes front-ends também permite que os serviços evoluam em conjunto com seus consumidores. Os serviços comuns podem ser acessados por meio de um contêiner separado de sidecar , que pode incluir bibliotecas comuns de conectividade de clientes usando o padrão ambassador .
Azure Kubernetes Service
O Azure Kubernetes Service (AKS) faz a gestão do seu ambiente alojado do Kubernetes, permitindo implementar e gerir rápida e facilmente aplicações contentorizadas sem que sejam necessários conhecimentos em termos de orquestração de contentores. Ele também elimina a carga de operações e manutenção contínuas, provisionando, atualizando e dimensionando recursos sob demanda, sem colocar seus aplicativos offline.
O AKS reduz a complexidade e a sobrecarga operacional de gerir um cluster de Kubernetes ao descarregar grande parte dessa responsabilidade para o Azure. Enquanto serviço alojado do Kubernetes, o Azure lida com tarefas críticas para si, como a monitorização do estado de funcionamento e a manutenção. Além disso, você paga apenas pelos nós do agente dentro de seus clusters, não pelos mestres. Enquanto serviço gerido do Kubernetes, o AKS oferece:
- Atualizações e patches automatizados da versão do Kubernetes.
- Dimensionamento fácil de clusters.
- Plano de controle hospedado de autorrecuperação (mestres).
- Economia de custos - pague apenas pelos nós do pool de agentes em execução.
Dado que o Azure lida com a gestão dos nós no cluster do AKS, já não tem de realizar muitas tarefas manualmente, como atualizações de cluster. Como o Azure lida com essas tarefas críticas de manutenção para você, o AKS não fornece acesso direto (como SSH) ao cluster.
As equipas que estão a tirar partido do AKS também podem tirar partido dos Espaços de Desenvolvimento do Azure. O Azure Dev Spaces ajuda as equipes a se concentrarem no desenvolvimento e na iteração rápida de seu aplicativo de microsserviço, permitindo que as equipes trabalhem diretamente com toda a arquitetura de microsserviços ou aplicativo em execução no AKS. Os Espaços de Desenvolvimento do Azure também fornecem uma maneira de atualizar de forma independente partes da sua arquitetura de microsserviços isoladamente, sem afetar o resto do cluster AKS ou outros desenvolvedores.
Azure Dev Spaces:
- Minimize o tempo de configuração da máquina local e os requisitos de recursos
- Permitir que as equipes iterem mais rapidamente
- Reduza o número de ambientes de integração exigidos por uma equipe
- Remova a necessidade de simular determinados serviços em um sistema distribuído ao desenvolver/testar
Saiba mais sobre os Espaços de Desenvolvimento do Azure
Máquinas Virtuais do Microsoft Azure
Se você tiver um aplicativo existente que exigiria modificações substanciais para ser executado no Serviço de Aplicativo, poderá escolher Máquinas Virtuais para simplificar a migração para a nuvem. No entanto, configurar, proteger e manter VMs corretamente requer muito mais tempo e experiência em TI em comparação com o Serviço de Aplicativo do Azure. Se estiver a considerar as Máquinas Virtuais do Azure, certifique-se de que tem em conta o esforço de manutenção contínua necessário para corrigir, atualizar e gerir o seu ambiente de VM. As Máquinas Virtuais do Azure são infraestrutura como serviço (IaaS), enquanto o Serviço de Aplicativo é PaaS. Você também deve considerar se implantar seu aplicativo como um Contêiner do Windows no Aplicativo Web para Contêineres pode ser uma opção viável para seu cenário.
Processos lógicos
Os processos lógicos individuais que podem ser dissociados do resto do aplicativo podem ser implantados independentemente no Azure Functions de maneira "sem servidor". O Azure Functions permite que você escreva o código necessário para um determinado problema, sem se preocupar com o aplicativo ou a infraestrutura para executá-lo. Você pode escolher entre uma variedade de linguagens de programação, incluindo C#, F#, Node.js, Python e PHP, permitindo que você escolha a linguagem mais produtiva para a tarefa em questão. Como a maioria das soluções baseadas na nuvem, você paga apenas pela quantidade de tempo de uso e pode confiar no Azure Functions para aumentar a escala conforme necessário.
Dados
O Azure oferece uma ampla variedade de opções de armazenamento de dados, para que seu aplicativo possa usar o provedor de dados apropriado para os dados em questão.
Para dados transacionais e relacionais, os Bancos de Dados SQL do Azure são a melhor opção. Para dados de leitura de alto desempenho, um cache Redis apoiado por um Banco de Dados SQL do Azure é uma boa solução.
Os dados JSON não estruturados podem ser armazenados de várias maneiras, desde colunas do Banco de Dados SQL a Blobs ou Tabelas no Armazenamento do Azure e ao Azure Cosmos DB. Destes, o Azure Cosmos DB oferece a melhor funcionalidade de consulta e é a opção recomendada para um grande número de documentos baseados em JSON que devem suportar consultas.
Os dados transitórios baseados em comandos ou eventos usados para orquestrar o comportamento do aplicativo podem usar o Barramento de Serviço do Azure ou as Filas de Armazenamento do Azure. O Barramento de Serviço do Azure oferece mais flexibilidade e é o serviço recomendado para mensagens não triviais dentro e entre aplicativos.
Recomendações de arquitetura
Os requisitos do seu aplicativo devem ditar sua arquitetura. Há muitos serviços diferentes do Azure disponíveis. Escolher a opção certa é uma decisão importante. A Microsoft oferece uma galeria de arquiteturas de referência para ajudar a identificar arquiteturas típicas otimizadas para cenários comuns. Você pode encontrar uma arquitetura de referência que mapeia de perto os requisitos do seu aplicativo ou, pelo menos, oferece um ponto de partida.
A Figura 11-1 mostra um exemplo de arquitetura de referência. Este diagrama descreve uma abordagem de arquitetura recomendada para um site do sistema de gerenciamento de conteúdo Sitecore otimizado para marketing.
Figura 11-1. Arquitetura de referência do site de marketing Sitecore.
Referências – Recomendações de hospedagem do Azure
Arquiteturas de solução do Azure
https://azure.microsoft.com/solutions/architecture/Arquitetura de Aplicativo Web Básico do Azure
https://learn.microsoft.com/azure/architecture/reference-architectures/app-service-web-app/basic-web-appPadrões de design para microsserviços
https://learn.microsoft.com/azure/architecture/microservices/design/patternsGuia do Desenvolvedor do Azure
https://azure.microsoft.com/campaigns/developer-guide/Descrição geral de aplicações Web
https://learn.microsoft.com/azure/app-service/app-service-web-overviewAplicação Web para Contentores
https://azure.microsoft.com/services/app-service/containers/Introdução ao Serviço Kubernetes do Azure (AKS)
https://learn.microsoft.com/azure/aks/intro-kubernetes