Conexiones con la Nube: Despliegue de Aplicaciones en Java

Maria Paula Vizcaíno
Pragma
Published in
9 min readFeb 15, 2024

El manejo de la información es una prioridad escencial desde Pragma, para lo que hoy mantener dicha información en servidores locales es una práctica casi obsoleta, siendo sustituida con la basta oferta de servicios de nube para nuestras aplicaciones, disminuyendo costos operativos al haber modelos que permiten a la empresa únicamente pagar por los servicios que se utilizan; teniendo acceso a atributos como escalabilidad facilitando cambios y evitando sobrecargas de recursos.

Además de la escalabilidad, estos servicios permiten una configuración y personalización de las estructuras empleadas para el manejo de los datos, brindando al proceso de desarrollo flexibilidad y agilidad. La nube se diseña para brindar disponibilidad constante de la información almacenada con copias de dichos datos, estando así preparados para la recuperación posterior a una interrupción de la aplicación.

Así, al ser servicios altamente demandados, las empresas proveedoras de servicios cloud constantemente se encuentran en procesos de mejora, permitiendo a nosotros como Pragma acceder sin inconvenientes a las últimas versiones del servicio con migraciones sencillas de la información reduciendo costos a medida que la nube es innovada.

Al haber tantos servicios para acceder a la nube, como desarrolladores debemos conocer sus beneficios y diferencias para seleccionar correctamente el idóneo para nuestra aplicación, todos estos brindan de igual forma escalabilidad, rendimiento y disponibilidad, por ello, exploremos algunos de los proveedores de servicios cloud mejor posicionados como AWS, Azure y GCP.

Elegir el proveedor correcto para nuestro proyecto tiene un impacto significativo para su buen funcionamiento y desempeño, para tomar una decisión estratégica existen dos parámetros a considerar: la optimización de la eficiencia operativa y el maximizar el valor que el servicio de nube contributiva al negocio.

Estos proveedores ofrecen una gran variedad de herramientas para el despliegue de nuestras aplicaciones como herramientas de gestión y monitorio, opciones para el almacenamiento de datos. Y, debido a su actualización constante, debemos evaluar factores como la escalabilidad y el rendimiento que mejor nos convenga según la demando de nuestro cliente.

Al comparar las opciones para el despliegue de nuestras aplicaciones, incluyendo el costo a nivel de desarrollo contando el mantenimiento del servicio, nos permite maximizar el retorno de la inversión durante el desarrollo. Además de dichos costos, otro factor a tener en cuenta durante la comparación son las medidas de protección de los datos velando por la seguridad del cliente final.

AWS (Amazon Web Services)

AWS es uno de los principales proveedores de servicios cloud, debido a su compatibilidad con diversos lenguajes y plataformas de programación además de Java entre los cuales se encuentras Node.js y Python, permitiéndonos como pragmáticos desarrollar en las tecnologías preferidas ya sea por nosotros o por el cliente.

Cuenta también con servicios especializados entre los cuales se encuentra EB (Amazon Elastic Beanstalk) la cual se encarga de las configuración y personalización de la infraestructura subyacente permitiendo a nuestros equipos de pragmáticos centrar en el desarrollo de la aplicación sin tener que abordar la gestión de la infraestructura del proyecto.

Por medio de EB podemos automatizar tareas relacionadas con el aprovisionamiento de los servidores, la configuración de la red y el equilibrio de carga del sistema. Además, por medio de las CLI (interfaz de líneas de comando) podemos diseñar, crear y desplegar aplicaciones empleando un menor tiempo gracias a las plantillas de los servicios comunes que nos ofrece como sitios de e-commerce, portales de contenido y aplicaciones empresariales.

El uso de estas herramientas es multiambiente, permitiéndoos crear entornos de desarrollo, pruebas y producción facilitando la implementación de procesos CI/CD realizando entregas continuas. EB fue desarrollado para aplicaciones de alta carga y tráfico impredecibles y facilita la administración y construcción de arquitecturas altamente escalables debido a su compatibilidad con desarrollos a base de microservicios y contenedores Docker.

Otra de las herramientas particulares que ofrece AWS son las conexiones Lamba, las cuales son serverless y es empleada en particular para la respuesta a eventos como peticiones HTTP, estas funciones Lambda únicamente son ejecutadas al activas un evento específico establecido al momento de desarrollo, optimizando el uso de recursos del sistema. Tienen la capacidad de administrar desde pocas invocaciones por minuto hasta miles de invocaciones por segundo, brindando un rendimiento consistente y fácil de monitorear.

Este proveedor cuenta con RDS (Relational Database Service) para la gestión de bases de datos relacionales manejando aspectos como copias de seguridad de la información y recuperación de la misma posterior a incidentes facilitando la configuración en la nube permitiendo al pragmático concentrarse en el desarrollo en lugar de la administración de la base de datos de la aplicación.

