Cómo elegir el servicio de Azure adecuado para implementar una aplicación de Java. Parte 1

A menudo, las organizaciones ejecutan muchas cargas de trabajo de Java diferentes, desde aplicaciones sencillas hasta arquitecturas de microservicios críticas muy complejas.

Un sitio web de comercio electrónico podría tener una tienda orientada al cliente muy escalable que se base en cientos de servicios de Spring Boot. El sitio también podría tener un sistema de área de operaciones monolítico para administrar el catálogo, así como muchas aplicaciones de lote más pequeñas para actualizar las existencias y enviar notificaciones a los clientes.

Azure proporciona muchas maneras de ejecutar Java, desde máquinas virtuales sencillas hasta contenedores, servicios administrados o funciones sin servidor. Azure ofrece una o incluso varias soluciones que se adaptan a sus necesidades, incluidas soluciones para escenarios de comercio electrónico complejos.

Este módulo contiene una introducción a estas soluciones y a herramientas que le ayudarán a elegir la más adecuada para su caso de uso específico.

Objetivos de aprendizaje

Al término de este módulo, sabrá hacer lo siguiente:

  • Describir y diferenciar las opciones de implementación de Azure disponibles para aplicaciones de Java.
  • Elegir el mejor servicio de Azure para implementar una aplicación de Java.

Requisitos previos

  • Familiaridad con el desarrollo y la ejecución de aplicaciones de Java
  • Experiencia de nivel principiante con la infraestructura de la nube

Tipos de implementación de aplicaciones

Hay varias maneras de implementar aplicaciones de Java en la nube. En esta unidad exploraremos las diversas opciones

¿Máquinas virtuales, contenedores o plataforma como servicio?

La principal pregunta es si quiere o necesita implementar la aplicación en una máquina virtual (VM), dentro de un contenedor o en una solución de plataforma como servicio (PaaS).

  • Con las máquinas virtuales, se encuentra en un mundo similar al de un entorno de centro de centros de datos local o clásico. Azure proporciona un conjunto de máquinas virtuales preconfiguradas que ejecutan los sistemas operativos principales (Windows y Linux), y es usted quien debe configurar y mantener dichas máquinas.Le recomendamos que adopte esta solución inicialmente, ya que es la más cercana a lo que la mayoría de las empresas usa antes de pasar a la nube. Normalmente instalan su propio software de administración de configuración, instalan su versión favorita de Java y pueden ejecutar su carga de trabajo de Java de forma similar a como lo hacían en el pasado.La solución de máquinas virtuales funciona bien si tiene un equipo de operaciones experimentado que las configure y las mantenga, y si tiene casos de uso específicos. Por ejemplo, podría usar algunas bibliotecas nativas o algún software propietario, como Oracle WebLogic Server o el servidor de aplicaciones IBM WebSphere.
  • Con los contenedores, mantendrá la mayor parte del control que tiene con las máquinas virtuales, pero con menos trabajo de operaciones. Puede instalar su propia Máquina virtual Java (JVM) o algún software específico, y los contenedores se ejecutarán de forma local o en cualquier proveedor en la nube.Dado que los contenedores ofrecen mucha libertad,se ven afectados por algunos de los problemas de las máquinas virtuales. Si proporciona su propia JVM, deberá actualizarla y revisarla cuando sea necesario. Como resultado, las imágenes de Docker requieren una buena cadena de herramientas de integración continua y entrega continua (CI/CD) para poder mantener los contenedores correctamente. Dado que las imágenes de Docker se pueden ejecutar localmente y son más ligeras que las máquinas virtuales, también proporcionan una excelente experiencia de desarrollador.
  • Con la solución de plataforma como servicio, la mayor parte de la carga de mantenimiento y operación se realiza a través del proveedor de la nube. Se proporcionan las actualizaciones del sistema operativo, las revisiones de Java, la seguridad y el cumplimiento. Como resultado, esta opción suele ser más segura y menos costosa. También incluye algunas características de escalabilidad, que deben permitir que la aplicación se adapte mejor a las necesidades de los clientes. Además, conlleva un mejor rendimiento bajo carga y un costo más bajo cuando hay menos tráfico.

Puede lograr más con una solución de PaaS. Puede establecer la configuración automática, administrar y cargar secretos (por ejemplo, con Azure Key Vault), supervisar la aplicación, iniciar una sesión de generación de perfiles en vivo y habilitar la implementación sin tiempo de inactividad.

Opciones de implementación

Si usa máquinas virtuales, contenedores o una solución de plataforma como servicio, normalmente hay dos maneras de implementar las aplicaciones de Java en la nube:

  • Implementación del código fuente: el código fuente se confirma en un repositorio de Git y el proveedor en la nube ejecuta un proceso que compila, crea y empaqueta la aplicación.
  • Implementación de archivo JAR, WAR o EAR: la aplicación se empaqueta normalmente como un archivo JAR ejecutable (archivo de Java), pero también se puede empaquetar como WAR (archivo de aplicación web), EAR (archivo de aplicación empresarial) y otros formatos de archivo. Después, el proveedor de nube ejecuta el archivo ejecutable.

Estas dos opciones de implementación son maneras clásicas de ejecutar aplicaciones de Java. En ambos casos, el proceso de compilación es normalmente similar y la diferencia principal es dónde se ejecuta el proceso. Permitir que el proveedor de nube realice la compilación es más sencillo y, con este método, el proveedor aplica sus propias comprobaciones y revisiones de seguridad. Si compila la aplicación localmente o mediante una plataforma de CI/CD, como Acciones de GitHub, obtiene más flexibilidad y control.

Funciones sin servidor

