Talvez nunca tenha sido tão essencial como nos dias de hoje a preocupação em garantir um processo de modernização contínua. A velocidade que se lança novos frameworks, linguagens e tecnologias é assustadora e, simplesmente jogar todos sistemas fora e refazê-los, não é uma opção viável. (E nem deveria).
Neste Eximia Talks, Fernando Paiva, juntamente com o engenheiro de software Bruno Joaquim e o consultor Gabriel Kohlrausch, falam sobre os desafios de se modernizar os sistemas legados nas corporações, compartilhando suas experiências vividas na prática.
Logo no início da conversa, Gabriel destaca a importância de existir um plano de modernização com motivações e resultados explícitos. Pois, infelizmente, ainda é comum a motivação ser focada apenas na atualização da stack de tecnologia ou o desejo de utilizar um estilo arquitetural da moda como microsserviços, por exemplo. Embora a modernização possa passar por esse caminho, essa não deveria ser razão suficiente para sustentar esse plano.
A recomendação direta neste caso é mapear os objetivos de negócio e atributos de qualidade que precisam ser atingidos antes mesmo de iniciar essa jornada de modernização. Garantindo que se tem explícito como esse trabalho vai ajudar a melhorar o resultado da empresa.
Outro ponto importante destacado está relacionado aos critérios para definir o que fazer primeiro na hora de modernizar. Fernando e Bruno sinalizaram que um bom indicativo pode ser o volume de dívidas técnicas que se tem mapeado e quais os “juros” de cada uma delas. O propósito é garantir que se priorize aquilo que tende a trazer mais resultado com o menor custo. Além dessa abordagem, contar com métricas do processo, como cycle time e a vazão do time dos times de desenvolvimento também podem ser um bom indicador para definir onde seu ecossistema carece de mais intervenção.
Fernando também alertou que, em sua vivência prática, em diferentes projetos de modernização, estratégias “big bang” geralmente possuem um risco muito alto e tendem a trazer resultados desastrosos. Por essa razão é recomendável considerar um padrão de estrangulamento que, além de simplificar o processo, traz grandes benefícios em diminuir o risco, através de uma abordagem incremental.
Mesmo utilizando padrões de estrangulamento, uma decisão relevante a ser tomada será a respeito da granularidade de cada um dos serviços novos que estão sendo criados. Gabriel chamou a atenção para tomarmos cuidado com o tamanho desses serviços. Um ecossistema pulverizado implica em custos adicionais que possivelmente você não necessita.
Na sequência, o Bruno explanou caminhos que ele tem utilizado para realizar o estrangulamento de sistemas monolíticos legados. Em sua visão, o primeiro passo está em definir os contextos, delimitados através de uma abordagem baseada em Domain Driven Design. Isso ajuda a evitar anti-patterns como “serviços baseados em entidades”, mantendo a discussão focada no domínio da aplicação e próxima do especialista de negócio.
Independente da estratégia de modernização adotada, é um consenso que o banco de dados é um ponto crítico e pode facilmente representar um gargalo na hora da modernização. Isso se dá, pois à medida que novos serviços vão sendo construídos, eles precisam ter seu próprio banco de dados, mas ao mesmo tempo uma forma desacoplada de interagir com o legado, para garantir o nível de consistência adequado. Bruno apontou alguns caminhos:
As formas mais comuns de lidar com os dados do legado e do moderno são:
- Intervenção direta na base de código legado: Esta estratégia basicamente consiste em realizar alterações pontuais no legado com o objetivo publicar dados através de eventos/notificações, de preferência utilizando tecnologias assíncronas (broker de mensageria), para serem consumidos, processados e persistidos pelos novos serviços. Uma vantagem dessa abordagem ativa, é que a “intencionalidade” dos eventos produzidos é maior, pois são gerados em momentos onde são executadas as “regras de negócio” dentro do monolito, por exemplo, usuário cadastrado, pedido enviado, pedido cancelado, etc. Entretanto, dependendo da tecnologia utilizada no legado, essa estratégia pode ser inviabilizada por falta de bibliotecas compatíveis com novas tecnologias utilizadas como “ponte” entre os serviços. Também tem como desafio o risco de criar bugs em um sistema legado estável e, para ser razoável, precisa existir ainda, um time capaz de alterar e dar manutenção no legado.
- Integração de dados via CDC: Nessa abordagem passiva, os dados são capturados na “origem”, ou seja, tabelas do banco do monólito de interesse, são monitoradas para que as alterações que ocorram sejam capturadas e publicadas em forma de evento. Essa alternativa é uma ótima opção para casos onde o legado é “hostil” de ser alterado ou até casos onde a maior parte das regras de negócio são encontradas em procedures no banco de dados. A principal desvantagem dessa técnica é que as alterações capturadas, geralmente não refletem toda a informação necessária, sendo necessário, “escutar” diferentes tabelas para que o evento seja gerado com todas as informações necessárias, para poder ser integrado em outros sistemas. Neste post, mostramos algumas formas de implementação de técnicas de CDC.
- Consultas recorrentes a base de dados: Uma forma bastante simples que em caso de menor escala pode ser bastante útil, é criar um pooling que consultas a determinadas informações que precisamos monitorar. Sua principal vantagem é a facilidade de implementação. Porém, ela possui restrições para cenários com grande escala ou que a taxa de atualização seja muito alta.
A conclusão deste Eximia Talks é que se faz necessário um bom planejamento antes de iniciar a modernização e é altamente recomendado contar com pessoas que já tiveram experiência nesse tipo de trabalho. Também é um consenso, que abordagens incrementais tendem a ser mais interessantes que aquelas “big bang”, tanto para mitigar riscos, como para validar a própria estratégia de modernização adotada.
Vários dos temas abordados, ainda podem ser bastante detalhados e explorados. Se este é um tema que te interessa ou se ficou alguma dúvida, nos deixe saber nos comentários no youtube para que possamos continuar essa série do Eximia Talks sobre modernização de legado.