O blog da AWS

Como o Grupo Primo inovou com uma arquitetura baseada em eventos em seu ecossistema de e-commerce

Por Daniel Abib, Enterprise Solution Architect na AWS
e Jaime Nagase, Business Development Manager na AWS.

O Grupo Primo é uma empresa brasileira fundada em 2020 pelos empreendedores e influenciadores de educação financeira Thiago Nigro e Bruno Perini, com sede em Barueri, São Paulo.

Diversas unidades de negócio fazem parte do ecossistema empresarial, como a plataforma de educação financeira “Finclass”, a casa de análise e recomendação de investimentos “Spiti”, a gestora de recursos “Grão”, a consultoria financeira “Portfel” – dentre muitas outras.

Desde sua fundação o grupo vem crescendo rapidamente se consolidando como um dos maiores ecossistemas de educação e soluções financeiras do país, inclusive Thiago Nigro e suas empresas têm sido destaque em diversos veículos de mídia.

A audiência do grupo é de aproximadamente 20 milhões de brasileiros, que consomem conteúdos gratuitos nas plataformas sociais, e que aos poucos vão avançando no funil se tornando clientes consumindo produtos das unidades de negócio mencionadas. Como destaque vale mencionar que dois podcasts da casa figuram no top 3 de podcasts mais ouvidos do país na categoria de negócios (Primocast & Os Sócios)

Para permitir que todas as empresas do grupo ofereçam seus produtos, normalmente em formato de assinatura para seus clientes, os times de negócios e tecnologia trabalharam em conjunto para criar uma solução de e-commerce integrada, que atendesse as diversas empresas de forma independente, mas trazendo flexibilidade e agilidade na comercialização de serviços aos clientes.

Desafio de tecnologia para escalar e desacoplar sistemas

Cada área de negócio das empresas do grupo tem times de tecnologia independentes, com stacks de software diferentes, mas que no final do dia precisavam interagir com o sistema de e-commerce para oferecer serviços.

Para atender este tipo de cenário, o time de tecnologia elaborou uma estratégia de componentizar a arquitetura do e-commerce pensando em um modelo de integração construído em uma arquitetura baseada a eventos.

Este tipo de arquitetura pressupõe que produtores (áreas, times ou empresas do Grupo Primo) e consumidores de eventos (módulos do software de e-commerce) tenham um contrato de eventos definido, que especifica o formato, campos mandatórios, tipos, significado e a semântica dos eventos trocados. Se houver uma quebra de contrato entre produtores e consumidores de serviços, isso pode levar a problemas de integração e a um mau funcionamento da arquitetura.

No entanto, se uma quebra de contrato de eventos ocorrer, já que os desenvolvedores trabalham em times e estruturas diferentes, existem algumas estratégias que podem ser usadas para minimizar os impactos. Algumas dessas estratégias incluem:

  • Validação de eventos: o consumidor de eventos pode validar os eventos recebidos para garantir que eles estejam em conformidade com o contrato. Isso pode ajudar a evitar problemas de integração e a detectar quebras de contrato.
  • Versões de eventos: se ocorrer uma quebra de contrato, é possível criar uma nova versão do evento que atenda aos requisitos atualizados do contrato. Isso pode ajudar a garantir que os consumidores de eventos possam continuar a trabalhar com a arquitetura.
  • Resiliência de sistema: os consumidores de eventos podem ser projetados para serem resistentes a falhas e capazes de lidar com situações em que o contrato é quebrado. Por exemplo, um consumidor de eventos pode ser projetado para ignorar eventos que não estejam em conformidade com o contrato e continuar funcionando com os eventos subsequentes.
  • Monitoramento e logging: a implementação de um sistema de monitoramento e logging pode ajudar a detectar quebras de contrato, e isso pode ajudar a identificar a causa raiz do problema e permitir que os desenvolvedores trabalhem para corrigi-lo.

Dentre os mais variados serviços da AWS que podem apoiar o desenvolvimento de soluções baseados em eventos, como o Amazon EventBridge, o Amazon SNS, o Amazon Kinesis e o Amazon MSK, a equipe de TI do grupo escolheu o Amazon Simple Notification Service (SNS), que é um serviço gerenciado que fornece entrega de mensagens de produtores para consumidores em conjunto com o Amazon Simple Queue Service (SQS). Os produtores se comunicam de maneira assíncrona com os assinantes, produzindo e enviando mensagens para um tópico, que é um canal de comunicação e um ponto de acesso distribuindo as mensagens para outros tópicos.

Mas, mesmo assim, a quebra de contrato poderia acontecer. O que foi desenvolvido pela TI do Grupo Primo foi uma micro-aplicação responsável por controlar e validar contratos frente aos payloads enviados pelos produtores ao tópico de validação de eventos antes que estes sejam publicados no barramento de serviços dos sistemas destino como o e-commerce. Esta micro-aplicação é constituída de algumas funções AWS Lambda que controlam, dentre muitos parâmetros, o número de tentativas de entrega, realizam logging e rastreamento aberto dos eventos transacionados bem como redirecionam para filas de erros (dead letter queue) em caso de qualquer anomalia.

