Editar

Partilhar via


Implantar microsserviços com Aplicativos de Contêiner do Azure

Azure Container Apps
Azure Cosmos DB
Azure Service Bus

Este cenário de exemplo mostra um exemplo de uma carga de trabalho existente que foi originalmente projetada para ser executada no Kubernetes e pode ser executada em Aplicativos de Contêiner do Azure. Os Aplicativos de Contêiner do Azure são adequados para cargas de trabalho brownfield em que as equipes procuram simplificar a infraestrutura complexa e a orquestração de contêineres. A carga de trabalho de exemplo executa um aplicativo de microsserviços em contêiner.

O exemplo usa a carga de trabalho usada na arquitetura de Microsserviços no Serviço Kubernetes do Azure e a hospeda novamente nos Aplicativos de Contêiner do Azure como sua plataforma de aplicativo.

Gorjeta

Logótipo do GitHub A arquitetura é apoiada por uma implementação de exemplo que ilustra algumas das opções de design descritas neste artigo.

Arquitetura

Diagrama mostrando microsserviços implantados com Aplicativos de Contêiner do Azure.

Transfira um ficheiro do Visio desta arquitetura.

Nesse cenário, as imagens de contêiner são originadas do Registro de Contêiner do Azure e implantadas em um ambiente de Aplicativos de Contêiner.

Os serviços que partilham o mesmo ambiente beneficiam de:

  • Entrada interna e descoberta de serviços
  • Um único espaço de trabalho do Log Analytics para registro em tempo de execução
  • Gestão segura de segredos e certificados

O aplicativo de contêiner de serviço de fluxo de trabalho está sendo executado no modo de revisão única. Um aplicativo de contêiner em execução no modo de revisão única tem uma única revisão, apoiada por réplicas zero-muitas. Uma réplica é composta pelo contêiner de aplicativo e quaisquer contêineres de sidecar necessários. Este exemplo não está fazendo uso de contêineres sidecar, portanto, cada réplica de aplicativo de contêiner representa um único contêiner. Como este exemplo não emprega dimensionamento, apenas uma réplica é executada para cada aplicativo de contêiner.

O fluxo de trabalho usa uma abordagem híbrida para gerenciar segredos. As identidades gerenciadas são usadas nos serviços em que essa implementação não exigiu alterações de código. Os serviços Agendador e Entrega de Drones usam identidades gerenciadas atribuídas pelo usuário para autenticar com o Azure Key Vault para acessar os segredos armazenados lá. Os serviços restantes armazenam segredos por meio do serviço Container Apps no nível do aplicativo.

Diagrama mostrando a arquitetura de tempo de execução para a solução.

Este diagrama ilustra a arquitetura de tempo de execução para a solução.

Transfira um ficheiro do Visio desta arquitetura.

Fluxo de dados

  1. Serviço de ingestão: recebe solicitações de cliente, armazena-as em buffer e as envia por meio do Barramento de Serviço do Azure para o serviço de fluxo de trabalho.
  2. Serviço de fluxo de trabalho: consome mensagens do Barramento de Serviço do Azure e as envia para serviços subjacentes.
  3. Serviço de pacotes: gerencia pacotes.
  4. Serviço de agendamento de drones: Programação drones e monitora drones em voo.
  5. Serviço de entrega: Gerencia entregas programadas ou em trânsito.

Componentes

O serviço de entrega por drone usa uma série de serviços do Azure em conjunto uns com os outros.

Azure Container Apps

Os Aplicativos de Contêiner do Azure são o componente principal.

Esses recursos substituem muitas das complexidades da arquitetura AKS anterior:

  • Descoberta de serviço integrada
  • Pontos de extremidade HTTP e HTTP/2 totalmente gerenciados
  • Balanceamento de carga integrado
  • Registos e monitorização
  • Dimensionamento automático baseado em tráfego HTTP ou eventos alimentados por KEDA (Kubernetes-based Event Driven Autoscaling)
  • Atualizações de aplicativos e controle de versão

Armazenamento externo e outros componentes

Serviço Azure Key Vault para armazenar e acessar segredos com segurança, como chaves de API, senhas e certificados.

