Eseguire la migrazione di applicazioni Java ad Azure

Questo articolo offre una panoramica delle strategie consigliate per la migrazione di applicazioni Java ad Azure.

Questa guida alla migrazione è progettata per coprire i principali scenari di Java in Azure e per fornire suggerimenti e considerazioni generali per la pianificazione. Se si vuole discutere di uno scenario specifico di migrazione di app Java con il team di Microsoft Java in Azure, compilare il questionario seguente e un rappresentante vi contatterà.

Identificazione del tipo di applicazione

Prima di selezionare una destinazione cloud per l'applicazione Java, è necessario identificare il tipo di applicazione. La maggior parte delle applicazioni Java è di uno dei seguenti tipi:

Questi tipi vengono descritti nelle sezioni seguenti.

Applicazioni Spring Boot/JAR

Molte applicazioni più recenti vengono richiamate direttamente dalla riga di comando. Queste applicazioni gestiscono comunque le richieste Web, ma invece di basarsi su un server applicazioni per fornire la gestione delle richieste HTTP, incorporano la comunicazione HTTP e tutte le altre dipendenze direttamente nel pacchetto dell'applicazione. Queste applicazioni vengono spesso compilate con framework come Spring Boot, Dropwizard, Micronaut, MicroProfile, Vert.x e altri.

Queste applicazioni vengono compresse in archivi con l'estensione jar (file JAR).

Applicazioni Spring che usano moduli middleware Spring Cloud

Lo stile dell'architettura del microservizio è un approccio allo sviluppo di una singola applicazione come una suite di servizi di piccole dimensioni. Ogni servizio viene eseguito nel proprio processo e comunica usando meccanismi leggeri, spesso un'API di risorse HTTP. Questi servizi sono compilati in base alle funzionalità aziendali e possono essere distribuiti in modo indipendente da meccanismi di distribuzione completamente automatizzati. Esiste un minimo di gestione centralizzata di questi servizi, che possono essere scritti in linguaggi di programmazione diversi e usano tecnologie di archiviazione dei dati diverse. Tali servizi sono spesso compilati con framework come Spring Cloud.

Questi servizi vengono compressi in più applicazioni con l'estensione jar (file JAR).

Applicazioni Java EE

Le applicazioni Java edizione Enterprise (dette anche applicazioni J2 edizione Enterprise o, più di recente, Jakarta edizione Enterprise applicazioni) possono contenere alcuni elementi, tutti o nessuno degli elementi delle applicazioni Web. Queste applicazioni possono anche contenere e utilizzare molti più componenti, come definito dalla specifica di Jakarta edizione Enterprise.

Le applicazioni Java EE possono essere compresse come archivi con l'estensione ear (file EAR) o come archivi con l'estensione war (file WAR).

Le applicazioni Java edizione Enterprise devono essere distribuite in server applicazioni compatibili con Java edizione Enterprise (ad esempio Oracle WebLogic Server, IBM WebSphere, JBoss EAP, GlassFish, Payara e altri).

È possibile eseguire la migrazione delle applicazioni che si basano solo sulle funzionalità fornite dalla specifica Java EE, ovvero le applicazioni indipendenti dal server app, da un server applicazioni conforme a un altro. Se l'applicazione dipende da un server applicazioni specifico (dipendente dal server app), potrebbe essere necessario selezionare una destinazione del servizio di Azure che consenta di ospitare tale server applicazioni.

Applicazioni Web

Le applicazioni Web vengono eseguite all'interno di un contenitore Servlet. Alcune di queste applicazioni usano direttamente le API servlet, mentre molti usano altri framework che incapsulano le API servlet, ad esempio Apache Struts, Spring MVC, JavaServer Faces (JSF) e altri.

Le applicazioni Web vengono compresse in archivi con l'estensione war (file WAR).

Processi batch/pianificati

