Implantar microsserviços com Aplicativos de Contêiner do Azure e Dapr
Este artigo descreve uma solução para executar um sistema de gerenciamento de pedidos que tem 10 microsserviços nos Aplicativos de Contêiner do Azure. A solução também usa práticas recomendadas de microsserviços por meio do Dapr (Distributed Application Runtime) e do dimensionamento controlado por eventos com KEDA (dimensionamento automático controlado por eventos do Kubernetes).
Dapr e Traefik são marcas comerciais de suas respectivas empresas. Nenhum endosso está implícito pelo uso dessas marcas.
Arquitetura
Baixe um arquivo do PowerPoint dessa arquitetura.
Fluxo de dados
Essa solução descreve um sistema fictício de gerenciamento de pedidos do Red Dog e sua infraestrutura de suporte do Azure. A arquitetura é composta por um único ambiente de Aplicativos de Contêiner que hospeda 10 aplicativos de microsserviço do .NET Core. A solução usa o SDK do Dapr para se integrar aos recursos do Azure por meio de blocos de construção de publicação, estado e associação. Os serviços também usam regras de escala KEDA para permitir o dimensionamento com base em gatilhos de eventos e cenários de escala para zero.
O fluxo de dados a seguir corresponde ao diagrama anterior:
Traefik: o proxy básico para encaminhar solicitações de usuário da interface do usuário para os serviços de contabilidade e Makeline para o painel interativo.
interface do usuário: um painel que mostra a ordem em tempo real e os dados de vendas agregados para o sistema de gerenciamento de pedidos do Red Dog.
Cliente virtual: um programa de simulação de cliente que simula clientes fazendo pedidos pelo serviço de pedidos.
Serviço de pedido: Crie, leia, atualize e exclua a API para fazer e gerenciar pedidos.
Serviço de contabilidade: um serviço que processa, armazena e agrega dados de pedidos. Ele transforma pedidos de clientes em métricas de vendas significativas que a interface do usuário demonstra.
Serviço de recebimento: um programa de arquivamento que gera e armazena recebimentos de pedidos para fins de auditoria e histórico.
Serviço de fidelidade: um serviço que gerencia o programa de fidelidade acompanhando os pontos de recompensa do cliente com base nos gastos com pedidos.
Serviço makeline: Um serviço que gerencia uma fila de pedidos atuais aguardando para serem atendidos. Ele acompanha o processamento e a conclusão dos pedidos pelo serviço de trabalho virtual.
Trabalho virtual: um programa de simulação de trabalho que simula a conclusão dos pedidos de clientes.
Serviço | Entrada | Componentes do Dapr | Regras de escala KEDA |
---|---|---|---|
Traefik | Externo | Dapr não habilitado | HTTP |
Interface do usuário | Interna | Dapr não habilitado | HTTP |
Cliente virtual | Nenhum | Invocação serviço a serviço | N/D |
Ordem de serviço | Interna | Publicação-assinatura: Barramento de Serviço do Azure | HTTP |
Serviço de contabilidade | Interna | Publicação-assinatura: Barramento de Serviço | Comprimento do tópico do Barramento de Serviço, HTTP |
Serviço de recebimento | Interna | Publicação-assinatura: Barramento de Serviço Associação: Armazenamento de Blobs do Azure |
Comprimento do tópico do Barramento de Serviço |
Serviço de fidelidade | Interna | Publicação-assinatura: Barramento de Serviço Estado: Azure Cosmos DB |
Comprimento do tópico do Barramento de Serviço |
Serviço Makeline | Interna | Publicação-assinatura: Barramento de Serviço Estado: Cache do Azure para Redis |
Comprimento do tópico do Barramento de Serviço, HTTP |
Trabalho virtual | Nenhum | Invocação serviço a serviço Associação: Cron |
N/D |
Observação
Você também pode implementar o Bootstrap 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, escala para zero depois de criar os objetos necessários no Banco de Dados SQL do Azure.
Componentes
O Application Insights é um serviço extensível de gerenciamento de desempenho de aplicativos que você pode usar para monitorar aplicativos dinâmicos e detectar automaticamente anomalias de desempenho. Nessa arquitetura, você usa o Application Insights com o Azure Monitor para exibir os logs de contêiner e coletar métricas dos microsserviços.
O Armazenamento de Blobs é uma solução baseada em nuvem para armazenar grandes quantidades de dados não estruturados, como arquivos binários ou texto. Nessa arquitetura, um serviço de recebimento usa o Armazenamento de Blobs por meio de uma associação de saída daPr para armazenar os recibos do pedido.
Cache do Azure para Redis é um cache Redis gerenciado distribuído, na memória e escalonável. Nessa arquitetura, ela é usada como um componente do repositório de estado dapr para o serviço Makeline armazenar dados nos pedidos que estão sendo processados.
O Azure Cosmos DB é um serviço de banco de dados gerenciado noSQL e de vários modelos. Nessa arquitetura, ela é usada como um componente de repositório de estado dapr para o serviço de fidelidade armazenar dados de fidelidade dos clientes.
O Azure Monitor é uma plataforma unificada que permite coletar, analisar e agir sobre dados de conteúdo do cliente de seus ambientes de infraestrutura do Azure. Nesta arquitetura, você usa o Azure Monitor com o Application Insights para exibir os logs de contêiner e coletar métricas dos microsserviços.
O Barramento de Serviço é um agente de mensagens empresarial totalmente gerenciado que tem filas e tópicos de publicação e assinatura. Nesta arquitetura, você usa o Barramento de Serviço para a implementação do componente de publicação e assinatura da Dapr. Vários serviços usam esse componente. O serviço de pedidos publica mensagens no barramento, e os serviços Makeline, de contabilidade, de fidelidade e de recebimento se inscrevem para receber essas mensagens.
Os Aplicativos de Contêiner são um serviço de contêiner totalmente gerenciado e sem servidor usado para criar e implantar aplicativos modernos em escala. Nessa arquitetura, você hospeda todos os 10 microsserviços em Aplicativos de Contêiner e os implanta em um único ambiente de Aplicativos de Contêiner. Esse ambiente serve como um limite seguro em torno do sistema.
O Banco de Dados SQL é um serviço de banco de dados relacional inteligente, escalonável criado para a nuvem. Nessa arquitetura, ele serve como o repositório de dados para o serviço de contabilidade, que usa o Entity Framework Core para interface com o banco de dados. O serviço bootstrapper é responsável por configurar as tabelas SQL no banco de dados. Em seguida, ele é executado uma vez antes de estabelecer a conexão com o serviço de contabilidade.
O Traefik é um proxy reverso moderno e balanceador de carga que facilita a implantação de microsserviços. Nessa arquitetura, use o recurso de configuração dinâmica do Traefik para fazer o roteamento baseado em caminho da interface do usuário, que é um Vue.js aplicativo de página única. Essa configuração também permite chamadas de API diretas para os serviços de back-end para teste.
Alternativas
Nessa arquitetura, você implanta um proxy Traefik para habilitar o roteamento baseado em caminho para a API do Vue.js. Existem muitos proxies de código aberto alternativos que você pode usar para essa finalidade. Outros dois projetos comuns são NGINX e HAProxy.
Toda a infraestrutura do Azure, exceto o Banco de Dados SQL, usa componentes Dapr para interoperabilidade. Um dos benefícios do Dapr é que você pode trocar todos esses componentes alterando a configuração da implantação de aplicativos de contêiner. Nesse cenário, o Barramento de Serviço, o Azure Cosmos DB, o Cache do Azure para Redis e o Armazenamento de Blobs mostram alguns dos mais de 70 componentes do Dapr disponíveis. Uma lista de agentes de publicação e assinatura alternativos, repositórios de estado e associações de saída estão disponíveis nos documentos da dapr.
Detalhes do cenário
Os microsserviços são um estilo arquitetônico amplamente adotado. Eles oferecem benefícios como escalabilidade, agilidade e implantações independentes. Você pode usar contêineres como 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 serem considerados para arquiteturas de microsserviços em larga escala. Normalmente, a plataforma de infraestrutura requer uma compreensão significativa de tecnologias complexas, como orquestradores de contêineres.
Os Aplicativos de Contêiner são um serviço de contêiner totalmente gerenciado sem servidor para executar aplicativos modernos em escala. Ele permite implantar aplicativos em contêineres por meio de uma abstração da plataforma subjacente. Usando esse método, você não precisa gerenciar uma infraestrutura complicada.
Essa arquitetura usa a integração dos Aplicativos de Contêiner com uma versão gerenciada do Dapr. O Dapr é um projeto de software livre que ajuda os desenvolvedores a superar os desafios inerentes em aplicativos distribuídos, como gerenciamento de estado e invocação de serviço.
Os Aplicativos de Contêiner também fornecem uma versão gerenciada do 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 e o Cache do Azure para Redis.
Você também pode habilitar a entrada HTTPS em Aplicativos de Contêiner 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 obter mais informações, consulte Comparar 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 que tem 10 microsserviços em Aplicativos de Contêiner. A solução também usa práticas recomendadas de microsserviços por meio de Dapr e dimensionamento orientado por eventos com KEDA.
Possíveis casos de uso
Essa solução se aplica a qualquer organização que use microsserviços sem estado e com estado para sistemas distribuídos. A solução é ideal para os setores de bens de consumo embalados e manufatura que tenham um sistema de pedidos e processamento.
As seguintes soluções têm designs semelhantes:
- Arquitetura de microsserviços no AKS (Serviço de Kubernetes do Azure)
- Arquitetura de microsserviços no Azure Functions
- Arquiteturas orientadas por eventos
Considerações
Essas considerações implementam os pilares do Azure Well-Architected Framework, um conjunto de princípios orientadores que você pode usar para aprimorar a qualidade de uma carga de trabalho. Para obter mais informações, consulte Well-Architected Framework.
Confiabilidade
A confiabilidade ajuda a garantir que seu aplicativo possa cumprir os compromissos que você faz aos seus clientes. Para obter mais informações, consulte Lista de verificação de revisão de design parade confiabilidade.
Os Aplicativos de Contêiner são criados em uma base do Kubernetes, que opera como a infraestrutura subjacente. Os mecanismos de resiliência são integrados ao Kubernetes que monitoram e reiniciam contêineres ou pods, se houver problemas. Os mecanismos de resiliência incluem um balanceador de carga interno que distribui o tráfego entre várias réplicas de cada aplicativo de contêiner. Essa redundância permite que o sistema permaneça operacional, mesmo que uma réplica fique indisponível.
Segurança
A segurança fornece garantias contra ataques deliberados e o uso indevido de seus valiosos dados e sistemas. Para obter mais informações, consulte Lista de verificação de revisão de design para segurança.
A lista a seguir descreve vários recursos de segurança que são omitidos nessa arquitetura, juntamente com outras recomendações e considerações:
Essa arquitetura não usa pontos de extremidade privados, que permitem conectividade privada mais segura aos serviços do Azure atribuindo-lhes um endereço IP de sua rede virtual. Quando pontos de extremidade privados são usados, o acesso à rede pública pode ser desabilitado. Essa abordagem mantém o tráfego no backbone da Microsoft e aprimora a segurança e a conformidade.
A atividade de rede deve ser monitorada continuamente para detectar e evitar abusos. Você pode obter essa abordagem usando um Firewall do Azure e tabelas de rotas. As tabelas de rotas permitem que o tráfego que deixa uma rede virtual seja passado pelo firewall primeiro. Esse processo é uma etapa importante para garantir que sua arquitetura não esteja vulnerável a ataques de exfiltração de dados.
Use um WAF (firewall de aplicativo Web) para proteger contra vulnerabilidades comuns. Use o Azure Front Door ou o Gateway de Aplicativo do Azure para implementar um WAF nessa arquitetura.
Considere usar o recurso interno de autenticação e autorização para Aplicativos de Contêiner, conhecido como Autenticação Fácil. O Easy Auth simplifica o processo de integração de provedores de identidade em seu aplicativo Web. Ele lida com a autenticação fora do seu aplicativo Web, para que você não precise fazer alterações significativas no código.
Use identidade gerenciada para identidades de carga de trabalho. A identidade gerenciada elimina a necessidade de os desenvolvedores gerenciarem credenciais de autenticação. Por exemplo, a arquitetura básica é autenticada no SQL Server por meio de senha em uma cadeia de conexão. Quando possível, use as IDs do Microsoft Entra para autenticar no SQL Server do Azure.
Otimização de custos
A Otimização de Custos concentra-se em maneiras de reduzir despesas desnecessárias e melhorar a eficiência operacional. Para obter mais informações, consulte Lista de verificação de revisão de design parade Otimização de Custos.
Use a calculadora de preços do Azure para estimar o custo dos serviços nessa arquitetura.
Excelência operacional
A Excelência operacional abrange os processos de operações que implantam uma aplicação e as mantêm em execução em produção. Para obter mais informações, consulte Lista de verificação de revisão de design para Excelência Operacional.
Você pode usar o Azure Monitor e o Application Insights para monitorar aplicativos de contêiner. Você pode exibir logs de contêiner navegando no portal até o painel Logs em cada aplicativo de contêiner e executando a consulta Kusto a seguir. Esse exemplo mostra logs do 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 de aplicativos no Application Insights também mostra como os serviços se comunicam em tempo real. Você pode usá-los para cenários de depuração. Navegue até o mapa do aplicativo no recurso Application Insights para exibir algo semelhante ao mapa a seguir.
Para obter mais informações, consulte Monitorar um aplicativo em Aplicativos de Contêiner.
Eficiência de desempenho
A Eficiência de Desempenho refere-se à capacidade da carga de trabalho de dimensionar para atender às demandas do usuário com eficiência. Para obter mais informações, consulte Lista de verificação de design parade Eficiência de Desempenho.
Essa solução depende muito da implementação de KEDA nos Aplicativos de Contêiner para dimensionamento controlado por eventos. Quando você implanta o serviço de cliente virtual, ele faz pedidos continuamente. Esse dimensionamento faz com que o serviço de pedido seja escalado verticalmente por meio do dimensionador HTTP KEDA. Conforme o serviço de pedidos publica os pedidos no barramento de serviço, os dimensionadores KEDA do barramento de serviço escalam os serviços de contabilidade, recebimento, Makeline e fidelidade verticalmente. A interface do usuário e os aplicativos de contêiner 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 nessa solução são dimensionados para zero, com exceção dos serviços trabalho virtual e Makeline. O trabalho virtual não reduz verticalmente porque verifica continuamente o cumprimento do pedido. Para obter mais informações, consulte Definir regras de dimensionamento em Aplicativos de Contêiner.
Colaboradores
A Microsoft mantém este artigo. Os colaboradores a seguir escreveram este artigo.
Autor principal:
- Alice Gibbons | Black Belt Global Nativo de Nuvem
Outros colaboradores:
- Lynn Orrell | Especialista Principal em Soluções (GBB)
- Kendall Roden - | Gerente de Programas Sênior
Para ver perfis não públicos no LinkedIn, entre no LinkedIn.
Próximas etapas
- Documentos de Aplicativos de Contêiner
- Compare Container Apps com outras opções de contêiner do Azure