O Registro de Contêiner do Azure armazena imagens de contêiner privadas. Você também pode usar outros registros de contêiner, como o Docker Hub.

O Azure Cosmos DB armazena dados usando o Azure Cosmos DB de código aberto para MongoDB. Os microsserviços geralmente são sem monitoração de estado e gravam seu estado em armazenamentos de dados externos. O Azure Cosmos DB é um banco de dados NoSQL com APIs de código aberto para MongoDB e Cassandra.

O Barramento de Serviço do Azure oferece mensagens confiáveis na nuvem como um serviço e integração híbrida simples. O Service Bus oferece suporte a padrões de mensagens assíncronas que são comuns com aplicativos de microsserviços.

O Cache Redis do Azure adiciona uma camada de cache à arquitetura do aplicativo para melhorar a velocidade e o desempenho para cargas de tráfego pesado.

O Azure Monitor coleta e armazena métricas e logs do aplicativo. Use esses dados para monitorar o aplicativo, configurar alertas e painéis e fazer análise de causa raiz de falhas. Este cenário usa um espaço de trabalho do Log Analytics para monitoramento abrangente da infraestrutura e do aplicativo.

O Application Insights fornece gerenciamento extensível de desempenho de aplicativos (APM) e monitoramento para os serviços. Cada serviço é instrumentado com o SDK do Application Insights para monitorar o aplicativo e direcionar os dados para o Azure Monitor.

Modelos Bicep para configurar e implantar os aplicativos.

Alternativas

Um cenário alternativo deste exemplo é o aplicativo Fabrikam Drone Delivery usando Kubernetes, que está disponível no GitHub no repositório Fabrikam Drone Delivery do Serviço Kubernetes do Azure (AKS).

Detalhes do cenário

Sua empresa pode simplificar a implantação e o gerenciamento de contêineres de microsserviço usando os Aplicativos de Contêiner do Azure. O Container Apps fornece um ambiente sem servidor totalmente gerenciado para criar e implantar aplicativos modernos.

(uma empresa fictícia) implementa um aplicativo de entrega por drone onde os usuários solicitam um drone para pegar mercadorias para entrega. Quando um cliente agenda uma recolha, um sistema de back-end atribui um drone e notifica o utilizador do tempo de entrega estimado (ETA).

O aplicativo de microsserviços foi implantado em um cluster do Serviço Kubernetes do Azure (AKS). Mas, a equipe da Fabrikam não estava aproveitando os recursos avançados ou específicos da plataforma AKS. Eles eventualmente migraram o aplicativo para os Aplicativos de Contêiner do Azure sem muita sobrecarga. Ao portar sua solução para os Aplicativos de Contêiner do Azure, a Fabrikam pôde:

  • Migre o aplicativo quase como está: alterações de código muito mínimas foram necessárias ao mover seu aplicativo do AKS para os Aplicativos de Contêiner do Azure.
  • Implante a infraestrutura e a carga de trabalho com modelos Bicep: Nenhum manifesto YAML do Kubernetes era necessário para implantar seus contêineres de aplicativos.
  • Expor o aplicativo por meio de entrada gerenciada: o suporte interno para entrada externa baseada em https, para expor o Serviço de Ingestão removeu a necessidade de configurar sua própria entrada.
  • Extrair imagens de contêiner do ACR (Registro de Contêiner do Azure): os Aplicativos de Contêiner do Azure não exigem uma imagem base ou um registro específicos.
  • Gerenciar o ciclo de vida do aplicativo: o recurso de revisão oferece suporte à execução de várias revisões de um aplicativo de contêiner específico e à divisão de tráfego entre eles para testes A/B ou cenários de implantação Azul/Verde.
  • Usar identidade gerenciada: a equipe da Fabrikam pôde usar uma identidade gerenciada para autenticar com o Azure Key Vault e o Azure Container Registry.

Potenciais casos de utilização

  • Implante um aplicativo baseado em microsserviço brownfield em uma plataforma como serviço (PaaS) para simplificar o gerenciamento e evitar a complexidade da execução de um orquestrador de contêineres.
  • Otimize as operações e o gerenciamento migrando serviços em contêineres para uma plataforma que ofereça suporte à escala nativa para zero.
  • Execute um processo em segundo plano de longa execução, como o serviço de fluxo de trabalho no modo de revisão única.

