Simplifique a refatoração de monólitos para microsserviços com AWS e vFunction

Refactoring Effort diagram with vFunction Modernization Hub
Amir Rapson April 21, 2022

Com a estimative de que 80% dos sistemas de negócios do mundo ainda não estão prontos para a nuvem, os executivos começaram a exigir iniciativas para modernizar suas aplicações legadas para a nuvem. Essas aplicações legadas geralmente são grandes sistemas monolíticos com anos ou décadas de dívida técnica acumulada, tornando-as difíceis de mudar, caras e arriscadas para dimensionar, sobrecarregando a capacidade de inovação de uma organização.

Para casos de uso simples, algumas equipes começam a modernizar sua pilha legada re-hospedando algumas aplicações em uma plataforma de nuvem como a AWS. Embora o re-hosting de uma aplicação na AWS possa trazer reduções de custos imediatas, os clientes ainda precisam gerenciar e manter essas aplicações, que geralmente são compostas de serviços fortemente acoplados que são difíceis de alterar e enfrentam riscos de efeitos downstream.

No entanto, para monólitos legados muito grandes e complexos, as empresas rapidamente se deparam com um muro, caso façam apenas a re-hospedagem. Simplificando, quanto mais linhas de código, classes e interdependências, menos valor obteremos com a mudança. Para ganhar agilidade, essas aplicações devem ser modularizadas, e isso significa refatorar, rearquitetar ou até mesmo reescrever aplicações legadas críticas para que elas se tornem cloud-native.

Overview da Solução: Analisar, selecionar e decompor serviços

O AWS Migration Hub Refactor Spaces é uma plataforma de modernização para desenvolvedores que trabalham com aplicações que não são nativas da nuvem ou que estão no meio de suas jornadas para serem cloud-native.

O AWS Refactor Spaces fornece a arquitetura base para refatoração incremental de aplicações para microsserviços na AWS, reduzindo o trabalho pesado de construir e operar a infraestrutura da AWS para refatoração incremental ou iterativa. Você pode usar o Refactor Spaces para ajudar a reduzir o risco ao evoluir aplicações para microsserviços ou estender aplicações existentes com novos recursos escritos em microsserviços.

A vFunction, uma Parceira AWS, fornece uma plataforma orientada por IA para desenvolvedores e arquitetos, que transforma de forma inteligente e automática aplicações Java monolíticas complexas em microsserviços, restaurando a velocidade da engenharia e otimizando os benefícios da nuvem. Projetada para eliminar as restrições de tempo, risco e custo da modernização manual de aplicações de negócios, a vFunction oferece um modelo de fábrica escalável e repetível, desenvolvido especificamente para a modernização nativa da nuvem.

Usar a vFunction Platform e o AWS Refactor Spaces juntos pode resolver os desafios duplos de decompor aplicações monolíticas em microsserviços e, em seguida, preparar, migrar e implementar de forma iterativa e segura essas aplicações de microsserviço em ambientes AWS. Isso permite que as empresas dêem nova vida a suas aplicações legadas e refatorem códigos antigos para novos ambientes de nuvem.

Arquitetos e desenvolvedores de sistemas legados começam com o vFunction, que analisa a complexidade de aplicações monolíticas usando automação, inteligência artificial (IA) e métodos de análise patenteados, permitindo que os arquitetos automatizem e acelerem a rearquitetura e reescrita de suas aplicações Java legadas em microsserviços.

Base Report – Análise estática para calcular a dívida técnica

assessment hub base report
Base Report do vFunction Assessment Hub

Poucos minutos após a instalação do vFunction, vemos o vFunction Base Report (imagem acima). Usando dados de análise estática, o vFunction usa algoritmos de machine learning para calcular a dívida técnica e quantificá-la. O vFunction permite que arquitetos e desenvolvedores comecem a construir um caso de negócios para modernização. O objetivo principal do Base Report é ajudar as partes interessadas a tomar uma decisão informada sobre quais aplicações e serviços priorizar para modernização.

