COMO ESCALAMOS UM SISTEMA C# QUE LEVAVA 1H PARA PROCESSAR 1.000 OPERAÇÕES E REDUZIMOS PARA 10 MINUTOS

Recentemente eu e minha equipe entregamos um projeto desafiador em que revisitamos um sistema legado escrito em C#. Na versão antiga, todo o backend estava encapsulado num monólito .NET Framework, com algumas rotas expostas via WCF e hospedado atrás de um load balancer que distribuía tráfego para um grupo fixo de três instâncias EC2, sem qualquer mecanismo de auto scaling. Para completar, toda a leitura e escrita ocorriam no mesmo processo e os dados eram persistidos num SQL Server compartilhado — um cenário perfeito para bloqueios de banco de dados e filas de espera intermináveis sempre que múltiplas operações acessavam as mesmas tabelas.

Decidimos redesenhar completamente esse fluxo crítico. Em vez de processar tudo de uma vez, extraímos a etapa de ingestão para containers Docker, que rodam em clusters independentes e escalam horizontalmente com facilidade. Cada container agora envia lotes de registros diretamente para uma fila SQS, garantindo buffer, retries automáticos e desacoplamento total entre quem produz os dados e quem os consome.

No lado de consumo, migramos o processamento pesado para funções AWS Lambda acionadas pela própria fila SQS. Essas lambdas cuidam de todas as regras de negócio, transformações e enriquecimento de dados, aproveitando a elasticidade serverless para disparar dezenas ou centenas de instâncias em paralelo, conforme a demanda. O modelo “pague pelo que usar” também trouxe uma redução significativa de custos operacionais.

Após o processamento, os resultados são persistidos em um banco relacional no Amazon RDS. Aqui, aproveitamos transações ACID para manter a integridade e eliminamos a antiga disputa por locks, já que cada execução Lambda escreve em instâncias otimizadas para carga alta, sem interferir umas nas outras. Essa separação clara entre leitura, processamento e armazenamento foi fundamental para quebrar os gargalos históricos.

Conclusão? O impacto foi impressionante: o tempo total para processar 1.000 operações caiu de aproximadamente uma hora para apenas dez minutos. Além do ganho de performance, conquistamos maior resiliência — se um worker falha, a mensagem permanece na fila até ser reprocessada — e flexibilidade para evoluir cada componente sem afetar o restante da aplicação.

Essa migração reforçou uma lição que talvez seja a mais importante: arquitetura bem pensada faz tanta diferença quanto a tecnologia em si. Independente de escolher C#, Java, Go ou Node.js, é o desenho desacoplado — filas, containers, serverless e bancos dedicados — que garante throughput alto, latência previsível e manutenção simplificada.

Qual foi o seu papel nessa migração?

Pq é um belo texto escrito por IA pronto para ir para o Linkedisney!

