Exercício – implantar uma arquitetura de N camadas

Concluído

Lembre-se de nosso cenário de migração de um aplicativo do local para o Azure. Como seria a aparência dessa arquitetura? Sua organização tem um aplicativo não crítico que é um bom candidato para experimentar. Ele é um aplicativo escrito para resolver o problema muito comum de escolher o que almoçar.

Pense na última vez em que você saiu para almoçar com um grupo de amigos ou colegas. Você acha que é fácil tomar uma decisão ou passou muito tempo tentando descobrir o que todos realmente faziam quando disseram “Eu gosto de tudo?”. Vamos implantar um aplicativo com base em uma arquitetura de três camadas que pode ajudá-lo a resolver esse problema. Esse aplicativo que permite que você faça sugestões de almoço e todos possam votar na opção preferida.

Criamos um modelo para este aplicativo que implanta cada camada como recursos do Azure e, em seguida, implanta o código de fato. Esse é um aplicativo MVC ASP.NET Core implantado em servidores Linux, mas você pode usar esse estilo de arquitetura independentemente do SDK ou das plataformas de sistema operacional subjacentes.

Veja a seguir uma visualização de alto nível do que é implantado com este modelo.

Visualization of the N-tier architecture to be deployed in this unit.

Implantar uma arquitetura de N camadas

  1. Execute o seguinte comando para iniciar a implantação. O comando az deployment group create inicia uma implantação em nosso grupo de recursos de área restrita usando o arquivo de modelo e os parâmetros que especificamos. Também especificamos uma cadeia de caracteres de 32 caracteres aleatórios gerada do comando head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 como o parâmetro de senha.

    A implantação leva cerca de 5 minutos para ser concluída.

    az deployment group create \
      --resource-group <rgn>[sandbox resource group name]</rgn> \
      --template-uri  https://raw.githubusercontent.com/MicrosoftDocs/mslearn-n-tier-architecture/master/Deployment/azuredeploy.json \
      --parameters password="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
    

Exibir os recursos implantados e testar o aplicativo

Depois que a implantação for concluída, teste o aplicativo. Execute o comando a seguir, que retornará a URL para o aplicativo.

az deployment group show \
  --output table \
  --resource-group <rgn>[sandbox resource group name]</rgn> \
  --name azuredeploy \
  --query properties.outputs.webSiteUrl

Abra um navegador da Web e visite o site. Você verá uma caixa em que pode adicionar opções de alimentos. Depois que você adicionar uma opção, a seleção dela adicionará um voto.

Screenshot of the sample voting application.

Três camadas de "O que almoçar?”

Este aplicativo é intencionalmente mínimo em sua complexidade. É um aplicativo divertido, mas ainda demonstra uma arquitetura de três camadas. O modelo cria duas VMs (máquinas virtuais), um Banco de Dados SQL do Azure e os recursos necessários para sustentar esses recursos, como discos, NICs e redes virtuais. Ele também implanta o código para executar o aplicativo em cada camada. A rede virtual que implantamos tem duas sub-redes, uma para a camada de apresentação e outra para a camada de aplicativo, fornecendo um limite de segurança para cada camada.

Também aplicamos marcas aos recursos como parte da implantação para refletir a camada que o recurso está sustentando (tier:presentation, tier:application, tier:data). As marcas são um método de aplicação de metadados para recursos do Azure e, nesse caso, elas nos permitem filtrar facilmente os recursos para cada camada.

Vamos examinar mais detalhadamente cada camada. Veja a seguir uma visualização detalhada dos recursos implantados.

Visualization of the N-tier architecture to be deployed in this unit again.

Camada de apresentação

Execute o comando a seguir para listar os recursos da camada de apresentação.

az resource list --tag tier=presentation --output table

Na arquitetura de três camadas que estamos referenciando, esta é a camada de apresentação. Implantamos o código responsável pela interface da Web foi implantado nesta camada, ele apresenta a interface do usuário e trata diretamente as solicitações do usuário. A única preocupação dessa camada é a apresentação do site para o usuário. Ela não tem acesso direto aos dados e não inclui a lógica de negócios.

Implantamos um servidor Web chamado demo-web-vm que está executando o site que estamos acessando. O servidor tem um adaptador de rede, demo-web-vm-nic, que tem um endereço IP público associado, demo-web-vm-nic-pip. Esse endereço IP público é a URL que já recuperamos. Ele também tem um grupo de segurança de rede, demo-web-nsg, que só permite o tráfego de entrada da porta 80 (HTTP) da Internet. Esse grupo de segurança de rede restringe o acesso a apenas o site e impede o acesso por meio de portas desnecessárias que podem ser usadas com más intenções. Essa camada se comunica com a camada de apresentação por HTTP para atender à solicitação do usuário.

Camada de aplicativo

Execute o comando a seguir para listar os recursos da camada de aplicativo.

az resource list --tag tier=application --output table

Implantamos a camada de aplicativo em uma VM chamada demo-biz-vm que executa a lógica de negócios. Ela também tem uma interface de rede, demo-biz-vm-nic, mas esse adaptador de rede tem apenas um endereço IP privado, não fornecendo nenhum mecanismo para conectividade direta de entrada com o servidor. Ele também tem um grupo de segurança de rede, demo-biz-nsg, que permite apenas o acesso da sub-rede da camada de apresentação.

Essa camada é o canal para o aplicativo acessar os dados. O código que expõe a API que a camada de apresentação chama é implantada nesse servidor. Nenhum dado é armazenado aqui, e os usuários não podem acessar esse servidor diretamente. Para acessar dados e atender às solicitações de usuário, essa camada se comunica com a camada de dados por meio de comandos do T-SQL.

Há um exemplo simples da lógica de negócios incorporada no aplicativo nessa camada. Há a validação do lado do servidor das sugestões de almoço, comparando-as com uma lista de valores aceitáveis. Se você tentar adicionar algo que não está na lista, isso não será aceito. Uma mensagem será retornada com as opções válidas de almoço.

Camada de dados

Execute o comando a seguir para listar os recursos da camada de dados.

az resource list --tag tier=data --output table

A camada de dados é um servidor de Azure Load Balancer, demo-dbserver-abc123 (adicionamos uma cadeia de caracteres aleatória ao nome do servidor para exclusividade global). Esse servidor armazena os dados para o aplicativo em um banco de dados chamado demo-sqldb. Esta camada do aplicativo trata exclusivamente do armazenamento de dados e de fornecer um método para acessá-lo. Nesse caso, o acesso é feito por meio do T-SQL, que o aplicativo executa no banco de dados. Não estamos manipulando nenhuma lógica de negócios neste nível nem estamos fazendo uma apresentação de dados de volta para o usuário.

Essa camada expõe a conectividade pela porta 1433 por meio de um ponto de extremidade de serviço de rede virtual. Os pontos de extremidade de serviço de VNet são um mecanismo para conectar a serviços de PaaS (por exemplo, o Banco de Dados SQL do Azure) a uma sub-rede e restringir a conectividade a apenas os recursos dentro dessa sub-rede.

Isso também é um exemplo do uso de serviços de PaaS no lugar de VMs de IaaS (infraestrutura como serviço) para executar uma camada de um aplicativo. Costumamos considerar os aplicativos de N camadas como aplicativos baseados em VM, mas isso não é um requisito. Ao usar serviços de PaaS no lugar de VMs, você pode reduzir seus custos, aumentar a segurança e reduzir os requisitos de administração.