Tipos de implementación de aplicaciones

Completado

Hay varias maneras de implementar aplicaciones de Java en la nube. En esta unidad exploraremos las diversas opciones de modo que, en la siguiente unidad, entienda mejor los servicios que proporciona Azure.

¿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 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, el proveedor de la nube se ocupa de la mayor parte de la carga de mantenimiento y operación. 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 PaaS, 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. A continuación, 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 PaaS 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.