Editar

Partilhar via


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

Azure Container Apps
.NET
Azure SQL Database
Azure Cosmos DB
Azure Cache for Redis

Este artigo descreve uma solução para executar um sistema de gerenciamento de pedidos com 10 microsserviços em Aplicativos de Contêiner do Azure. A solução também usa as melhores práticas de microsserviços por meio do Dapr e do dimensionamento controlado por eventos com o KEDA.

Dapr e Traefik são marcas comerciais de suas respetivas empresas. O uso destas marcas não implica qualquer endosso.

Arquitetura

Diagrama que mostra um sistema de gerenciamento de pedidos com microsserviços em Aplicativos de Contêiner.

Transfira um ficheiro PowerPoint desta arquitetura.

Fluxo de dados

Esta solução usa modelos Bicep para executar a implantação do sistema de gerenciamento de pedidos Reddog e sua infraestrutura Azure de suporte. A arquitetura é composta por um único ambiente de Aplicativos de Contêiner do Azure que hospeda 10 aplicativos de microsserviço .NET Core. Você usará o SDK do .NET Core Dapr para se integrar aos recursos do Azure por meio dos blocos de construção publish-subscribe (pub/sub) e State and Binding. Embora o Dapr normalmente forneça flexibilidade quando você implementa componentes, essa solução é baseada em uma opinião. Os serviços também usam regras de escala KEDA para permitir o dimensionamento com base em gatilhos de eventos e dimensionar para cenários zero.

A lista a seguir descreve cada microsserviço e a configuração dos Aplicativos de Contêiner do Azure com os quais ele é implantado. Consulte o repositório de código reddog no GitHub para visualizar o código.

  1. Traefik: O proxy básico para rotear solicitações de usuário da interface do usuário para os serviços de contabilidade e Makeline para o painel interativo.

  2. UI: Um painel que mostra dados de pedidos e vendas agregados em tempo real para o sistema de gerenciamento de pedidos Reddog.

  3. Cliente virtual: um programa de simulação de clientes que simula clientes que fazem pedidos através do serviço de pedidos.

  4. Serviço de pedidos: UMA API CRUD para fazer e gerenciar pedidos.

  5. Serviço de contabilidade: um serviço que processa, armazena e agrega dados de pedidos. Ele transforma os pedidos dos clientes em métricas de vendas significativas que são exibidas pela interface do usuário.

  6. Serviço de recebimento: Um programa de arquivo que gera e armazena recibos de pedidos para fins de auditoria e histórico.

  7. Serviço de fidelidade: um serviço que gerencia o programa de fidelidade rastreando os pontos de recompensa do cliente com base nos gastos do pedido.

  8. Serviço Makeline: um serviço responsável por gerenciar uma fila de pedidos atuais aguardando atendimento. Ele rastreia o processamento e a conclusão dos pedidos pelo serviço de trabalhador virtual.

  9. Trabalhador virtual: um programa de simulação de trabalhador que simula a conclusão de pedidos de clientes.

  10. Bootstrapper (não mostrado): um serviço que usa o Entity Framework Core para inicializar as tabelas no Banco de Dados SQL do Azure para uso com o serviço de contabilidade.

Serviço Entrada Componentes Dapr Regras da escala KEDA
Traefik Externa Dapr não ativado HTTP
IU Interna Dapr não ativado HTTP
Cliente virtual Nenhuma Invocação de serviço a serviço N/A
Serviço de encomendas Interna Pub/sub: Barramento de Serviço do Azure HTTP
Serviço de contabilidade Interna Pub/sub: Barramento de Serviço do Azure Comprimento do tópico do Barramento de Serviço do Azure, HTTP
Serviço de recebimento Interna Pub/sub: Barramento de Serviço do Azure
Ligação: Blob do Azure
Comprimento do tópico do Barramento de Serviço do Azure
Serviço de fidelização Interna Pub/sub: Barramento de Serviço do Azure
Estado: Azure Cosmos DB
Comprimento do tópico do Barramento de Serviço do Azure
Serviço Makeline Interna Pub/sub: Barramento de Serviço do Azure
Estado: Azure Redis
Comprimento do tópico do Barramento de Serviço do Azure, HTTP
Trabalhador virtual Nenhuma Invocação de serviço a serviço
Ligação: Cron
N/A

Nota

Você também pode executar o Bootstrapper em um aplicativo de contêiner. No entanto, esse serviço é executado uma vez para executar a criação do banco de dados e, em seguida, dimensionado para zero depois de criar os objetos necessários no Banco de Dados SQL do Azure.

Componentes