Outros usos comuns de aplicativos de contêiner incluem:

  • Execução de cargas de trabalho em contêineres em uma plataforma sem servidor e baseada em consumo.
  • Dimensionamento automático de aplicativos baseados em tráfego HTTP/HTTPS e/ou gatilhos controlados por eventos suportados pelo KEDA
  • Minimização da sobrecarga de manutenção para aplicações em contentores
  • Implementação de pontos finais de API
  • Alojamento de aplicações de processamento em segundo plano
  • Tratamento do processamento orientado para eventos

Considerações

Essas considerações implementam os pilares do Azure Well-Architected Framework, que é um conjunto de princípios orientadores que podem ser usados para melhorar a qualidade de uma carga de trabalho. Para obter mais informações, consulte Microsoft Azure Well-Architected Framework.

Disponibilidade

Os Aplicativos de Contêiner permitem que você implante, gerencie, mantenha e monitore os aplicativos com mais facilidade. Você pode garantir a disponibilidade por meio dos seguintes recursos principais:

  • As revisões ajudam a implantar atualizações de aplicativos sem tempo de inatividade. Você pode usar revisões para gerenciar a implantação de atualizações de aplicativos e dividir o tráfego entre as revisões para dar suporte a implantações azuis/verdes e testes A/B (não usados atualmente neste exemplo de carga de trabalho).
  • Com os recursos de observabilidade de ponta a ponta do Container Apps, você tem uma visão holística de seus aplicativos em execução. Os Aplicativos de Contêiner são integrados ao Azure Monitor e ao Log Analytics, que permitem acompanhar a execução do aplicativo de contêiner e definir alertas com base em métricas e eventos.
  • Quando um aplicativo é encerrado inesperadamente, o serviço Aplicativos de contêiner o reinicia automaticamente.
  • Você pode habilitar regras de dimensionamento automático para atender à demanda à medida que o tráfego e as cargas de trabalho aumentam.
  • Os recursos de balanceamento de carga dinâmico dos Aplicativos de Contêiner otimizam o desempenho (embora não sejam utilizados neste exemplo de carga de trabalho).

Excelência operacional

A excelência operacional abrange os processos operacionais que implantam um aplicativo e o mantêm em execução na produção. Para obter mais informações, consulte Visão geral do pilar de excelência operacional.

Para alcançar a excelência operacional, o serviço Container Apps oferece estes recursos:

  • Integração do GitHub Actions para configurar implantações automatizadas de CI/CD.
  • Modo de várias revisões com divisão de tráfego para testar alterações no código do aplicativo e regras de escala.
  • Integração com o Azure Monitor e o Log Analytics para fornecer informações sobre seu aplicativo em contêineres.

Eficiência de desempenho

Eficiência de desempenho é a capacidade da sua carga de trabalho para dimensionar para satisfazer as exigências que os utilizadores lhe colocam de forma eficiente. Para obter mais informações, consulte Visão geral do pilar de eficiência de desempenho.

Considerações de desempenho nesta solução:

  • A carga de trabalho é distribuída entre vários aplicativos de microsserviço.
  • Cada microsserviço é independente, não compartilhando nada com os outros microsserviços, para que eles possam escalar de forma independente.
  • O dimensionamento automático pode ser ativado à medida que a carga de trabalho aumenta.
  • As solicitações são balanceadas dinamicamente.
  • As métricas, incluindo a utilização da CPU e da memória, as informações da largura de banda e a utilização do armazenamento, estão disponíveis através do Azure Monitor.
  • A análise de log fornece agregação de log para coletar informações em cada ambiente de Aplicativos de Contêiner.

Fiabilidade

A confiabilidade garante que seu aplicativo possa atender aos compromissos que você assume com seus clientes. Para obter mais informações, consulte Visão geral do pilar de confiabilidade.

Os Aplicativos de Contêiner tentarão reiniciar contêineres com falha e abstrairão o hardware dos usuários. A Microsoft lida com falhas transitórias e garante alta disponibilidade de recursos de computação de backup.

