Migrar aplicativos Java para o Azure

Este artigo fornece uma visão geral das estratégias recomendadas para migrar aplicativos Java para o Azure.

Essas diretrizes de migração foram projetadas para abranger cenários predominantes de Java no Azure e fornecer sugestões e considerações de planejamento de alto nível. Se você quiser discutir um cenário específico de migração de aplicativo Java com a equipe do Microsoft Java no Azure, preencha o questionário a seguir e um representante entrará em contato com você.

Identificar o tipo do aplicativo

Antes de selecionar um destino de nuvem para seu aplicativo Java, você precisará identificar qual é o tipo do aplicativo. A maioria dos aplicativos Java são de um dos seguintes tipos:

Esses tipos são descritos nas seções a seguir.

Aplicativos Spring Boot/JAR

Muitos aplicativos mais recentes são invocados diretamente da linha de comando. Esses aplicativos ainda manipulam solicitações da Web, mas em vez de depender de um servidor de aplicativos para fornecer manipulação de solicitações HTTP, eles incorporam a comunicação HTTP e todas as outras dependências diretamente no pacote de aplicativos. Esses aplicativos são frequentemente criados com estruturas como Spring Boot, Dropwizard, Micronaut, MicroProfile, Vert.x e outros.

Esses aplicativos são empacotados em arquivos com a extensão .jar (arquivos JAR).

Aplicativos Spring que usam módulos de middleware Spring Cloud

O estilo de arquitetura de microsserviços é uma abordagem para desenvolvimento de um único aplicativo como um conjunto de pequenos serviços. Cada serviço é executado em seu próprio processo e se comunica usando mecanismos leves, geralmente uma API de recurso HTTP. Esses serviços são criados com base em recursos de negócios e são implantáveis independentemente por um maquinário de implantação totalmente automatizado. Há um mínimo de gerenciamento centralizado desses serviços, que podem ser escritos em diferentes linguagens de programação e usar diferentes tecnologias de armazenamento de dados. Esses serviços são frequentemente criados com estruturas como o Spring Cloud.

Esses serviços são empacotados em vários aplicativos com a extensão .jar (arquivos JAR).

Aplicativos Java EE

Aplicativos Java EE (também conhecidos como aplicativos J2EE ou, mais recentemente, aplicativos Jakarta EE) podem conter alguns, todos ou nenhum dos elementos de aplicativos Web. Esses aplicativos também podem conter e consumir muito mais componentes, conforme definido pela especificação Jakarta EE.

Os aplicativos Java EE podem ser empacotados como arquivos com a extensão .ear (arquivos EAR) ou como arquivos com a extensão .war (arquivos WAR).

Os aplicativos Java EE devem ser implementados em servidores de aplicativos compatíveis com Java EE (como Oracle WebLogic Server, IBM WebSphere, JBoss EAP, GlassFish, Payara e outros).

Os aplicativos que dependem apenas dos recursos fornecidos pela especificação Java EE (ou seja, aplicativos independentes de servidor de aplicativo) podem ser migrados de um servidor de aplicativos que esteja em conformidade para outro. Se o aplicativo for dependente de um servidor de aplicativos específico (dependente de servidor de aplicativos), talvez seja necessário selecionar um destino do serviço do Azure que permita hospedar o servidor de aplicativos.

Aplicativos Web

Os aplicativos Web são executados dentro de um contêiner Servlet. Alguns desses aplicativos usam APIs de servlet diretamente, enquanto muitos usam outras estruturas que encapsulam APIs de servlet, como Apache Struts, Spring MVC, JavaServer Faces (JSF) e outros.

Aplicativos Web são empacotados em arquivos com a extensão .war (arquivos WAR).

Trabalhos agendados/em lotes

Alguns aplicativos devem ser executados brevemente, executar uma carga de trabalho específica e, em seguida, sair em vez de esperar por solicitações ou entrada do usuário. Às vezes, esses trabalhos precisam ser executados uma vez ou em intervalos regulares agendados. No local, esses trabalhos são geralmente invocados do crontab de um servidor.

Esses aplicativos são empacotados em arquivos com a extensão .jar (arquivos JAR).

Observação

Se o aplicativo usar um agendador (como o Spring Batch ou o Quartz) para executar tarefas agendadas, é altamente recomendável que você fatore essas tarefas para serem executadas fora do aplicativo. Se seu aplicativo for dimensionado para várias instâncias na nuvem, o mesmo trabalho será executado mais de uma vez. Além disso, se o mecanismo de agendamento usar o fuso horário local do host, você poderá enfrentar um comportamento indesejável desse mecanismo ao dimensionar seu aplicativo entre regiões.

Selecionar o destino do serviço do Azure de destino

As seções a seguir mostram quais destinos de serviço atendem aos requisitos do aplicativo e quais responsabilidades eles envolvem.

Grade de opções de hospedagem

Use a grade a seguir para identificar possíveis destinos para seu tipo de aplicativo. Como você pode ver, o Serviço de Kubernetes do Azure (AKS) e as Máquinas Virtuais do Azure dão suporte a todos os tipos de aplicativo, mas exigem que sua equipe assuma mais responsabilidades, conforme mostrado na próxima seção.

Destino →

Tipo de aplicação ↓
Aplicativo
Serviço
Java SE
Aplicativo
Serviço
Tomcat
Aplicativo
Serviço
JBoss EAP
Azure
Spring
Aplicativos
Aplicativos de Contêiner do Azure AKS Máquinas
Virtuais
Aplicativos Spring Boot/JAR
Aplicativos Spring Cloud
Aplicativos Web
Aplicativos Java EE
Servidores de aplicativos comerciais
(como Oracle WebLogic Server ou IBM WebSphere)
Persistência de longo prazo no sistema de arquivos local
Clustering no nível do servidor de aplicativos
Trabalhos agendados/em lotes
Integração VNet/conectividade híbrida
Disponibilidade de região do Azure Detalhes Detalhes Detalhes Detalhes Detalhes Detalhes Detalhes