Esta solução utiliza os seguintes componentes:

  • Os grupos de recursos do Azure são contêineres lógicos para recursos do Azure. Você usa um único grupo de recursos para estruturar tudo relacionado a essa solução no portal do Azure.
  • Os Aplicativos de Contêiner do Azure são um serviço de contêiner totalmente gerenciado e sem servidor usado para criar e implantar aplicativos modernos em escala. Nesta solução, você está hospedando todos os 10 microsserviços nos Aplicativos de Contêiner do Azure e implantando-os em um único ambiente de Aplicativo de Contêiner. Este ambiente atua como um limite seguro em torno do sistema.
  • O Barramento de Serviço do Azure é um agente de mensagens empresarial totalmente gerenciado completo com filas e tópicos de publicação-assinatura. Nesta solução, use-o para a implementação do componente pub/sub do Dapr. Vários serviços usam esse componente. O serviço de pedidos publica mensagens no ônibus, e os serviços Makeline, contabilidade, lealdade e recebimento assinam essas mensagens.
  • O Azure Cosmos DB é um serviço de banco de dados gerenciado multimodelo NoSQL. Use-o como um componente de armazenamento de estado Dapr para o serviço de fidelidade para armazenar os dados de fidelidade do cliente.
  • O Cache Redis do Azure é um cache Redis gerenciado distribuído, na memória e escalável. Ele é usado como um componente de armazenamento de estado Dapr para o Serviço Makeline para armazenar dados sobre os pedidos que estão sendo processados.
  • O Banco de Dados SQL do Azure é um serviço de banco de dados relacional, escalável e inteligente criado para a nuvem. Crie-o para o serviço de contabilidade, que usa o Entity Framework Core para interagir com o banco de dados. O serviço Bootstrapper é responsável por configurar as tabelas SQL no banco de dados e, em seguida, é executado uma vez antes de estabelecer a conexão com o serviço de contabilidade.
  • O Armazenamento de Blobs do Azure armazena grandes quantidades de dados não estruturados, como texto ou arquivos binários. O serviço de recebimento usa o Armazenamento de Blob por meio de uma vinculação de saída Dapr para armazenar os recibos do pedido.
  • Traefik é um proxy reverso e balanceador de carga moderno líder que facilita a implantação de microsserviços. Nesta solução, use o recurso de configuração dinâmica do Traefik para fazer o roteamento baseado em caminho a partir da interface do usuário, que é um Vue.js aplicativo de página única (SPA). Essa configuração também permite chamadas diretas de API para os serviços de back-end para teste.
  • O Azure Monitor permite que você colete, analise e atue sobre os dados de conteúdo do cliente de seus ambientes de infraestrutura do Azure. Você o usará com o Application Insights para exibir os logs de contêiner e coletar métricas dos microsserviços.

Alternativas

Nessa arquitetura, você implanta um proxy Traefik para habilitar o roteamento baseado em caminho para a API Vue.js. Existem muitos proxies alternativos de código aberto que você pode usar para essa finalidade. Dois outros projetos populares são NGINX e HAProxy.

Toda a infraestrutura do Azure, exceto o Banco de Dados SQL do Azure, usa componentes Dapr para interoperabilidade. Um benefício do Dapr é que você pode trocar todos esses componentes alterando a configuração de implantação de aplicativos de contêiner. Nesse caso, o Barramento de Serviço do Azure, o Azure Cosmos DB, o Cache para Redis e o Armazenamento de Blob foram escolhidos para mostrar alguns dos 70+ componentes Dapr disponíveis. Uma lista de corretores pub/sub alternativos, lojas de estado e ligações de saída estão nos documentos do Dapr.

Detalhes do cenário

Os microsserviços são um estilo de arquitetura cada vez mais popular que pode ter muitos benefícios, incluindo alta escalabilidade, ciclos de desenvolvimento mais curtos e maior simplicidade. Você pode usar contêineres como um mecanismo para implantar aplicativos de microsserviços e, em seguida, usar um orquestrador de contêineres como o Kubernetes para simplificar as operações. Há muitos fatores a considerar para arquiteturas de microsserviços de grande escala. Normalmente, a plataforma de infraestrutura requer uma compreensão significativa de tecnologias complexas, como os orquestradores de contêineres.

Os Aplicativos de Contêiner do Azure são um serviço de contêiner sem servidor totalmente gerenciado para executar aplicativos modernos em escala. Ele permite que você implante aplicativos em contêineres por meio da abstração da plataforma subjacente. Dessa forma, você não precisará gerenciar uma infraestrutura complicada. Os Aplicativos de Contêiner do Azure são alimentados por tecnologias de código aberto.

Essa arquitetura usa a integração de Aplicativos de Contêiner do Azure com uma versão gerenciada do Distributed Application Runtime (Dapr). Dapr é um projeto de código aberto que ajuda os desenvolvedores com os desafios inerentes em aplicativos distribuídos, como gerenciamento de estado e invocação de serviços.

Os Aplicativos de Contêiner do Azure também fornecem uma versão gerenciada do Kubernetes Event-driven Autoscaling (KEDA). O KEDA permite que seus contêineres sejam dimensionados automaticamente com base em eventos de entrada de serviços externos, como o Barramento de Serviço do Azure e o Cache do Azure para Redis.

Você também pode habilitar a entrada HTTPS nos Aplicativos de Contêiner do Azure sem criar mais recursos de rede do Azure. Você pode usar o proxy Envoy, que também permite cenários de divisão de tráfego.