Na plataforma vFunction, a dívida técnica é calculada observando a complexidade, calculada com base no número de interdependências emaranhadas que refletem o acoplamento rígido entre os domínios de negócios, e o risco, calculado pelo comprimento das cadeias de dependência de classe que aumentam o impacto das alterações em qualquer parte do sistema. Como resultado, a vFunction é capaz de determinar o “Custo da Inovação”, que é uma métrica que revela quanto por dólar investido é necessário simplesmente para gerenciar a dívida técnica do seu sistema, em vez de inovar e criar novas funcionalidades. Nesse caso, a empresa terá que gastar US$ 2,80 (x2,8) para atingir US$ 1,00 em inovação. A métrica pós-refatoração mostra que, ao abordar apenas as 10 principais classes de dívida, isso pode ser reduzido para US$ 2,20 (x2,2).

Refactoring Effort – Análise dinâmica para determinar prioridades

Refactoring Effort diagram with vFunction Modernization Hub
Refactoring Effort Radar no vFunction Modernization Hub

Agora podemos ver a análise de esforço de refatoração na imagem acima. Além da análise estática realizada anteriormente, o vFunction agora executa uma análise dinâmica patenteada que aproveita a IA para criar uma representação do esforço necessário para refatorar a aplicação.

Esses parâmetros são baseados na análise vFunction utilizando algoritmos de agrupamento e teoria de grafos para medir pontuações de complexidade com base em: 

  • Exclusividade de classes
  • Exclusividade de recursos
  • Topologia de serviço
  • Porcentagem de Infra
  • Porcentagem extraída

Exclusividade de classes

A Exclusividade de Classe refere-se ao percentual de classes exclusivas para serviços específicos. Uma pontuação de exclusividade de classe alta significa que a maioria dos serviços contém domínios inteiros, indicando contextos mais limitados e menos interdependências.

Exclusividade de recursos

Exclusividade de recursos refere-se à porcentagem de recursos de aplicações – como Java beans, tabelas de banco de dados, sockets e arquivos – que são exclusivos dos serviços. Semelhante à exclusividade de classe, uma pontuação alta de exclusividade de recurso indica que o domínio está encapsulado no serviço e que há restrições limitadas para extração.

Topologia de serviço

A Topologia de Serviço refere-se à complexidade das chamadas de serviço a serviço necessárias para a execução da aplicação. Nesse caso, queremos uma pontuação de topologia de serviço mais baixa, o que indica menos vibração e sobrecarga de comunicação entre os serviços. Em algumas aplicações, é necessário adicionar mais complexidade à comunicação entre os serviços para aumentar a exclusividade de classes e recursos. Esta é uma decisão que os arquitetos serão obrigados a tomar em muitas aplicações complexas. 

Pontuação percentual de Infra

Porcentagem de infra refere-se ao número de classes gerais que o vFunction recomenda que sejam colocadas em uma biblioteca comum. Uma pontuação percentual de infra alta indica uma quantidade baixa de classes de infra encontradas em bibliotecas comuns, o que nos ajuda a evitar uma relação alta entre serviços e limita a dívida técnica.

Porcentagem extraída

A Porcentagem Extraída refere-se à porcentagem de classes que podem ser removidas com segurança do monólito com base no plano de refatoração de destino. Uma alta porcentagem aqui indica que será possível eliminar qualquer remanescente da aplicação monolítica original.

Usando essas métricas pontuadas acima, podemos entrar no painel Analysis (também conhecido como vFunction Studio) na vFunction Platform para visualizar os serviços exatos identificados, com detalhamento para revisar melhor a análise.

service creation
O painel Analysis no vFunction Modernization Hub permite mesclar, dividir e analisar diferentes serviços

Na imagem acima, estamos vendo uma aplicação de exemplo chamada Order Management System (OMS). Esta imagem mostra uma representação visual dos serviços e classes nesta aplicação. O tamanho do círculo é determinado pelo número de classes em cada serviço. Os círculos verdes representam serviços com exclusividade de classe alta (mais de 67%) e os círculos azuis representam serviços com exclusividade de classe baixa (entre 33%-67%). Quanto maior a exclusividade de classe, mais fácil será extraí-la em uma arquitetura de microsserviço – ela é menos fortemente acoplada e o número de interdependências é menor.