Las funciones sin servidor (o, más concretamente, Azure Functions) son una combinación de varias soluciones que hemos visto y ofrecen una característica muy específica: están pensadas para ejecutarse durante períodos de tiempo breves. Por lo general, una función se desencadena con un evento, como una solicitud HTTP, y permanece activa durante unos minutos, hasta que vuelve a entrar en suspensión.

Las funciones comparten características con la solución de plataforma como servicio descrita anteriormente. En Azure, nuestra solución de PaaS (Azure App Service) y nuestra solución sin servidor (Azure Functions) técnicamente son muy parecidas y comparten algunos servicios y código comunes.

Para las opciones de implementación, las funciones suelen usar archivos JAR. Hay disponibles otras opciones, como Docker, pero son menos populares y normalmente no funcionan tan bien. Esto se debe a que la plataforma subyacente no puede optimizarlas de la misma manera que para los archivos JAR.

Debido a su naturaleza, las funciones sin servidor deben estar codificadas específicamente. Sus características dependerán del proveedor de nube en el que se ejecuten y su breve duración dificulta el uso de soluciones tradicionales, como el almacenamiento en caché o la replicación de sesión HTTP.

Las funciones sin servidor se pueden escalar bien y ofrecen el mejor precio para entornos de poco uso. Al mismo tiempo, pueden responder a las cargas de tráfico más exigentes.

Comparación de las soluciones

Hemos descrito los tipos de implementación más habituales para aplicaciones de Java. Ahora veremos qué servicio de Azure puede funcionar mejor, según el tipo de implementación que necesite.

Azure App Service

Azure App Service es una solución de plataforma como servicio (PaaS) proporcionada por Azure. Ofrece un servicio fácil de usar para ejecutar aplicaciones web de Java, con actualizaciones y revisiones automáticas del sistema operativo y la Máquina virtual Java (JVM), así como escalado automático o supervisión.

App Service puede ejecutar cualquier archivo JAR ejecutable, como los que proporciona Spring Boot, y puede implementar cualquier aplicación WAR sobre servidores de aplicaciones populares, como Apache Tomcat o Red Hat JBoss.

Por lo tanto, para ejecutar una sencilla aplicación de Java monolítica, App Service sería la mejor opción.

Si necesita más control sobre las implementaciones, App Service también es compatible con imágenes de Docker. Esta ventaja le permite incluir soluciones específicas o personalizadas, pero a costa de más mantenimiento por su parte.

Azure Functions

Azure Functions es la plataforma sin servidor que proporciona Azure y admite la ejecución de cargas de trabajo de Java.

La ejecución de una aplicación de Java en Azure Functions normalmente requiere algunos pequeños ajustes de configuración. Por naturaleza, las funciones sin servidor tiene una duración corta (normalmente solo unos minutos), por lo que algunos de los servicios que tradicionalmente usaría podrían no ser tan eficaces o prácticos como Azure App Service.

Como resultado, Azure Functions está diseñado para aplicaciones que necesitan mucha escalabilidad. Puede detenerlas con regularidad para reducir el costo, así como escalarlas para responder a una carga alta.

Azure Spring Cloud

Azure Spring Cloud es un servicio único de Azure que proporciona una solución de plataforma como servicio para ejecutar microservicios de Spring Boot. Spring Cloud proporciona muchas herramientas, como un registro de servicio o un servidor de configuración. También proporciona mecanismos específicos de seguridad y escalado automático que simplifican enormemente el uso de una arquitectura de microservicios basada en Spring Boot.

La oferta de Spring Cloud está creada y administrada conjuntamente por Microsoft y VMware, la empresa que crea Spring Framework. Spring Cloud proporciona compatibilidad con las actualizaciones y las revisiones del sistema operativo y JVM, como Azure App Service, y con servicios avanzados de Spring.

También puede usar el servicio Azure Spring Cloud para ejecutar otras cargas de trabajo, como aplicaciones monolíticas de Spring Boot o incluso microservicios de .NET, que usan Steeltoe, pero el servicio se usa principalmente para ejecutar microservicios de Spring Boot.

Azure Kubernetes Service

Azure Kubernetes Service (AKS) es una solución de Kubernetes administrada y segura que proporciona Azure. Puede ejecutar cualquier imagen de Docker y se beneficia de pertenecer al ecosistema de Kubernetes. AKS funciona bien si quiere ofrecer aplicaciones nativas de nube en cualquier lenguaje, incluido Java.

Azure Kubernetes Service es una solución excelente si tiene cargas de trabajo heterogéneas o si quiere un control preciso de su entorno. AKS ejecuta bien las cargas de trabajo de Java, pero tendrá que compilar y mantener las imágenes de Docker.

Máquinas virtuales de Azure

La ejecución de máquinas virtuales en Azure le ofrece la máxima flexibilidad y variedad de opciones. Puede elegir entre numerosos sistemas operativos, normalmente Windows y las principales distribuciones de Linux. También puede traer su propio software o usar algunas de las imágenes proporcionadas.

En concreto, para Java, las máquinas virtuales se usan principalmente para lo siguiente:

  • Instalar y ejecutar una aplicación web de Java manualmente en Windows o Linux
  • Instalar y ejecutar Docker o incluso AKS para ejecutar una imagen que contiene una aplicación web de Java
  • Usar una de las ofertas admitidas, como Oracle WebLogic, para ejecutar aplicaciones web Java en las máquinas virtuales

Cuando usa máquinas virtuales de Azure, no se limita lo que puede instalar y ejecutar, ya que tiene control total sobre ellas. Aun así, el principal inconveniente de las máquinas virtuales es que debe mantenerlas y protegerlas. En el caso de las máquinas virtuales, este trabajo de mantenimiento es su responsabilidad.

FUENTE: https://n9.cl/cbbay