Alcune applicazioni sono progettate per essere eseguite brevemente, eseguire un carico di lavoro specifico e quindi terminare anziché attendere richieste o input dell'utente. A volte tali processi devono essere eseguiti una sola volta o a intervalli regolari e pianificati. In locale, i processi di questo tipo vengono spesso richiamati dal crontab di un server.

Queste applicazioni vengono compresse in archivi con l'estensione jar (file JAR).

Nota

Se l'applicazione usa un'utilità di pianificazione, ad esempio Spring Batch o Quartz, per eseguire le attività pianificate, è consigliabile eseguire tali attività all'esterno dell'applicazione. Se l'applicazione viene ridimensionata in più istanze nel cloud, lo stesso processo viene eseguito più di una volta. Inoltre, se il meccanismo di pianificazione usa il fuso orario locale dell'host, è possibile che si verifichi un comportamento indesiderato durante il ridimensionamento dell'applicazione tra le aree.

Selezione della destinazione del servizio di Azure di destinazione

Le sezioni seguenti illustrano quali destinazioni del servizio soddisfano i requisiti dell'applicazione e quali responsabilità comportano.

Griglia di opzioni di hosting

Usare la griglia seguente per identificare possibili destinazioni per un tipo di applicazione. Come si può notare, servizio Azure Kubernetes (AKS) e Azure Macchine virtuali supportano tutti i tipi di applicazioni, ma richiedono al team di assumere più responsabilità, come illustrato nella sezione successiva.

→ di destinazione

Tipo di applicazione ^
App
Service
Java SE
App
Service
Tomcat
App
Service
JBoss EAP
Azure
Spring
App
App contenitore di Azure Servizio Azure Kubernetes Le macchine
Computer
Applicazioni Spring Boot/JAR
Applicazioni Spring Cloud
Applicazioni Web
Applicazioni Java EE
Server applicazioni commerciali
(ad esempio Oracle WebLogic Server o IBM WebSphere)
Persistenza a lungo termine nel file system locale
Clustering delle applicazioni a livello di server
Processi batch/pianificati
Integrazione rete virtuale/Connettività ibrida
Disponibilità a livello di area di Azure Dettagli Dettagli Dettagli Dettagli Dettagli Dettagli Dettagli

Griglia di responsabilità continuative

Usare la griglia seguente per comprendere la responsabilità assegnata al team per ogni destinazione dopo la migrazione.

Le attività indicate con Azure vengono gestite interamente o principalmente da Azure. Il team è responsabile su base continua per le attività indicate con 👉. Si consiglia di implementare un processo solido e altamente automatizzato per soddisfare tutte queste responsabilità.

Nota

Questo non è un elenco completo di responsabilità.

→ di destinazione

Attività ^
App
Service
Azure
Spring
App
Azure
Contenitore
App
Servizio Azure Kubernetes Le macchine
Computer
Aggiornamento delle librerie
(compresa la correzione delle vulnerabilità)
👉 👉 👉 👉 👉
Aggiornamento del server applicazioni
(compresa la correzione delle vulnerabilità)
Azure Azure 👉 👉 👉
Aggiornamento di Java Runtime
(compresa la correzione delle vulnerabilità)
Azure Azure 👉 👉 👉
Attivazione degli aggiornamenti di Kubernetes
(eseguito da Azure con un trigger manuale)
N/D Azure Azure 👉 N/D
Ripristino di emergenza Azure Azure 👉 👉 Azure
Risoluzione delle differenze per le modifiche all'API Kubernetes non compatibili con le versioni precedenti N/D Azure 👉 👉 N/D
Aggiornamento dell'immagine di base del contenitore
(compresa la correzione delle vulnerabilità)
N/D Azure 👉 👉 N/D
Aggiornamento del sistema operativo
(compresa la correzione delle vulnerabilità)
Azure Azure Azure Azure1 👉
Rilevamento e riavvio delle istanze non riuscite Azure Azure Azure Azure 👉
Implementazione dello svuotamento e del riavvio in sequenza degli aggiornamenti Azure Azure Azure Azure 👉
Gestione dell'infrastruttura Azure Azure 👉 👉 👉
Monitoraggio e gestione degli avvisi 👉 👉 👉 👉