A interação adicional com a plataforma revela interdependências entre beans, objetos de sincronização, tabelas de banco de dados, transações de banco de dados e muito mais. Você pode detalhar um serviço específico para ver pontos de entrada e árvores de chamada, classes que foram encontradas pela análise dinâmica ou pela análise estática, recursos rastreados e classes de código morto. A plataforma permite refinar os limites dos serviços e determinar a arquitetura, enquanto recalcula automaticamente as métricas da arquitetura projetada. Em seguida, você pode extrair iterativamente qualquer serviço.

service extraction
Crie e extraia um serviço recém-configurado em JSON com o vFunction Modernization Hub

A imagem acima mostra a configuração de extração do vFunction de seu microsserviço atualizado para uma plataforma de destino e um repositório de origem. A plataforma então gera arquivos JSON legíveis por humanos que incluem todas as informações para criar o serviço com o código extraído do monólito original usando o utilitário Code-Copy do vFunction, que podemos executar em nosso terminal ou IDE.

Na próxima seção, veremos como usar seus serviços extraídos e usar o AWS Refactor Spaces para configurar e gerenciar a infraestrutura para testar, preparar e implantar a nova versão do seu serviço.

Visão geral da solução: implementação na AWS

Agora que analisamos a experiência da plataforma vFunction, vamos analisar mais a arquitetura da aplicação do exemplo após a extração do serviço e o início da modernização. 

O exemplo de sistema de gerenciamento de pedidos (OMS, na sigla em inglês) mencionado acima é uma aplicação Spring Framework legada em execução no Apache Tomcat 9 e implantada em uma instância AWS EC2. Na imagem abaixo, vemos uma arquitetura de sistema na qual a aplicação OMS monolítica original está sendo executada no Tomcat 9 (canto inferior direito).

AWS Refactoring 3

Usando o AWS Refactor Spaces, empregamos o Strangler Fig Pattern na aplicação OMS, decompondo-a em microsserviços com vFunction e implementando-a na AWS (canto superior direito). A partir de uma arquitetura anteriormente monolítica, dividimos o OMS em vários serviços implementados com Kubernetes no AWS Elastic Kubernetes Service (EKS) usando NGINX para expor a REST API. 

Criamos um proxy para a aplicação, serviços e rotas do OMS. Nesse caso, há dois serviços: um para o monolito original e outro representando o microsserviço extraído pelo vFunction e agora rodando no EKS com NGINX Ingress. Isso produz rotas padrão para o serviço que representa o monólito, juntamente com o caminho de URI que roteia as chamadas de API para o outro serviço do controlador.

No final, produzimos um gateway de API que roteia as chamadas de API para um balanceador de carga de rede e um gateway de trânsito. Parte do tráfego continua indo para o monólito em execução no EC2, onde temos os dados do produto e do inventário. Outro tráfego passa pelo NGINX – com a mesma URL, mas com uma rota diferente – para o outro controlador no EKS.

Conclusão – Comece a decompor seu monólito

Para concluir, as empresas que foram desafiadas a modernizar aplicações legadas altamente complexas em seu cenário de negócios agora podem iniciar sua jornada para a arquitetura nativa da nuvem de maneira metódica, iterativa e sem riscos.

Com a vFunction Platform para avaliar, analisar e extrair serviços do monólito, e com AWS Refactor Spaces para rotear e gerenciar o tráfego, arquitetos e desenvolvedores agora podem empregar o padrão Strangler Fig para decompor uma aplicação tradicional em serviços e rotear solicitações para dois destinos diferentes: o monolito original e os microsserviços recém-decompostos.

AWS

Isso parece uma boa opção para sua iniciativa de modernização? Entre em contato com a vFunction para saber mais sobre nossos produtos em uma sessão de demonstração com um de nossos engenheiros.