Al igual que en el desarrollo, AWS RDS es compatible con diversos administradores de bases de datos como MySQL y PostgreSQL, brindando al desarrollo la capacidad de elección de motor de BD permitiendo adaptabilidad a lo requerido por la aplicación y por el cliente. Esta adaptabilidad permite escalar la BD verticalmente, manejando el tamaño de la base de datos, y horizontalmente, agregando réplicas y particiones de datos.

En seguridad, RDS ofrece características avanzadas para garantizar la integridad de la información. Estas estas características se encuentra control de accesos por roles, monitoreo y análisis de eventos permitiendo detectar amenazas en el sistema, y encriptación de datos asegurando la protección de la información.

Estas y muchas otras funcionalidades hacen que AWS Cloud Services sea una opción segura, sencilla de implementar y confiable tanto para aplicaciones web como aplicaciones móviles, basta con seguir los pasos establecidos por AWS para configurar e implementar esta conexión a la nube.

Se recomienda emplear IntelliJ IDEA como entorno de desarrollo integrado debido a su integración con AWS Toolkit, una vez en el IDE debemos crear un proyecto Gradle o Maven para la gestión de dependencias y la construcción del código Java. Una vez configurado el ambiente que vamos a emplear para la gestión de dependencias, realizamos la integración con AWS SDK en el archivo build.gradle en Gradle:

dependencias {
implementation 'com.amazonaws:aws-java-sdk:1.12.156'
}

O en el archivo pom.xml en Maven:

<dependencies>
<dependency>
<groupId>com.amazonaws<groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.12.156</version>
</dependency>
</dependencies>

Posteriormente mediante un framework como Spring Boot diseñamos, desarrollamos e implementamos las funcionalidades de nuestra aplicación. Para realizar la implementación en AWS, creamos una cuenta en AWS y autorizamos los permisos necesarios para nuestro sistema.

Podemos emplear AWS RDS para administrar nuestra base de datos MySQL donde almacenamos nuestra información. Una vez conectada nuestra aplicación, podemos desplegar nuestra aplicación creando un entorno en EB.

Algunas ventajas del proceso son durante nuestro desarrollo, no tenemos que enfocarnos en la infraestructura subyacente y con la integración en el IDE de AWS Toolkit facilitando el proceso del despliegue. Tenemos otras herramientas como AWS CloudWatch podemos monitorear el rendimiento de aplicación y realizar los ajustes que veamos necesarios con EB.

En términos de costos, con una buena planificación solo debemos pagar por las funcionalidades empleadas y la herramienta de EB cuenta con la opción de escalado automático para minimizar costos, por lo cual aprovechamos la flexibilidad, escalabilidad y rendimiento de la nube.

Azure (Microsoft Azure)

Microsoft Azure de igual forma ofrece herramientas específicas para crear y ejecutar aplicaciones eficientes y escalables. Entre ellas se encuentra AAS (Azure App Services) la cual es una plataforma para crear, hospedar y escalar aplicaciones ofreciendo soporte completo para aplicaciones Java encargándose de la infraestructura subyacente.

Azure App Services es compatible con una variedad de lenguajes de programación y marcos de desarrollo y, además, cuenta con integración con sistemas de control de versiones para un despliegue continuo como Azure DevOps. Cuenta con integración estrega con servicios de Azure permitiendo crear las aplicaciones altamente integradas en la nube, como Azure SQL Database y Azure Cosmos DB para el manejo de bases de datos y Azure Monitor para el análisis de métricas.

Además de ofrecer características avanzadas como el control de acceso basado en roles el cifrado de datos, cumple con varios estándares de cumplimiento normativo como ISO 27001 el cual es un estándar internacional para la seguridad de la información. Azure App Services es una opción particularmente empleada en el desarrollo de sitios web corporativos, portales de empleados y clientes, en la creación de microservicios y APIs para aplicaciones web y móviles iOS, Android y Windows.

Otra de las herramientas ofrecidas por Azure es AKS (Azure Kubernetes Services) que facilita la implementación de clústers de contenedores Kubernetes en la nube en función de la carga demandada. De igual forma, AKS cumple con estándares de seguridad, integración estrecha con otros servicios de Azure y es compatible con las herramientas y APis de Kubernetes.

Existe también la herramienta de Azure Functions la cual es serverless y es empleada para la administración de eventos asociados a funcionalidades únicamente del software o eventos de dispositivos IoT, permitiendo crear aplicaciones reactivas siendo capaces de manejar cualquier número de tráfico donde el desarrollador solo debe pagar por el tiempo de ejecución de estas funciones y recursos.

Uno de los factores diferenciadores de Azure es la integración de tecnologías de Microsoft siendo herramientas de desarrollo como Visual Studio Code. De manera similar a la implementación de nuestra aplicación con AWS, Azure nos proporciona unos pasos particulares.