Grade de responsabilidade em andamento

Use a grade a seguir para entender a responsabilidade que cada destino coloca sobre a sua equipe após a migração.

As tarefas indicadas com Azure são gerenciadas inteiramente ou principalmente pelo Azure. Sua equipe é responsável continuamente pelas tarefas indicadas com 👉o . É recomendável implementar um processo robusto e altamente automatizado para atender a todas essas responsabilidades.

Observação

Essa não é uma lista exaustiva de responsabilidades.

Destino →

Tarefa ↓
Aplicativo
Serviço
Azure
Spring
Aplicativos
Azure
Contêiner
Aplicativos
AKS Máquinas
Virtuais
Atualizando bibliotecas
(incluindo a correção de vulnerabilidades)
👉 👉 👉 👉 👉
Atualizando o servidor de aplicativos
(incluindo a correção de vulnerabilidades)
Azure Azure 👉 👉 👉
Atualizando o Java Runtime
(incluindo a correção de vulnerabilidades)
Azure Azure 👉 👉 👉
Disparando atualizações do Kubernetes
(executado pelo Azure com um gatilho manual)
N/D Azure Azure 👉 N/D
Recuperação de desastre Azure Azure 👉 👉 Azure
Reconciliar alterações de API de Kubernetes não compatíveis com versões anteriores N/D Azure 👉 👉 N/D
Atualizar imagem base do contêiner
(incluindo a correção de vulnerabilidades)
N/D Azure 👉 👉 N/D
Atualizar o sistema operacional
(incluindo a correção de vulnerabilidades)
Azure Azure Azure Azure1 👉
Detectar e reiniciar instâncias com falha Azure Azure Azure Azure 👉
Implementar a reinicialização sem interrupção e com descarga para atualizações Azure Azure Azure Azure 👉
Gerenciamento de infraestrutura Azure Azure 👉 👉 👉
Monitoramento e gerenciamento de alertas 👉 👉 👉 👉

1 Algumas atualizações de segurança podem exigir reinicializações de nó, que não são feitas automaticamente. Para obter mais informações, consulte Aplicar atualizações de segurança e kernel a nós Linux no Serviço de Kubernetes do Azure (AKS).

Se você implantar o contêiner do servlet (como o Spring Boot) como parte de seu aplicativo, deverá considerá-lo uma biblioteca e, como tal, sendo sempre sua responsabilidade.

Garantir a conectividade local

Se seu aplicativo precisar acessar qualquer um dos seus serviços locais, você precisará provisionar um dos serviços de conectividade do Azure. Para obter mais informações, confira Escolher uma solução para conectar uma rede local ao Azure. Como alternativa, você precisará refatorar seu aplicativo para usar APIs disponíveis publicamente que seus recursos locais expõem.

Você precisa concluir esse esforço antes de iniciar qualquer migração.

Capacidade atual de inventário e uso de recursos

Documente o hardware dos servidores de produção atuais mais as contagens de solicitação média e de pico e o uso de recursos. Você precisará dessas informações para provisionar recursos no destino do serviço.

Diretrizes de migração

Use as grades a seguir para encontrar diretrizes de migração por tipo de aplicativo e por destino de serviço do Azure direcionado.

Aplicativos Java

Use as linhas abaixo para encontrar o tipo do seu aplicativo Java e as colunas para localizar o destino do serviço do Azure que hospedará seu aplicativo.

Se você desejar migrar um aplicativo JBoss EAP para o Tomcat no Serviço de Aplicativo, primeiro converta o aplicativo Java EE em aplicativos Web Java (servlets) em execução no Tomcat e depois siga as diretrizes indicadas abaixo.

Se você quiser migrar um aplicativo Web no Tomcat para os Aplicativos Spring do Azure, primeiro converta o aplicativo em aplicativos Spring Cloud e siga as orientações indicadas abaixo.

Destino →

Tipo de aplicação ↓
Aplicativo
Serviço
Java SE
Aplicativo
Serviço
Tomcat
Aplicativo
Serviço
JBoss EAP
Azure
Contêiner
Aplicativos
Azure
Spring
Aplicativos
AKS Máquinas
Virtuais
Spring Boot/
Aplicativos JAR
N/D N/D N/D N/D diretrizes N/D N/D
Spring Cloud/
de dimensionamento da Web
N/D N/D N/D N/D diretrizes diretrizes
planejado
diretrizes
planejado
Aplicativos Web
no Tomcat
N/D diretrizes N/D diretrizes N/D diretrizes diretrizes
planejado

Aplicativos Java EE

Use as linhas abaixo para localizar o tipo de aplicativo Java EE em execução em um servidor de aplicativo específico. Use as colunas para localizar o destino do serviço do Azure que hospedará seu aplicativo.

Destino →

Servidor de aplicativos ↓
Aplicativo
Serviço
Java SE
Aplicativo
Serviço
Tomcat
Aplicativo
Serviço
JBoss EAP
Azure
Contêiner
Aplicativos
Azure
Spring
Aplicativos
AKS Máquinas
Virtuais
WildFly/
JBoss AS
N/D N/D diretrizes N/D N/D diretrizes diretrizes
planejado
Oracle WebLogic Server N/D N/D diretrizes N/D N/D diretrizes diretrizes
IBM WebSphere N/D N/D diretrizes N/D N/D diretrizes diretrizes
planejado
Red Hat JBoss EAP N/D N/D diretrizes N/D N/D diretrizes diretrizes

Confira também