Migrera Java-program till Azure

Den här artikeln innehåller en översikt över rekommenderade strategier för att migrera Java-program till Azure.

Den här migreringsguiden är avsedd för vanliga situationer där du använder Java i Azure. Dessutom innehåller den förslag och överväganden angående den övergripande planeringen. Om du vill diskutera ett specifikt Java-appmigreringsscenario med Microsoft Java i Azure-teamet fyller du i följande enkät så kontaktar en representant dig.

Identifiera programtyp

Innan du väljer ett molnmål för ditt Java-program måste du identifiera dess programtyp. De flesta Java-program är en av följande typer:

Dessa typer beskrivs i följande avsnitt.

Spring Boot-/JAR-program

Många nyare program anropas direkt från kommandoraden. Dessa program hanterar fortfarande webbförfrågningar men i stället för att använda en programserver för hantering av HTTP-begäranden bygger de in HTTP-kommunikation och alla andra beroenden direkt i programpaketet. Sådana program har ofta skapats med ramverk som till exempel Spring Boot, Dropwizard, Micronaut, MicroProfile, Vert.x med mera.

Dessa program paketeras i arkiv med tillägget .jar (JAR-filer).

Spring-program som använder Spring Cloud-mellanprogrammoduler

Arkitekturstilen för mikrotjänster är en metod för att utveckla ett enda program som en uppsättning små tjänster. Varje tjänst körs i sin egen process och kommunicerar med hjälp av enkla mekanismer, ofta ett HTTP-resurs-API. De här tjänsterna är utformade omkring verksamhetens kapacitet och kan distribueras oberoende med hjälp av en helt automatiserad distributionsmaskin. Det finns bara ett minimum av centraliserad hantering av dessa tjänster, som kan skrivas på olika programmeringsspråk och använda olika datalagringstekniker. Sådana tjänster skapas ofta med ramverk som Spring Cloud.

Dessa tjänster paketeras i flera program med tillägget .jar (JAR-filer).

Java EE-program

Java EE-program (kallas även J2EE-program eller, på senare tid, Jakarta EE-program) kan innehålla vissa, alla eller inget av elementen i webbprogram. Dessa program kan också innehålla och använda många fler komponenter som definieras av Jakarta EE-specifikationen.

Java EE-program kan paketeras som arkiv med filnamnstillägget .ear (EAR-filer) eller som arkiv med filnamnstillägget .war (WAR-filer).

Java EE-program måste distribueras till Java EE-kompatibla programservrar (till exempel Oracle WebLogic Server, IBM WebSphere, JBoss EAP, GlassFish, Payara och andra).

Program som endast är beroende av funktioner som tillhandahålls av Java EE-specifikationen (det vill säga appserveroberoende program) kan migreras från en kompatibel programserver till en annan. Om ditt program är beroende av en specifik programserver (appserverberoende) kan du behöva välja ett mål för Azure-tjänsten som gör det möjligt att vara värd för den programservern.

Webbprogram

Webbprogram körs inuti en Servlet-container. Vissa av dessa program använder servlet-API:er direkt, medan många använder andra ramverk som kapslar in servlet-API:er, till exempel Apache Struts, Spring MVC, JavaServer Faces (JSF) och andra.

Webbprogram paketeras i arkiv med tillägget .war (WAR-filer).

Batchjobb/Schemalagda jobb

Vissa program är avsedda att köras kort, köra en viss arbetsbelastning och sedan avslutas i stället för att vänta på begäranden eller indata från användare. Ibland måste sådana jobb köras en gång eller med regelbundna och schemalagda intervall. Lokalt anropas sådana jobb ofta från en servers crontab.

Dessa program paketeras i arkiv med tillägget .jar (JAR-filer).

Kommentar

Om programmet använder en Scheduler (t. ex. Spring batch eller Quartz) för att köra schemalagda aktiviteter rekommenderar vi starkt att du tar hänsyn till aktiviteter som ska köras utanför programmet. Om ditt program skalar till flera instanser i molnet kommer samma jobb att köras mer än en gång. Om din schemaläggnings funktion använder värdens lokala tidszon kan du dessutom uppleva oönskade beteenden när du skalar ditt program över flera regioner.

Välja mål för Azure-tjänsten

I följande avsnitt visas vilka tjänstmål som uppfyller dina programkrav och vilka ansvarsområden de har.

Rutnät för värdalternativ

Använd följande rutnät för att identifiera potentiella mål för din programtyp. Som du ser har Azure Kubernetes Service (AKS) och Azure Virtual Machines stöd för alla programtyper, men de kräver att ditt team tar mer ansvar, vilket visas i nästa avsnitt.

Mål →

Programtyp ↓
App
Tjänst
Java SE
App
Tjänst
Tomcat
App
Tjänst
JBoss-EAP
Azure
Spring
Appar
Azure Container Apps AKS Virtuell
Datorer
Spring Boot-/JAR-program
Spring Cloud-program
Webbprogram
Java EE-program
Kommersiella programservrar
(till exempel Oracle WebLogic Server eller IBM WebSphere)
Långsiktig beständighet i lokalt filsystem
Klustring på programservernivå
Batchjobb/Schemalagda jobb
VNet Integration/Hybrid Anslut ivity
Tillgänglighet för Azure-regioner Detaljer Detaljer Detaljer Detaljer Detaljer Detaljer Detaljer

