Situação (antes da nossa atuação)
O time de Previdência operava uma série de APIs responsáveis por operações críticas como compras, consultas de propostas e movimentações em fundos. Essas interfaces sustentavam o core de atendimento da área, mas começaram a sofrer com limitações diante do crescimento acelerado de usuários e transações.
A infraestrutura era híbrida: parte dos serviços já havia migrado para a nuvem, enquanto outros ainda rodavam on-premise. Esse cenário, somado à multiplicidade de APIs e à alta dependência de serviços externos — fora do domínio do time de Previdência —, tornava a operação complexa e expunha o sistema a diversos pontos de falha.
Embora os projetos fossem tecnicamente separados, com responsabilidades bem definidas, o ecossistema como um todo apresentava forte interdependência. O uso intensivo de bancos distintos, acoplamentos contextuais e o crescente volume de dados geravam desafios significativos de performance, estabilidade e evolução arquitetural.
Implicações
As limitações de escalabilidade do ambiente híbrido comprometiam o cumprimento dos SLAs em momentos de alta demanda, principalmente em fluxos sensíveis como consultas de propostas e movimentações financeiras. A latência elevada em endpoints estratégicos impactava diretamente a experiência do usuário final e a fluidez dos atendimentos.
A complexidade das queries SQL, combinada ao uso ineficiente de recursos de banco e à aplicação limitada de cache, resultava em sobrecarga de CPU e IO, aumentando os riscos de instabilidade e degradando o desempenho do sistema como um todo. Essa situação tornava especialmente crítica a operação em horários de pico.
Além disso, a dependência de múltiplos serviços externos e a ausência de uma arquitetura resiliente dificultavam a manutenção e a evolução dos sistemas. Isso elevava os custos operacionais e aumentava o risco de falhas em cadeia, comprometendo a confiabilidade da plataforma e a confiança dos parceiros de negócio.
O que fizemos
Iniciamos com uma reestruturação dos principais endpoints e das consultas SQL associadas, com foco na eficiência e redução de latência. Otimizamos instruções SQL, aplicamos índices direcionados e simplificamos joins, além de implementar paginação e projeções seletivas de campos, reduzindo significativamente os payloads e evitando overfetching.
Desenvolvemos uma camada de cache adaptativo, capaz de identificar padrões de requisições com filtros dinâmicos e armazenar os resultados de alta frequência. Essa camada foi integrada a eventos de domínio, permitindo invalidações inteligentes e reduzindo o número de acessos repetitivos ao banco de dados.
Do ponto de vista arquitetural, trabalhamos no desacoplamento entre serviços e no aumento da resiliência do ecossistema. Introduzimos contratos bem definidos (DTOs e eventos), mecanismos de processamento assíncrono e estratégias como circuit breaker, retry e health checks contínuos. Isso reduziu as dependências diretas e aumentou a estabilidade em cenários adversos.
Também elaboramos um plano de escalabilidade e migração gradual para a nuvem. Definimos uma topologia elástica com uso de load balancers e auto-scale, e utilizamos infraestrutura como código para facilitar a replicação de ambientes. Por fim, ajustamos a comunicação com o banco, otimizando o schema e os parâmetros de execução para aproveitar melhor o cache de planos.
Entregáveis
- Endpoints críticos reestruturados, com redução significativa nos tempos de resposta.
- Camada de cache adaptativo em produção, diminuindo substancialmente o volume de consultas repetitivas ao banco.
- Arquitetura mais desacoplada, com código simplificado e serviços mais resilientes.
- Plano de escalabilidade validado, com diretrizes para transição progressiva do on-premise para a nuvem.
- Infraestrutura como código implementada, permitindo rápida replicação e consistência entre ambientes.
Feedbacks
O time de Previdência destacou o ganho de performance como um dos principais resultados do trabalho, classificando-o como “notável” em diferentes fluxos de negócio. Também relataram uma melhora visível na estabilidade dos sistemas e na fluidez das entregas após a implementação das soluções.
A percepção interna foi de avanço importante em maturidade técnica e operacional, com elogios à clareza das propostas e à condução das mudanças. A nova estrutura proporcionou mais confiança para lidar com picos de demanda e impulsionou discussões sobre futuras evoluções da arquitetura.