Acho engraçado, as pessoas tem medo de usar IA no dia a dia. "Ai é um texto gerado por IA", é melhor usar IA pra gerar um texto e compartilhar experiências com a comunidade do que ficar enchendo o saco de quem faz isso, mas obvio, falar mal é bem mais fácil. Mas respondendo sua pergunta: Participei ativamente na criação das rotas usadas no docker bem como a integração com o SQS para processamento no lambda (os containers Docker mandavam diretamente no SQS via AWS SDK com as credenciais gerenciadas por IAM). A parte de apresentação com a área de negócio também foi feita por mim.
Amigo, a questão é que se você não consegue descrever o que você fez usando suas próprias palavras, é porque você não consegue nem entender direito o que você fez.
E quem disse que não consigo descrever? Só porque usei uma ferramenta pra ganhar tempo escrevendo um post não quer dizer que não sei a fundo do que se trata. Acha que a ferramenta pegou as informações de onde pra escrever o artigo? São pessoas com pensamentos assim que serão os primeiros a perder emprego pra IA.
Amigo, eu sou Dev .NET com uma caralhada de anos de experiência. Já participei de migrações como essa que você descreveu e elas são extremamente complexas, envolvem muita habilidade técnica e política para serem concluídas. As pessoas que participam desse tipo de coisa e fazem acontecer têm muito mais para contar sobre suas experiências do que um texto genérico gerado por alguma LLM. E quem souber contar direito essa história nunca fica sem trabalho e muito menos vai "perder emprego para a IA" ;) Ah, e na minha opinião, a IA vai tirar o emprego é de quem depende dela para tudo! xD
E mesmo assim tá queimando tempo enchendo o saco de quem só tá querendo compartilhar informação com a comunidade kkkkkkkkkkkk genial
Se você gastasse o tempo que gastou respondendo pra ele, votando, chamando gente pra participar, você fizesse um texto mais completo que realmente ajudasse as pessoas será muito relevante e receberia votos positivos muito merecidos, eu mesmo, apesar de 40 anos de experiência que já fiz um processamento cair de 3 meses para poucos minutos poderia ser privilegiado da informação que colocou. Ser de IA ou não, pouco importa, o problema é que não ajuda de fato, não mostra o que fez, porque estava tão ruim, como chegou em uma boa estratégia, conte sua história. Se não tem tempo para fazer isso, ok, aí melhor não postar nada porque a forma postada não acrescenta algo bom, só informa oq ue você fez em termos muito genéricos.
Agora sim estamos falando de algo construtivo. Embora eu não concorde com tudo que foi dito, considero sua visão bastante válida. Reconheço que poderia ter me aprofundado mais em alguns pontos, mas também estou começando a interagir na comunidade agora através de publicações próprias ou por comentários (não só no TabNews, mas também no LinkedIn e em alguns servidores do Discord). É natural que no início, nem tudo que eu queira compartilhar seja extremamente relevante ou agregue tanto valor,mas ainda estou aprendendo. Da mesma forma que meu texto pode parecer genérico ou superficial, comentários como "foi gerado por IA" também não contribuem para o debate. Quero críticas construtivas e aprender com quem realmente busca somar.
A questão é que está nas regras que você aceitou ao entrar na plataforma que precisa colocar conteúdo relevante, algo que realmente ajude outras pessoas. Isso deveria ser um padrão para qualquer postagem na internet, mas a maioria não tem regras para isso, aqui tem. Sempre é possível editar e melhorar o conteúdo para atingir mais pessoas.
O conceito de relevante é meio questionavel aqui. Se uma pessoa iniciante lê esse artigo com toda certeza terá uma relevância maior do que para algum sênior que ler o artigo. E sim, é possível editar e melhorar, mas até usando essa discussão toda como exemplo, não seria interessante ter todo esse histórico até para entender os principais pontos de melhoria do artigo? Na minha visão isso seria um conteúdo bem relevante, alias, essa troca de ideias é o que gera a relevância de um assunto.
O cara vem no TabNews atormentar o mano que fez um trampo daora só porque usou IA pra escrever o texto. Cê tem tempo de sobra em irmão.

Cara, que vendor-lockin foi esse ! Arrepiei só de pensar que agora você está preso a um fornecedor de nuvem sem necessidade. Você não disse no artigo o porquê dessa decisão, talvez tenha motivos muito fortes para isso. EU, só por um bom motivo trocaria um cenário on-premise, por nuvem !

Excelente post!

Poderia compartilhar do que se tratava a aplicação e qual era o trabalho pesado que tinha que rodar? Se puder é claro xD

Era uma aplicação interna que registrava todas as operações que a área de negócio fechava com o cliente. A grosso modo sempre que cliente finalizava um contrato (ex: uma compra de ação) o sistema entrava em ação para executar várias validações pesadas de posição, saldo, regras de compliance, documentação, etc. Na arquitetura antiga, tudo era feito de forma síncrona, cada contrato rodava uma validação de cada vez — validação de posição, depois validação de saldo, depois compliance, e assim por diante. No design novo a gente paralelizou essas validações via lambda, que virou uma tarefa independente.