1 Alcuni aggiornamenti della sicurezza potrebbero richiedere riavvii del nodo, che non vengono eseguiti automaticamente. Per altre informazioni, vedere Applicare aggiornamenti della sicurezza e del kernel ai nodi Linux in servizio Azure Kubernetes (servizio Azure Kubernetes).

Se si distribuisce il contenitore servlet (ad esempio Spring Boot) come parte dell'applicazione, è necessario considerarlo come una libreria e, di conseguenza, è sempre responsabilità dell'utente.

Verifica della connettività locale

Se l'applicazione deve accedere ai servizi locali, è necessario effettuare il provisioning di uno dei servizi di connettività di Azure. Per altre informazioni, vedere Scegliere una soluzione per la connessione di una rete locale ad Azure. In alternativa, è necessario effettuare il refactoring dell'applicazione per usare le API disponibili pubblicamente esposte dalle risorse locali.

Prima di avviare qualsiasi migrazione, è necessario completare questa operazione.

Inventario della capacità corrente e dell'utilizzo delle risorse

Documentare l'hardware dei server di produzione correnti oltre al numero medio e massimo di richieste e all'utilizzo delle risorse. Queste informazioni saranno necessarie per effettuare il provisioning delle risorse nella destinazione del servizio.

Indicazioni sulla migrazione

Usare le griglie seguenti per trovare indicazioni sulla migrazione in base al tipo di applicazione e alla destinazione del servizio di Azure di destinazione.

Applicazioni Java

Usare le righe seguenti per trovare il tipo di applicazione Java e le colonne per trovare la destinazione del servizio di Azure che ospiterà l'applicazione.

Per eseguire la migrazione di un'app JBoss EAP a Tomcat nel servizio app, convertire prima l'app Java EE in app Web Java (servlet) in esecuzione in Tomcat, quindi seguire le istruzioni indicate di seguito.

Se si vuole eseguire la migrazione di un'app Web in Tomcat ad Azure Spring Apps, convertire prima l'app in applicazioni Spring Cloud, quindi seguire le indicazioni indicate di seguito.

→ di destinazione

Tipo di applicazione ^
App
Service
Java SE
App
Service
Tomcat
App
Service
JBoss EAP
Azure
Contenitore
App
Azure
Spring
App
Servizio Azure Kubernetes Le macchine
Computer
Spring Boot/
Applicazioni JAR
N/D N/D N/D N/D indicazioni N/D N/D
Spring Cloud/
applications
N/D N/D N/D N/D indicazioni indicazioni
pianificato
indicazioni
pianificato
Applicazioni Web
su Tomcat
N/D indicazioni N/D indicazioni indicazioni indicazioni indicazioni
pianificato

Applicazioni Java EE

Usare le righe seguenti per trovare il tipo di applicazione Java EE in esecuzione in un server app specifico. Usare le colonne per trovare la destinazione del servizio di Azure che ospiterà l'applicazione.

→ di destinazione

Server app ^
App
Service
Java SE
App
Service
Tomcat
App
Service
JBoss EAP
Azure
Contenitore
App
Azure
Spring
App
Servizio Azure Kubernetes Le macchine
Computer
WildFly/
JBoss AS
N/D N/D indicazioni N/D N/D indicazioni indicazioni
pianificato
Oracle WebLogic Server N/D N/D indicazioni N/D N/D indicazioni indicazioni
IBM WebSphere N/D N/D indicazioni N/D N/D indicazioni indicazioni
pianificato
Red Hat JBoss EAP N/D N/D indicazioni N/D N/D indicazioni indicazioni

Vedi anche