Tabell för kontinuerlig ansvar

Använd följande rutnät för att förstå det ansvar som varje mål lägger på teamet efter migreringen.

Uppgifter som anges med Azure hanteras helt eller främst av Azure. Ditt team ansvarar kontinuerligt för de uppgifter som anges med 👉. Vi rekommenderar att du implementerar en robust och mycket automatiserad process för att uppfylla alla dessa ansvarsområden.

Kommentar

Detta är inte en uttömmande lista över ansvarsområden.

Mål →

Aktivitet ↓
App
Tjänst
Azure
Spring
Appar
Azure
Container
Appar
AKS Virtuell
Datorer
Bibliotek uppdateras
(inklusive sårbarhetsåtgärder)
👉 👉 👉 👉 👉
Uppdatera programservern
(inklusive sårbarhetsåtgärder)
Azure Azure 👉 👉 👉
Uppdatera Java Runtime
(inklusive sårbarhetsåtgärder)
Azure Azure 👉 👉 👉
Utlösa Kubernetes-uppdateringar
(utförs av Azure med en manuell utlösare)
Ej tillämpligt Azure Azure 👉 Ej tillämpligt
Haveriberedskap Azure Azure 👉 👉 Azure
Synkronisera ändringar som inte är kompatibla med Kubernetes-API Ej tillämpligt Azure 👉 👉 Ej tillämpligt
Containerbasavbildningen uppdateras
(inklusive sårbarhetsåtgärder)
Ej tillämpligt Azure 👉 👉 Ej tillämpligt
Uppdaterar operativsystemet
(inklusive sårbarhetsåtgärder)
Azure Azure Azure Azure1 👉
Identifiera och starta om misslyckade instanser Azure Azure Azure Azure 👉
Implementera tömning och omstart av systemet efter uppdateringar Azure Azure Azure Azure 👉
Infrastrukturhantering Azure Azure 👉 👉 👉
Övervakning och varningshantering 👉 👉 👉 👉

1 Vissa säkerhetsuppdateringar kan kräva nodomstarter, vilket inte görs automatiskt. Mer information finns i Tillämpa säkerhets- och kerneluppdateringar på Linux-noder i Azure Kubernetes Service (AKS).

Om du distribuerar Servlet-containern (t. ex. Spring Boot) som en del av ditt program bör du betrakta den som ett bibliotek och därmed är det alltid är ditt ansvar.

Säkerställa lokala anslutningsmöjligheter

Om ditt program behöver har åtkomst till någon av dina lokala tjänster måste du etablera en av Azures anslutningstjänster. Mer information finns i Välj en lösning för att ansluta ett lokalt nätverk till Azure. Alternativt måste du omstrukturera programmet för att använda allmänt tillgängliga API:er som dina lokala resurser exponerar.

Du bör slutföra den här åtgärden innan du påbörjar en migrering.

Inventera aktuell kapacitet och resursanvändning

Dokumentera maskinvaran för den aktuella eller de aktuella produktionsservrarna, plus genomsnittet och högsta mängden förfrågningar och resursanvändning. Du behöver den här informationen för att tillhandahålla resurser i tjänstmålet.

Vägledning för migrering

Använd följande tagell för att hitta vägledning för migrering efter programtyp och mål för Azure-tjänsten.

Java-program

Använd raderna nedan för att hitta din Java-programtyp och kolumnerna för att hitta Azure-tjänstedestinationen som ska vara värd för ditt program.

Om du vill migrera en JBoss EAP-app till Tomcat i App Service konverterar du först Java EE-appen till Java Web Apps (servlets) som körs på Tomcat och följer sedan riktlinjerna nedan.

Om du vill migrera en webbapp på Tomcat till Azure Spring Apps konverterar du först appen till Spring Cloud-program och följer sedan riktlinjerna nedan.

Mål →

Programtyp ↓
App
Tjänst
Java SE
App
Tjänst
Tomcat
App
Tjänst
JBoss-EAP
Azure
Container
Appar
Azure
Spring
Appar
AKS Virtuell
Datorer
Spring Boot/
JAR-program
Saknas Saknas Saknas Saknas riktlinjer Saknas Saknas
Spring Cloud/
program
Saknas Saknas Saknas Saknas riktlinjer riktlinjer
planerat
riktlinjer
planerat
Webbprogram
på Tomcat
Ej tillämpligt riktlinjer Ej tillämpligt riktlinjer Ej tillämpligt riktlinjer riktlinjer
planerat

Java EE-program

Använd raderna nedan för att hitta din Java EE-programtyp som körs på en specifik appserver. Använd kolumnerna för att hitta Azure-tjänstedestinationen som ska vara värd för ditt program.

Mål →

Appserver ↓
App
Tjänst
Java SE
App
Tjänst
Tomcat
App
Tjänst
JBoss-EAP
Azure
Container
Appar
Azure
Spring
Appar
AKS Virtuell
Datorer
WildFly/
JBoss AS
Saknas Saknas riktlinjer Saknas Saknas riktlinjer riktlinjer
planerat
Oracle WebLogic Server Saknas Saknas riktlinjer Saknas Saknas riktlinjer riktlinjer
IBM WebSphere Saknas Saknas riktlinjer Saknas Saknas riktlinjer riktlinjer
planerat
Red Hat JBoss EAP Saknas Saknas riktlinjer Saknas Saknas riktlinjer riktlinjer

Se även