Contexto: A Visão Geral do Sistema Original
Em um dos meus trabalhos atuei em um sistema de gerenciamento robusto, desenvolvido em Java, integrado ao RabbitMQ e PostgreSQL, com a missão de controlar pagamentos, fretes e estoques de uma plataforma de e-commerce de grande porte. O sistema original, que operava localmente em um data center on-premise, já não estava mais atendendo às crescentes demandas de escalabilidade e confiabilidade. Esse sistema estava enfrentando desafios como alta latência em transações críticas, dificuldades de manutenção e um aumento nos custos operacionais com o crescimento das cargas de trabalho.
O objetivo dessa migração era não apenas mover o sistema para a nuvem, mas também melhorar a arquitetura para torná-la mais escalável, resiliente e eficiente. A escolha da Azure como plataforma de nuvem foi motivada pela sua capacidade de atender às necessidades específicas de uma arquitetura moderna e robusta, ao mesmo tempo, em que oferece suporte às melhores práticas de segurança, governança e otimização de custos, conforme descrito no Azure Well-Architected Framework.
Contexto do Sistema: O Novo Modelo na Azure
Visão Geral
O novo sistema foi concebido para ser altamente escalável, resiliente e fácil de gerenciar, utilizando os princípios do Azure Well-Architected Framework. A arquitetura foi projetada para lidar com o aumento do tráfego, garantir alta disponibilidade e reduzir custos operacionais. A migração para a Azure não significava apenas mover os componentes existentes, mas também revisar e modernizar a arquitetura para garantir que o sistema fosse ágil, seguro e eficiente.
A arquitetura foi planejada em quatro níveis do C4 Model, com ênfase em uma visão clara do contexto, dos contêineres, dos componentes e do código. Isso garantiria que todos os stakeholders – de engenheiros a gestores – estivessem alinhados em relação aos objetivos de escalabilidade e confiabilidade do novo sistema.
Contexto (Context Diagram)
O diagrama de contexto ilustra o sistema de gerenciamento de pagamentos, fretes e estoques como um todo. O sistema interage com vários componentes externos, como clientes, sistemas de pagamento e plataformas de transporte. Este diagrama foca em como os usuários e sistemas externos interagem com o sistema.
O novo sistema foi dividido em três áreas principais de negócios:
- Gestão de Pagamentos: Processa transações financeiras utilizando uma integração com gateways de pagamento e outros serviços financeiros externos.
- Gestão de Frete: Interage com provedores de logística para calcular e monitorar o status de entrega de pedidos.
- Gestão de Estoques: Monitora os níveis de estoque e gera alertas automáticos quando os itens estão próximos da escassez.
Cada uma dessas áreas foi tratada como um microserviço separado, facilitando a escalabilidade independente e o gerenciamento simplificado. O diagrama de contexto se concentra nas interações entre esses serviços e as plataformas externas, como os sistemas de pagamento, de frete e os serviços do usuário.
Contêineres (Container Diagram)
O diagrama de contêiner foca nos principais contêineres de software dentro da arquitetura. Cada serviço foi transformado em um contêiner de aplicação separado, aproveitando os recursos de containerização do Kubernetes na Azure. O RabbitMQ foi substituído por um Azure Service Bus para melhorar a comunicação assíncrona, enquanto o PostgreSQL foi migrado para Azure Database for PostgreSQL, com otimizações para garantir maior disponibilidade e escalabilidade.
Os principais contêineres incluem:
- Frontend Web (App): Uma aplicação web que interage com os usuários para gerenciar pedidos, pagamentos, fretes e estoque. Essa aplicação foi movida para o Azure App Service.
- API Gateway: Um serviço que gerencia o roteamento das requisições para os microserviços específicos de pagamento, frete e estoque. Utiliza o Azure API Management para gerenciar a segurança, autenticação e controle de tráfego.
- Microserviço de Pagamento: Responsável por processar e validar transações financeiras. Ele foi reestruturado para se comunicar com os gateways de pagamento e realizar transações de forma segura. Foi hospedado no Azure Kubernetes Service (AKS).
- Microserviço de Frete: Responsável por calcular o custo de frete e acompanhar o status das entregas. Este serviço se comunica com provedores externos de logística via APIs RESTful e foi hospedado em contêineres no AKS.
- Microserviço de Estoque: Responsável por controlar o inventário, emitir alertas de estoque baixo e comunicar-se com os sistemas de vendas para garantir que os produtos estejam disponíveis para os clientes. Este serviço também foi movido para o AKS.
- Banco de Dados PostgreSQL: O banco de dados foi migrado para Azure Database for PostgreSQL, oferecendo alta disponibilidade e backup automático. A migração foi realizada com a ajuda da ferramenta Azure Database Migration Service.
- Service Bus (RabbitMQ substituído por Azure Service Bus): Gerencia as filas de mensagens assíncronas entre os microsserviços, garantindo que as transações e os processos de negócios ocorram de maneira eficiente e resiliente.
Componente (Component Diagram)
O diagrama de componentes foca na arquitetura interna de cada um dos microserviços. Cada componente é representado como uma unidade de software autônoma e de fácil escalabilidade.
Microsserviço de Pagamento
Os principais componentes incluem:
- Componente de Processamento de Pagamentos: Responsável por se comunicar com o gateway de pagamento, validando e processando os pagamentos. Utiliza o Azure Key Vault para armazenar credenciais e informações sensíveis de forma segura.
- Componente de Notificação: Envia notificações ao cliente e ao administrador sobre o status do pagamento.
Microserviço de Frete
Os principais componentes incluem:
- Componente de Cálculo de Frete: Interage com APIs externas para calcular o custo do frete com base no peso, destino e outras variáveis. Foi adaptado para utilizar o Azure Logic Apps para integrar-se com os serviços de terceiros.
- Componente de Rastreamento: Monitora o status de entrega dos pedidos e atualiza os clientes automaticamente via Azure Functions.
Microserviço de Estoque
Os principais componentes incluem:
Componente de Controle de Inventário: Responsável por monitorar e ajustar os níveis de estoque. Integra-se com os sistemas de vendas para garantir que os produtos não se esgotem sem uma reposição programada.
Componente de Alertas: Gera alertas para os responsáveis de reposição de estoque quando os níveis atingem o mínimo.
Código (Code Diagram)
Microserviço de Pagamento:
Microserviço de Frete:
Microserviço de Estoque:
Conclusão: Melhorias e Resultados da Migração
A migração do sistema para a Azure trouxe várias melhorias significativas:
- Escalabilidade: O uso de Azure Kubernetes Service (AKS) e Azure App Service permitiu que cada microserviço fosse escalado independentemente, de acordo com a carga de trabalho, garantindo que o sistema pudesse lidar com picos de tráfego sem problemas.
- Resiliência: A utilização do Azure Service Bus para mensagens assíncronas e o Azure Database for PostgreSQL com alta disponibilidade garantiram que o sistema fosse mais resiliente a falhas e quedas.
- Custos Otimizados: A migração para a nuvem permitiu a otimização de custos por meio do modelo de pagamento conforme o uso, além de reduzir os custos de infraestrutura e manutenção de servidores físicos.
- Segurança: O uso de Azure Key Vault para o armazenamento seguro de credenciais e a implementação de práticas de segurança como autenticação multifatorial (MFA) e controle de acesso rigoroso aumentaram a segurança geral do sistema.
Com o uso das melhores práticas do Azure Well-Architected Framework e a implementação do C4 Model, a migração não apenas modernizou a arquitetura, mas também garantiu um sistema mais confiável, escalável e seguro.
Top comments (0)