O monitoramento de desempenho por meio do Log Analytics e do Azure Monitor permite que você avalie o aplicativo sob carga. As métricas e as informações de registro fornecem os dados necessários para reconhecer tendências para evitar falhas e executar a análise de causa básica das falhas quando elas ocorrem.

Segurança

A segurança oferece garantias contra ataques deliberados e o abuso de seus valiosos dados e sistemas. Para obter mais informações, consulte Visão geral do pilar de segurança.

Segredos

  • Seu aplicativo de contêiner pode armazenar e recuperar valores confidenciais como segredos. Depois que um segredo é definido para o aplicativo contêiner, ele fica disponível para uso pelo aplicativo e por quaisquer regras de escala associadas. Se você estiver executando no modo de várias revisões, todas as revisões compartilham os mesmos segredos. Como os segredos são considerados uma alteração no escopo do aplicativo, se você alterar o valor de um segredo, uma nova revisão não será criada. No entanto, para que quaisquer revisões em execução carreguem o novo valor secreto, você precisa reiniciá-las. Nesse cenário, os valores das variáveis de aplicativo e ambiente são usados.
  • Variáveis de ambiente: valores sensíveis podem ser armazenados com segurança no nível do aplicativo. Quando as variáveis de ambiente são alteradas, o aplicativo contêiner gera uma nova revisão.

Segurança da rede

  • Ingresso: para limitar o acesso externo, apenas o serviço de Ingestão é configurado para entrada externa. Os serviços de back-end são acessíveis somente por meio da rede virtual interna no ambiente Container Apps. Exponha os serviços à Internet apenas quando necessário. Como essa arquitetura usa o recurso de entrada externa integrado, essa solução não oferece a capacidade de posicionar completamente seu ponto de entrada atrás de um firewall de aplicativo da Web (WAF) ou incluí-lo em planos de proteção contra DDoS. Todas as cargas de trabalho voltadas para a Web devem ser frontadas com um firewall de aplicativo Web.
  • Rede virtual: ao criar um ambiente, você pode fornecer uma rede virtual personalizada; caso contrário, uma rede virtual é gerada e gerenciada automaticamente pela Microsoft. Não é possível manipular essa rede virtual gerenciada pela Microsoft, por exemplo, adicionando NSGs (grupos de segurança de rede) ou forçando o tráfego de encapsulamento a um firewall de saída. Este exemplo usa uma rede virtual gerada automaticamente.

Para obter mais opções de topologia de rede, consulte Arquitetura de rede em aplicativos de contêiner do Azure.

Identidades de carga de trabalho

  • Os Aplicativos de Contêiner dão suporte a identidades gerenciadas do Microsoft Entra, permitindo que seu aplicativo se autentique em outros recursos protegidos pela ID do Microsoft Entra, como o Azure Key Vault, sem gerenciar credenciais em seu aplicativo de contêiner. Um aplicativo de contêiner pode usar identidades gerenciadas atribuídas pelo sistema, atribuídas pelo usuário ou ambos. Para serviços que não dão suporte à autenticação do AD, você deve armazenar segredos no Cofre da Chave do Azure e usar uma identidade gerenciada para acessar os segredos.
  • Use identidades gerenciadas para acesso ao Registro de Contêiner do Azure. Os Aplicativos de Contêiner do Azure permitem que você use uma identidade gerenciada diferente para sua carga de trabalho do que para o acesso ao Registro de contêiner. Essa abordagem é recomendada para obter controle de acesso granular sobre suas identidades gerenciadas.

Otimização de custos

  • Os Aplicativos de Contêiner do Azure têm um modelo de preços baseado no consumo.
  • As Aplicações de Contentor do Azure suportam a escala até zero. Quando um aplicativo de contêiner é dimensionado para zero, não há cobrança.
  • Nesse cenário, o Azure Cosmos DB e o Cache Redis do Azure são os principais fatores de custo.

Implementar este cenário

Siga as etapas no README.md no repositório de cenário de exemplo de Aplicativos de Contêiner do Azure.

Contribuidores

A Microsoft mantém este artigo. Foi originalmente escrito pelos seguintes contribuidores.

Autor principal:

Próximos passos