Adicionar uma DLQ pode ajudar a garantir que as mensagens que não atendem ao contrato definido não sejam perdidas ou ignoradas. Em vez disso, elas serão enviadas para uma fila separada, onde podem ser corrigidas e processadas posteriormente. Ao implementar uma fila de DLQ, certifique-se de que ela tenha políticas de retenção de mensagens adequadas e que o sistema de monitoramento e logging esteja configurado corretamente para rastrear os problemas da fila de DLQ.

Adicionar uma fila entre o tópico e o consumidor ajuda a controlar a concorrência e paralelismo de processamento permitindo o controle de throtlling.

O que o Grupo Primo conseguiu com esta abordagem?

O Grupo Primo conseguiu inovar e pensar em trazer uma arquitetura escalável e que traz a alta disponibilidade, implementando esta solução baseada em eventos.

Além disso, montaram um processo de validação de contratos de eventos entre as diversas empresas do grupo para que todos possam utilizar o novo sistema de e-commerce e oferecer os serviços para os clientes.

Ao utilizar uma arquitetura baseada em eventos conseguiram os seguintes benefícios:

  • Escalabilidade: Uma arquitetura baseada em eventos pode ser altamente escalável, permitindo que os componentes sejam adicionados ou removidos conforme necessário sem afetar o restante do sistema.
  • Redução de Custos: Com a abordagem escolhida pelo Grupo Primo é possível que largos volumes de eventos sejam trabalhados com baixo custo operacional.
  • Resiliência: Como os eventos são independentes uns dos outros, um componente que falha não afetará o restante do sistema, tornando a arquitetura mais resiliente.
  • Flexibilidade: Uma arquitetura baseada em eventos pode ser adaptada facilmente para novos requisitos ou para mudanças em requisitos existentes. Novos componentes podem ser adicionados ou removidos conforme necessário.
  • Desacoplamento: Como cada componente só precisa lidar com eventos específicos, a arquitetura é altamente desacoplada. Isso significa que um componente pode ser atualizado sem afetar outros componentes.
  • Integração: Uma arquitetura baseada em eventos permite que sistemas heterogêneos sejam integrados de forma eficiente, já que os eventos podem ser utilizados como uma forma comum de comunicação.
  • Monitoramento: Uma arquitetura baseada em eventos pode ser facilmente monitorada, já que todos os eventos são registrados e podem ser analisados para detectar possíveis problemas ou gargalos.
  • Reutilização: Uma arquitetura baseada em eventos pode incentivar a reutilização de componentes, já que cada componente só precisa lidar com eventos específicos e pode ser utilizado em diferentes contextos.
  • Desenvolvimento colaborativo: Uma arquitetura baseada em eventos permite que diferentes equipes trabalhem em diferentes partes do sistema, sem precisar ter conhecimento profundo de todos os componentes, uma vez que a comunicação é baseada em eventos.
  • Aumento de produtividade: A separação dos componentes em eventos pode aumentar a produtividade, permitindo que diferentes equipes trabalhem de forma independente em cada componente.
  • Adoção de novas tecnologias: Uma arquitetura baseada em eventos permite a adoção de novas tecnologias sem afetar o restante do sistema, pois cada componente é independente

 


Sobre os autores

Daniel Abib é Enterprise Solution Architect na AWS, com mais de 25 anos trabalhando com gerenciamento de projetos, arquiteturas de soluções escaláveis, desenvolvimento de sistemas e CI/CD, microsserviços, arquitetura Serverless & Containers e segurança. Ele trabalha apoiando clientes corporativos, ajudando-os em sua jornada para a nuvem.

https://www.linkedin.com/in/danielabib/

 

 

 

 

Jaime Nagase é Business Development Manager na AWS e é responsável por habilitar clientes da América Latina na jornada de serviços Serverless, em conjunto de estratégias de DevOps, SRE e transformação digital!

https://www.linkedin.com/in/jnagase/

 

 

 

 

João Vitor Miranda Santos é coordenador e tech-lead do time de desenvolvimento do Grupo Primo com sólida experiência em ambientes críticos de produção e escalabilidade – especialista serverless e um dos responsáveis pela arquitetura dos serviços hoje utilizados pela empresa para distribuição de serviço a mais de 200 mil clientes.

https://www.linkedin.com/in/joaomirandas/

 

 

 

 

Fabio Damião Fontes de Lima é desenvolvedor sênior backend com profunda experiência em ambiente produtivo. Atua como desenvolvedor e responsável por inúmeros serviços de comunicação assíncrona do grupo primo bem como desenhos arquiteturais complexos para larga escala.

https://www.linkedin.com/in/fabio-fontes-b00a23174/

 

 

 

 

Henrique Pires Lopes é desenvolvedor backend pleno e responsável por inúmeras aplicações produtivas do grupo primo, destaca-se proeminência na área de performance de aplicações em ambientes de missão crítica sendo fundamental para estratégia de desenvolvimento de aplicações do grupo primo como o projeto e-commerce.

https://www.linkedin.com/in/henriqueloopes/