Para explorar como os Aplicativos de Contêiner do Azure se comparam a outras plataformas de hospedagem de contêiner no Azure, consulte Comparando Aplicativos de Contêiner com outras opções de contêiner do Azure.

Este artigo descreve uma solução para executar um sistema de gerenciamento de pedidos com 10 microsserviços em Aplicativos de Contêiner do Azure. A solução também usa as melhores práticas de microsserviços por meio do Dapr e do dimensionamento controlado por eventos com o KEDA.

Potenciais casos de utilização

Esta solução aplica-se a qualquer organização que utilize microsserviços sem estado e com monitoração de estado para sistemas distribuídos. A solução é melhor para bens de consumo embalados e indústrias de fabricação que têm um sistema de pedidos e atendimento.

Estas outras soluções têm designs semelhantes:

  • Arquitetura de microsserviços no Azure Kubernetes Service (AKS)
  • Arquitetura de microsserviços no Azure Functions
  • Arquiteturas orientadas a eventos

Considerações

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

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 do Azure são executados no Kubernetes nos bastidores. Os mecanismos de resiliência são incorporados ao Kubernetes que monitoram e reiniciam contêineres, ou pods, se houver problemas. Os mecanismos de resiliência combinam-se com o balanceador de carga interno para executar várias réplicas de cada aplicativo de contêiner. Com essa redundância, a solução pode tolerar que uma instância não esteja disponível.

Você pode usar o Azure Monitor e o Application Insights para monitorar os Aplicativos de Contêiner do Azure. Você pode exibir logs de contêiner navegando no portal até o painel Logs em cada aplicativo de contêiner e, em seguida, executar a seguinte consulta Kusto. Este exemplo mostra logs para o aplicativo de serviço Makeline.

ContainerAppConsoleLogs_CL |
    where ContainerAppName_s contains "make-line-service" |
    project TimeGenerated, _timestamp_d, ContainerGroupName_s, Log_s |
    order by _timestamp_d asc

O mapa do aplicativo no Application Insights também mostra como os serviços se comunicam em tempo real. Em seguida, você pode usá-los para depurar cenários. Navegue até o mapa do aplicativo no recurso do Application Insights para exibir algo como o seguinte.

Captura de tela que mostra um mapa do aplicativo no Application Insights.

Para obter mais informações sobre como monitorar Aplicativos de Contêiner do Azure, consulte Monitorar um aplicativo em Aplicativos de Contêiner do Azure.

Otimização de custos

Otimize os custos procurando maneiras de reduzir despesas desnecessárias e melhorar a eficiência operacional. Para obter mais informações, consulte Visão geral do pilar de otimização de custos.

Use a calculadora de preços do Azure para estimar o custo dos serviços nessa arquitetura.

Eficiência de desempenho

A eficiência de desempenho é a capacidade da sua carga de trabalho de escalar para atender às demandas que você coloca nela de maneira eficiente. Para obter mais informações, consulte Visão geral do pilar de eficiência de desempenho.

Essa solução depende muito da implementação KEDA nos Aplicativos de Contêiner do Azure para dimensionamento controlado por eventos. Quando você implanta o atendimento ao cliente virtual, ele faz pedidos continuamente, o que faz com que o serviço de pedidos seja dimensionado por meio do escalador HTTP KEDA. À medida que o serviço de pedidos publica os pedidos no barramento de serviço, os escaladores KEDA do barramento de serviço fazem com que os serviços de contabilidade, recebimento, Makeline e fidelidade aumentem. Os aplicativos de contêiner UI e Traefik também configuram escaladores HTTP KEDA para que os aplicativos sejam dimensionados à medida que mais usuários acessam o painel.

Quando o cliente virtual não está em execução, todos os microsserviços nesta solução são dimensionados para zero, exceto os serviços de trabalhador virtual e Makeline. O trabalhador virtual não diminui a escala, pois está constantemente verificando o atendimento de pedidos. Para obter mais informações sobre dimensionamento em aplicativos de contêiner, consulte Definir regras de dimensionamento em Aplicativos de Contêiner do Azure. Para obter mais informações sobre KEDA Scalers, leia a documentação KEDA sobre Scalers.

Implementar este cenário

Para obter instruções de implantação, consulte Red Dog Demo: Azure Container Apps Deployment no GitHub.

O Red Dog Demo: Integração de microsserviços é um modelo de aplicativo empacotado que se baseia nos ativos de código anteriores para demonstrar a integração de Aplicativos de Contêiner do Azure, Serviço de Aplicativo, Funções e Gerenciamento de API e provisiona a infra, implanta o código usando as Ações do GitHub.

Contribuidores

Este artigo é mantido pela Microsoft. Foi originalmente escrito pelos seguintes contribuidores.

Autor principal:

Outros contribuidores:

  • Kendall Roden - Brasil | Gerente de Programa Sênior
  • Lynn Orrell - Brasil | Especialista Principal de Soluções (GBB)

Para ver perfis não públicos do LinkedIn, inicie sessão no LinkedIn.

Próximos passos