IntelliJ IDEA y Eclipse son los IDE que tiene habilitado la configuración de Azure Toolkit. Luego de esta implementación, con Spring Boot desarrollamos nuestra aplicación en Java junto con las funcionalidades de este. Debemos autorizar los permisos de Azure desde la cuenta que vamos a emplear para la aplicación y activamos el plan de Azure App Service que se ajuste mejor a las necesidades de nuestra aplicación.

Una vez activo nuestro plan, configuramos nuestra herramienta de despliegue continuo ya sea Azure DevOps o GitHub. Contamos con herramientas como Azure SQL Database y Azure Blob Storage para almacenar los datos y los archivos de nuestra aplicación.

GCP (Google Cloud Platform)

Siendo la conexión de nube proporcionada por Google, GCP de manera similar a los proveedores mencionados previamente, brinda la herramienta App Engina que gestiona la infraestructura subyacente y escalabilidad garantizando un rendimiento óptimo de las aplicaciones soportando carga elevada. Sin embargo, ofrece un entorno de ejecución nativa para Java junto con herramientas de desarrollo estándar como Gradle o Maven.

Igualmente, Google tiene herramientas integradas como Cloud Storage y Cloud SQL facilitando el almacenamiento y análisis de la información. App Engine cuenta con un modelo de costos correspondiente al consumo de los recursos, sin embargo de manera adicional, ofrece a los desarrolladores una capa gratuita para su uso.

GCP cuenta con una herramienta con GKE (Google Kubertener Engine) para gestionar contenedores basado en Kubernetes teniendo particularmente funcionalidad diseñadas para la tolerancia a fallos enfocándose en la disponibilidad del sistema. Es compatible con contenedores estándar como Docker brindando familiaridad al pragmático en el proceso de desarrollo.

Por otro lado, GCP ofrece herramientas orientadas al aprendizaje automático como Google Cloud AI Platform. Durante el desarrollo de nuestra aplicación tenemos acceso a estos modelos por medio de herramientas de desarrollo especializadas en el aprendizaje de máquina como Jupyter Notebooks permitiendo realizar un procesamiento por medio de limpieza, transformación y normalización de datos, contando con la integración de servicios para el análisis y visualización de métricas.

Manejo, por su parte, un servicio de almacenamiento de datos autoadministrado para ejecutar consultas SQL; BigQuery. Esta herramienta proporciona eficiencia y rendimiento en bases de datos de gran volumen en tiempo real cumpliendo normativas de seguridad y, de manera similar a los demás servicios, cobra al usuario según su consumo.

De manera análoga a las conexiones de nuestro proyecto con AWS o Azure, por medio de la máquina local configuramos Google Cloud SDK, el cual es compatible con IntelliJ IDEA y Eclipse. Realizamos el desarrollo en Java con nuestro framework y, luego, conectamos nuestra cuenta de GCP, empleando Google Cloud Run para nuestro despliegue y Google Cloud SQL para administrar nuestra base de datos, ya sea, MySQL o PostgreSQL.

Comparemos con esta información.

Casos de implementación.

Muchas veces como desarrolladores nos tomamos el tiempo de leer y comparar las ventajas de estos proveedores, pero seguimos sin tener claridad en cuál de ellos proporcionará mejor rendimiento y eficiencia a nuestra aplicación, por ello, veamos algunos ejemplos en los cuales en la mayoría de los casos similares se ha optado por emplear un proveedor en específico:

  • Aplicación web donde la alta disponibilidad y la escalabilidad son indispensables: Para este tipo de aplicaciones se suele sugerir optar por AWS debido a la alta gama de servicios robustos que cumplen con estas dos condiciones (RDS, EC2 y S3 para la alta disponibilidad, y, AutoScaling y Elastic Load Balancing para la escalabilidad automática).
  • Aplicación empresarial con integración de tecnologías Microsoft: Para este tipo de aplicaciones, claramente, el proveedor idóneo es Azure debido a su conexión preestablecida con Microsoft.
  • Aplicaciones basadas en contenedores y microservicios: Para este tipo de aplicaciones se suele sugerir GCP.
  • Aplicaciones impulsadas por datos y análisis: Para este tipo de aplicaciones se suele sugerir Azure o GCP, debido a la variedad de gestores de bases de datos especializados.
  • Aplicaciones de IA y aprendizaje de máquina (aprendizaje automático): Para este tipo de aplicaciones se suele sugerir el uso de GCP al ser Google el proveedor de servicios líder en la industria en AI y ML.

Como pragmáticos, es importante que tengamos en cuenta lo beneficios que van de la mano con cada proveedor, para así tomar la mejor decisión potenciando nuestra aplicación.

Referencias.

--

--