Como escalar um sistema legado com arquitetura orientada a eventos (sem reescrevê-lo)
Primeiro post de uma série sobre arquitetura orientada a eventos (EDA), construída em público a partir de um case fictício: a Faculdade Leal. Este post fica em nível de arquitetura — a implementação (Apache Camel, código dos consumers, etc.) vem nos posts seguintes, conforme for sendo construída. O problema Imagine que você é responsável pelo financeiro de uma faculdade grande. Todo mês, o…
A faculdade Leal enfrenta problemas com seu sistema legado, que gera faturas para milhares de alunos a cada mês. O processo demora cerca de 4 dias devido ao processamento linha a linha, sem expurgo de dados acumulados e falta de índices. Além disso, o usuário precisa fazer várias chamadas síncronas para o sistema legado e APIs externas, o que afeta a experiência do usuário.
Para resolver esses problemas, a faculdade adota uma arquitetura orientada a eventos (EDA). Nessa nova arquitetura, o processo de cálculo da fatura, geração do boleto e emissão da nota fiscal reagem a eventos, desacoplando-as entre si e do legado. Tudo isso é possível graças a um broker de mensageria, como o Apache Kafka, com eventos bem definidos.
Cada etapa do processo é tratada por um consumidor separado. Os consumidores responsáveis são:
1. Cálculo final da fatura: em vez de ser feito na solicitação do usuário, ele é executado durante a geração das faturas, para evitar atrasos causados em eventos como a falha da Prefeitura.
2. Persistência da fatura: um componente gera uma nova linha a cada cálculo, com data e hora, sem sobrescrever as anteriores. Isso permite consultas rápidas e um histórico completo para auditoria.
3. Geração do boleto: o boleto é gerado no clique do usuário, garantindo compatibilidade com diferentes métodos de pagamento.
4. Emissão da nota fiscal: caso a emissão falhe, a mensagem é redirecionada para uma fila de erros para tentativas de recuperação. Ao sucesso, a mensagem é enviada para a nota fiscal pronta.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.