Na Zapay, as consultas de débitos veículares e FIPE eram originalmente síncronas, impactando a experiência do usuário. Fui encarregado de reformular essa arquitetura, tornando-as assíncronas para maior escalabilidade e eficiência. A maior complexidade estava na consulta da FIPE, que detalho a seguir.
Para isso, desenhei e implementei uma nova arquitetura baseada em MongoDB, RabbitMQ e asyncio:
- MongoDB para armazenamento eficiente dos resultados.
- RabbitMQ para filas de processamento assíncrono.
- asyncio para lidar com um alto volume de requisições simultâneas.
A nova implementação seguiu um fluxo otimizado: o Serviço A iniciava a consulta de débitos de forma assíncrona no Serviço B, que consumia as filas, processava a requisição e armazenava os resultados no MongoDB, tornando-os acessíveis para o cliente sem necessidade de novas chamadas repetitivas.
A consulta assíncrona da FIPE exigiu um refinamento adicional. Sendo baseada em um serviço externo gratuito com rate limit e envolvendo a recuperação de dados dos últimos 10 anos para cada veículo, houve um trade-off estratégico:
- Ajustar a taxa de requisições para evitar bloqueios e aceitar tempos de resposta maiores.
- Utilizar asyncio para enviar múltiplas requisições agressivamente, aproveitando o fato de que o servidor apenas negava temporariamente as conexões, mas não impunha bloqueios permanentes.
Após testes controlados, optei pela segunda abordagem, utilizando técnicas avançadas do módulo asyncio como .gather e .create_task. Para validar a escalabilidade, realizamos simulações com Locust, garantindo que o sistema suportasse a nova carga.
O impacto foi imediato: em menos de um mês, ambas as funcionalidades foram lançadas para os usuários. Após 1 mês e meio, registramos um aumento de 23% nas vendas, comprovando a eficácia da nova arquitetura na conversão de usuários e melhoria da experiência geral.