Migración de aplicaciones de Java a Azure
En este artículo se proporciona información general sobre las estrategias recomendadas para migrar aplicaciones Java a Azure.
Esta guía de migración está diseñada para escenarios estándar de Java en Azure y para proporcionar sugerencias y consideraciones generales sobre el planeamiento. Si desea analizar un escenario específico de migración de aplicaciones Java con el equipo de Microsoft Java en Azure, rellene el siguiente cuestionario y un representante se pondrá en contacto con usted.
Identificación del tipo de aplicación
Antes de seleccionar un destino en la nube para la aplicación de Java, deberá identificar su tipo de aplicación. La mayoría de las aplicaciones de Java son de uno de los siguientes tipos:
- Aplicaciones spring:
- Aplicaciones de Java EE
- Aplicaciones web
- Trabajos por lotes o programados
Estos tipos se describen en las secciones siguientes.
Aplicaciones de Spring Boot/JAR
Muchas aplicaciones más recientes se invocan directamente desde la línea de comandos. Estas aplicaciones todavía controlan las solicitudes web pero, en lugar de depender de un servidor de aplicaciones para proporcionar el control de solicitudes HTTP, incorporan la comunicación HTTP y todas las demás dependencias directamente en el paquete de aplicación. Estas aplicaciones se suelen compilar con marcos como Spring Boot, Dropwizard, Micronaut, MicroProfile, Vert.x y otros.
Estas aplicaciones se empaquetan en archivos con la extensión .jar (archivos JAR).
Aplicaciones de Spring que usan módulos de middleware de Spring Cloud
El estilo arquitectónico de microservicios es un enfoque para desarrollar una aplicación individual como un conjunto de pequeños servicios. Cada servicio se ejecuta en su propio proceso y se comunica mediante mecanismos ligeros, a menudo una API de recursos HTTP. Estos servicios se crean en torno a las funcionalidades empresariales y se pueden implementar de forma independiente con maquinaria de implementación totalmente automatizada. Hay un mínimo de administración centralizada de estos servicios, que se pueden escribir en diferentes lenguajes de programación y usar diferentes tecnologías de almacenamiento de datos. Estos servicios suelen compilarse con marcos como Spring Cloud.
Estos servicios se empaquetan en varias aplicaciones con la extensión .jar (archivos JAR).
Aplicaciones de Java EE
Las aplicaciones Java EE (también conocidas como aplicaciones J2EE o, más recientemente, aplicaciones de Jakarta EE) pueden contener algunos, todos o ninguno de los elementos de las aplicaciones web. Estas aplicaciones también pueden contener y consumir muchos más componentes, tal como se define en la especificación de Jakarta EE.
Las aplicaciones de Java EE se pueden empaquetar como archivos con la extensión .ear (archivos EAR) o como archivos con la extensión .war (archivos WAR).
Las aplicaciones java EE deben implementarse en servidores de aplicaciones compatibles con Java EE (como Oracle WebLogic Server, IBM WebSphere, JBoss EAP, GlassFish, Payara y otros).
Las aplicaciones que solo se basan en las características proporcionadas por la especificación de Java EE (es decir, las aplicaciones independientes de la aplicación) se pueden migrar desde un servidor de aplicaciones compatible a otro. Si su aplicación depende de un servidor de aplicaciones específico (dependiente del servidor de aplicaciones), es posible que tenga que seleccionar un destino de servicio de Azure que le permita hospedar ese servidor de aplicaciones.
Aplicaciones web
Las aplicaciones web se ejecutan en un contenedor de Servlet. Algunas de estas aplicaciones usan api de servlet directamente, mientras que muchas otras plataformas que encapsulan las API de servlet, como Apache Struts, Spring MVC, JavaServer Faces (JSF) y otras.
Las aplicaciones web se empaquetan en archivos con la extensión .war (archivos WAR).
Trabajos por lotes o programados
Algunas aplicaciones están diseñadas para ejecutarse brevemente, ejecutar una carga de trabajo concreta y después salir, sin esperar solicitudes ni los datos proporcionados por el usuario. A veces, estos trabajos deben ejecutarse una vez o a intervalos regulares programados. En el entorno local, estos trabajos se suelen invocar desde el archivo crontab de un servidor.
Estas aplicaciones se empaquetan en archivos con la extensión .jar (archivos JAR).
Nota:
Si la aplicación usa un programador (como Spring Batch o Quartz) para ejecutar tareas programadas, es muy recomendable factorizar estas tareas para que se ejecuten fuera de la aplicación. Si la aplicación se escala en varias instancias en la nube, el mismo trabajo se ejecutará más de una vez. Además, si el mecanismo de programación utiliza la zona horaria local del host, el comportamiento podría no ser el esperado si la aplicación se escala en regiones diferentes.
Selección del destino de servicio de Azure
En las secciones siguientes se muestran los destinos de servicio que cumplen los requisitos de la aplicación y qué responsabilidades conllevan.
Tabla de opciones de hospedaje
Use la siguiente tabla para identificar posibles destinos para su tipo de aplicación. Como puede ver, Azure Kubernetes Service (AKS) y Azure Virtual Machines admiten todos los tipos de aplicaciones, pero requieren que el equipo asuma más responsabilidades, como se muestra en la sección siguiente.
→ de destino Tipo de aplicación → |
Aplicación Servicio Java SE |
Aplicación Servicio Tomcat |
Aplicación Servicio JBoss EAP |
Azure Spring Aplicaciones |
Azure Container Apps | AKS | Virtual Machines |
---|---|---|---|---|---|---|---|
Aplicaciones de Spring Boot/JAR | ✔ | ||||||
Aplicaciones de Spring Cloud | ✔ | ✔ | ✔ | ✔ | |||
Aplicaciones web | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
Aplicaciones de Java EE | ✔ | ✔ | ✔ | ||||
Servidores de aplicaciones comerciales (como Oracle WebLogic Server o IBM WebSphere) |
✔ | ✔ | ✔ | ||||
Persistencia a largo plazo en el sistema de archivos local | ✔ | ✔ | ✔ | ✔ | ✔ | ||
Agrupación en clústeres en el nivel del servidor de aplicaciones | ✔ | ✔ | ✔ | ||||
Trabajos por lotes o programados | ✔ | ✔ | ✔ | ✔ | |||
Integración con redes virtuales y conexiones híbridas | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Disponibilidad de regiones de Azure | Detalles | Detalles | Detalles | Detalles | Detalles | Detalles | Detalles |
Tabla de responsabilidad en curso
Use la tabla siguiente para comprender la responsabilidad que cada destino conlleva para su equipo después de la migración.
Azure administra completamente o principalmente las tareas indicadas con . Su equipo es responsable continuamente de las tareas indicadas con 👉. Se recomienda implementar un proceso sólido y muy automatizado para cumplir todas estas responsabilidades.
Nota:
Esta no es una lista exhaustiva de todas las responsabilidades.
→ de destino Tarea → |
Aplicación Servicio |
Azure Spring Aplicaciones |
Azure Contenedor Aplicaciones |
AKS | Virtual Machines |
---|---|---|---|---|---|
Actualización de bibliotecas (incluida la corrección de vulnerabilidades) |
👉 | 👉 | 👉 | 👉 | 👉 |
Actualización del servidor de aplicaciones (incluida la corrección de vulnerabilidades) |
👉 | 👉 | 👉 | ||
Actualización del tiempo de ejecución de Java (incluida la corrección de vulnerabilidades) |
👉 | 👉 | 👉 | ||
Desencadenamiento de actualizaciones de Kubernetes (lo realiza Azure con un desencadenador manual) |
N/D | 👉 | N/D | ||
Recuperación ante desastres | 👉 | 👉 | |||
Conciliación de los cambios de la API de Kubernetes no compatibles con versiones anteriores | N/D | 👉 | 👉 | N/D | |
Actualización de la imagen base del contenedor (incluida la corrección de vulnerabilidades) |
N/D | 👉 | 👉 | N/D | |
Activación del sistema operativo (incluida la corrección de vulnerabilidades) |
1 | 👉 | |||
Detectación y reinicio de instancias con errores | 👉 | ||||
Implementación de purga y reinicio gradual de las actualizaciones | 👉 | ||||
Administración de la infraestructura | 👉 | 👉 | 👉 | ||
Supervisión y administración de alertas | 👉 | 👉 | 👉 | 👉 |
1 Algunas actualizaciones de seguridad pueden requerir reinicios de nodo, que no se realizan automáticamente. Para más información, consulte Aplicación de actualizaciones de seguridad y kernel a los nodos de Linux en Azure Kubernetes Service (AKS).
Si implementa el contenedor de Servlet (como Spring Boot) como parte de la aplicación, se considerará una biblioteca y, como tal, será siempre su responsabilidad.
Garantizar la conectividad local
Si su aplicación necesita acceder a cualquiera de los servicios locales, deberá aprovisionar uno de los servicios de conectividad de Azure. Para obtener más información, consulte. Elección de una solución para conectar una red local a Azure. También tendrá que refactorizar la aplicación para que use las API disponibles públicamente que exponen los recursos locales.
Debe completar este trabajo antes de iniciar cualquier migración.
Capacidad actual de inventario y uso de los recursos
Documente el hardware de los servidores de producción actuales, además del número medio y máximo de solicitudes y el uso de los recursos. Necesitará esta información para aprovisionar los recursos en el destino del servicio.
Guía de migración
Use las tablas siguientes para encontrar la guía de migración por tipo de aplicación y destino de servicio de Azure.
Aplicaciones de Java
Busque en las filas el tipo de aplicación de Java y, en las columnas, el destino de servicio de Azure que hospedará la aplicación.
Si desea migrar una aplicación de JBoss EAP a Tomcat en App Service, convierta primero la aplicación de Java EE a Java Web Apps (servlets) que se ejecuta en Tomcat, y siga las instrucciones que se indican a continuación.
Si desea migrar una aplicación web en Tomcat a Azure Spring Apps, primero convierta la aplicación en aplicaciones de Spring Cloud y siga las instrucciones que se indican a continuación.
→ de destino Tipo de aplicación → |
Aplicación Servicio Java SE |
Aplicación Servicio Tomcat |
Aplicación Servicio JBoss EAP |
Azure Contenedor Aplicaciones |
Azure Spring Aplicaciones |
AKS | Virtual Machines |
---|---|---|---|---|---|---|---|
Spring Boot/ aplicaciones JAR |
N/D | N/D | N/D | N/D | instrucciones | N/D | N/D |
Spring Cloud/ applications |
N/D | N/D | N/D | N/D | instrucciones | instrucciones planeado |
instrucciones planeado |
Aplicaciones web en Tomcat |
N/D | instrucciones | N/D | instrucciones | instrucciones | instrucciones | instrucciones planeado |
Aplicaciones de Java EE
Busque en las filas el tipo de aplicación de Java EE que se ejecuta en un servidor de aplicaciones específico. Busque en las columnas el destino del servicio de Azure que hospedará la aplicación.
→ de destino Servidor de aplicaciones → |
Aplicación Servicio Java SE |
Aplicación Servicio Tomcat |
Aplicación Servicio JBoss EAP |
Azure Contenedor Aplicaciones |
Azure Spring Aplicaciones |
AKS | Virtual Machines |
---|---|---|---|---|---|---|---|
WildFly / JBoss AS |
N/D | N/D | instrucciones | N/D | N/D | instrucciones | instrucciones planeado |
Servidor WebLogic de Oracle | N/D | N/D | instrucciones | N/D | N/D | instrucciones | instrucciones |
IBM WebSphere | N/D | N/D | instrucciones | N/D | N/D | instrucciones | instrucciones planeado |
Red Hat JBoss EAP | N/D | N/D | instrucciones | N/D | N/D | instrucciones | instrucciones |