Skip to content

Instantly share code, notes, and snippets.

@vinicius-oa
Last active March 5, 2025 22:48
Show Gist options
  • Save vinicius-oa/e150f16da99a9d678a854ae027f49f43 to your computer and use it in GitHub Desktop.
Save vinicius-oa/e150f16da99a9d678a854ae027f49f43 to your computer and use it in GitHub Desktop.
Asyncio para o resgate.

Asyncio para o resgate

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment