Estrangulamento de aplicações legadas com .NET CORE + Debezium + KAFKA

Iratã Lopes
Guide Lab
Published in
3 min readMay 27, 2021

Apesar de indesejadas pelos times de desenvolvimento, aplicações legadas fazem parte da realidade das empresas, e se estão em produção fazem parte do negócio, de modo que em algum momento teremos que lidar com elas.

Assim, vou apresentar uma forma de enfrentar a questão, implementando o padrão do “estrangulamento de aplicações legadas”.

A fim de abordar o tema de forma objetiva, dividirei em 3 partes:

Parte 1 - Conceito e aplicabilidade
Parte 2 - Arquitetura
Parte 3 - Implementação

Parte 1/3 — Conceito e aplicabilidade

Os problemas de manter uma aplicação legada normalmente são: dificuldades de novas implementações, impossibilidade de escalar horizontalmente e alta dívida técnica. E o ponto principal é: como resolver esses problemas, sem correr o risco de parar a minha operação atual e escalar com as novas funcionalidades que precisam ser implementada?

Martin Fowler ao longo da sua carreira lidou com esse problema e apresentou como solução o padrão “Strangler Fig Application ou, em livre tradução, “estrangulamento de aplicações legadas”.

Inspirado em uma planta tropical, em inglês chamada “Strangler Fig”, foi que ele criou o padrão. Tal planta inicia seu crescimento nos galhos superiores de uma árvore e gradualmente vai descendo seus ramos pelo tronco até chegar ao solo e alcançar a raiz, quando enfim estrangula a árvore. A imagem abaixo ilustra como esse processo ocorre.

https://media.sciencephoto.com/image/c0033067/800wm
https://media.sciencephoto.com/image/c0033067/800wm

Ok, entendi o processo da árvore. Mas qual a relação com as aplicações legadas?

O conceito utilizado na criação do padrão das aplicações legadas é o mesmo que se constata em relação à árvore e a planta: substituição gradual. Ressalto desde já que existem diversas técnicas para implementação do padrão, no entanto, todas atentam para um substituição progressiva da aplicação legada pela nova aplicação, ou seja, nunca de forma imediata, como demonstrarei a seguir:

Compreendo… E como aplicar esse conceito?

Uma das estratégias para aplicar o conceito é adotar um processo por etapas:

1ª Etapa- Mapear as funcionalidades do legado: antes de querermos promover qualquer mudança devemos ter o conhecimento de como está nosso cenário atual. Em alguns cenários será difícil entender a funcionalidade olhando apenas para a forma que foi escrita a aplicação legada, e sua importância para o negócio poderá ser percebida apenas quando causar impacto pela sua ausência ou má implementação na nova aplicação, por isso é importante fazer esse trabalho em conjunto com área de negócio e o PO a fim de que a nova aplicação não perca nenhuma funcionalidade primordial.
2ª Etapa- Dividir e classificar: uma vez mapeadas as funcionalidades é importante divida-las por contexto de negócio. Com tal divisão será possível classificar o grau de complexidade de implementação e ordenar quais funcionalidades tem mais valor para o cliente final, a fim de priorizá-las na substituição gradual.
3ª Etapa- Criar novas aplicações: normalmente as aplicações legadas contém diversos contextos de negócio em uma única aplicação. No momento da criação de novas aplicações utilizando esse novo modelo, é oportuno separá-las por contextos de negócio, seguindo a arquitetura de micro serviços. Isto permitirá um maior ciclo de vida para as novas aplicações, e possibilitará a inserção de novas funcionalidades que eventualmente surjam.
4ª Etapa- Rotear: a partir do momento que existirem duas aplicações rodando com as mesma funcionalidades (legado e a nova) é possível utilizar a técnica de roteamento com proxys ou gateways, através da qual as requisições são recebidas pela nova aplicação, permitindo a gradual inutilização do legado, tornando-o obsoleto, mas não inexistente.

Observo que em equipes que trabalham com métodos ágeis essa estratégia se torna bem aderente, pois todo processo de substituição é feito dentro das sprints.

Conclusão

A finalidade desse padrão é desligar a aplicação legada por asfixia natural das funcionalidades de uma maneira gradual, desta forma priorizamos a substituição das funcionalidades de maior valor para o cliente final e diminuímos os riscos de implementação.

Referências

https://martinfowler.com/bliki/StranglerFigApplication.html
https://www.tiagotartari.net/estrangulamento-de-legado-na-pratica-com-codigo-criando-uma-um-servico-de-alta-performance/

--

--

Iratã Lopes
Guide Lab

MBA em Arquitetura de Soluções | Especialista de TI. Gosto e busco resolver problemas complexos com soluções simples.