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:
- Applicazioni Spring:
- Applicazioni Java EE
- Applicazioni Web
- Processi batch/pianificati
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 EE (dette anche applicazioni J2EE o, più di recente, applicazioni Jakarta EE) possono contenere alcuni, tutti o nessuno degli elementi delle applicazioni Web. Queste applicazioni possono anche contenere e utilizzare molti più componenti come definito dalla specifica Jakarta EE.
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 EE devono essere distribuite in server applicazioni conformi a Java EE (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 |
App contenitore di Azure | servizio Azure Kubernetes | Macchine virtuali |
---|---|---|---|---|---|---|
Applicazioni Spring Boot/JAR | ✔ | ✔ | ✔ | ✔ | ||
Applicazioni Spring Cloud | ✔ | ✔ | ✔ | ✔ | ✔ | |
Applicazioni Web (WAR) | ✔ | ✔ | ✔ | ✔ | ✔ | |
Applicazioni Java EE (WAR | ORECCHIO) | ✔ | ✔ | ✔ | ✔ | ||
Server applicazioni commerciali (ad esempio Oracle WebLogic Server o IBM WebSphere) |
✔ | ✔ | ✔ | |||
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 |
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 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 Contenitore App |
servizio Azure Kubernetes | Macchine virtuali |
---|---|---|---|---|
Aggiornamento delle librerie (compresa la correzione delle vulnerabilità) |
👉 | 👉 | 👉 | 👉 |
Aggiornamento del server applicazioni (compresa la correzione delle vulnerabilità) |
👉 | 👉 | 👉 | |
Aggiornamento di Java Runtime (compresa la correzione delle vulnerabilità) |
👉 | 👉 | 👉 | |
Attivazione degli aggiornamenti di Kubernetes (eseguito da Azure con un trigger manuale) |
N/D | 👉 | N/D | |
Ripristino di emergenza | 👉 | 👉 | ||
Risoluzione delle differenze per le modifiche all'API Kubernetes non compatibili con le versioni precedenti | N/D | 👉 | 👉 | N/D |
Aggiornamento dell'immagine di base del contenitore (compresa la correzione delle vulnerabilità) |
N/D | 👉 | 👉 | N/D |
Aggiornamento del sistema operativo (compresa la correzione delle vulnerabilità) |
1 | 👉 | ||
Rilevamento e riavvio delle istanze non riuscite | 👉 | |||
Implementazione dello svuotamento e del riavvio in sequenza degli aggiornamenti | 👉 | |||
Gestione dell'infrastruttura | 👉 | 👉 | 👉 | |
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 Connettere 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.
→ di destinazione Tipo di applicazione ^ |
App Service Java SE |
App Service Tomcat |
App Service JBoss EAP |
Azure Contenitore App |
servizio Azure Kubernetes | Macchine virtuali |
---|---|---|---|---|---|---|
Spring Boot/ Applicazioni JAR |
N/D | N/D | N/D | N/D | N/D | N/D |
Spring Cloud/ applications |
N/D | N/D | N/D | N/D | indicazioni pianificato |
indicazioni pianificato |
Applicazioni Web su Tomcat |
N/D | indicazioni | N/D | 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 |
servizio Azure Kubernetes | Macchine virtuali |
---|---|---|---|---|---|---|
WildFly/ JBoss AS |
N/D | N/D | indicazioni | N/D | indicazioni | indicazioni pianificato |
Oracle WebLogic Server | N/D | N/D | indicazioni | N/D | indicazioni | indicazioni |
IBM WebSphere | N/D | N/D | indicazioni | N/D | indicazioni | indicazioni pianificato |
Red Hat JBoss EAP | N/D | N/D | indicazioni | N/D | indicazioni | indicazioni |