Compartir a través de


Escalado con seguridad, supervisión y automatización integrales

Al diseñar aplicaciones, es necesario conocer bien cómo adaptarse a los cambios en la carga de trabajo, recuperarse frente a errores inesperados, minimizar los riesgos de seguridad, etc. Aunque podríamos empezar con un método de ensayo y error, lo que consume tiempo de otros objetivos de la organización y podría afectar negativamente a nuestra reputación. Azure ofrece una guía sobre arquitectura necesaria para tener las cosas claras desde el principio. También tiene todo lo que necesita para crear una aplicación escalable, desde un sistema de seguridad y un escalado automático de última generación hasta servicios auxiliares para datos, mensajería, almacenamiento en caché, supervisión del rendimiento y automatización. Muchos de estos servicios auxiliares también se basan en software de código abierto popular, como PostgreSQL, Redis, JMS y Kafka, por lo que su trabajo no se verá interrumpido en soluciones propias.

Diagrama con el título

Ahora echemos un vistazo a algunos servicios y características básicas de Azure y cómo puede ponerlos a funcionar para compilar aplicaciones Java escalables.

Ampliación de funcionalidades de aplicaciones Java: bases de datos y mensajería

Además de incluir varias opciones para ejecutar el código Java, Azure ofrece una amplia gama de servicios totalmente administrados para darle todo lo que necesita para sus bases de datos, como Azure Database for PostgreSQL, Azure Database for MySQL, MongoDB Atlas, Azure Cosmos DB, Azure SQL Database y Azure SQL Managed Instance. Lo mismo ocurre con la mensajería, con opciones que incluyen Azure Service Bus, Azure Event Hubs y Apache Kafka para Confluent Cloud.

El nivel Premium de Azure Service Bus admite JMS, el modelo de programación de Java Messaging Service. Independientemente de si las aplicaciones se ejecutan en máquinas virtuales, en Kubernetes o en servicios PaaS totalmente administrados, puede aprovisionar y usar rápidamente estos servicios de mensajería y datos totalmente administrados mediante clientes de código abierto, SDK de Java de Azure, iniciadores de Spring e integraciones de servidor de aplicaciones. Todos tienen las garantías de cumplimiento, disponibilidad y fiabilidad que esperaría de Microsoft y Azure. Muchos desarrolladores de Java y Spring prefieren usar bibliotecas idiomáticas para simplificar las conexiones a sus servicios en la nube preferidos. Microsoft cuenta con una lista completa de bibliotecas, controladores y módulos que permiten interactuar fácilmente con los servicios de Azure en todo tipo de datos, mensajería, caché, almacenamiento, eventos, directorios y administración de secretos. Para obtener más información, consulte la Guía para desarrolladores de Spring Cloud Azure.

Diagrama donde se ven las características de Spring Cloud Azure y los servicios de Azure asociados.

Diagrama donde se ven las categorías de las características y los servicios asociados de la plataforma de Azure compatibles con varias bibliotecas de Java, controladores y módulos de Spring.

Confianza cero: Red segura

Puede proteger las aplicaciones Java implementándolas en una instancia de Azure Virtual Network: el componente básico para sus propias redes privadas en Azure. Las redes virtuales permiten a muchos tipos de recursos de Azure comunicarse de forma segura entre ellos, con Internet y con sus redes y sistemas locales. Puede usar una red virtual para aislar las aplicaciones y admitir los servicios de backend de Internet y colocarlas en las redes privadas. Puede asumir el control total de la entrada y salida de las aplicaciones y los sistemas de backend.

Diagrama del acelerador de zonas de aterrizaje de Azure Container Apps

Confianza cero: Comunicaciones seguras integrales

La implementación de comunicaciones seguras como parte de una arquitectura de solución puede ser suponer un reto. Muchas empresas rotan manualmente sus certificados o crean sus propias soluciones para automatizar el aprovisionamiento y la configuración. Aun así, siguen existiendo riesgos de filtración de datos, como la copia o la transferencia de datos no autorizadas.

Con Azure, puede proteger las comunicaciones de forma integral o anular la seguridad de nivel de transporte en cualquier punto de las comunicaciones. También puede automatizar el aprovisionamiento y la configuración de todos los recursos de Azure necesarios para proteger las comunicaciones.

Basado en el principio de "nunca confiar, comprobar siempre y no usar credenciales", Confianza cero permite proteger todas las comunicaciones eliminando certificados desconocidos y no administrados y solo confiando en certificados compartidos al comprobar la identidad antes de conceder acceso a dichos certificados. Puede usar cualquier tipo de certificado TLS/SSL, como certificados emitidos por una entidad de certificación, certificados de validación ampliados, certificados comodín con cualquier número de subdominios o certificados autofirmados para entornos de desarrollo y pruebas.

Las aplicaciones Java o de Spring Boot pueden cargar certificados de forma segura en Azure Key Vault (tal como se indica más adelante). Con Azure Key Vault, controla el almacenamiento y la distribución de certificados para reducir la pérdida accidental. Las aplicaciones y los servicios pueden acceder de forma segura a los certificados mediante identidades administradas, el control de acceso basado en roles y el principio de privilegios mínimos. Esta carga segura se basa en el proveedor de arquitectura de criptografía de Java JCA (Java Cryptography Architecture) de Azure Key Vault.

Diagrama de arquitectura de comunicaciones seguras de un extremo a otro para aplicaciones de Spring Boot.

Confianza cero: Administración de secretos

Muchas aplicaciones Java se conectan a servicios auxiliares mediante direcciones URL y credenciales: información que, si se expone, se podría usar para obtener acceso no autorizado a datos confidenciales. La inserción de esta información en una aplicación en sí presenta un riesgo de seguridad considerable por muchas razones, incluida la detección a través de un repositorio de código. Muchos desarrolladores externalizan estas credenciales mediante variables de entorno para que varias aplicaciones puedan cargarlas, pero esto solo hace que el riesgo pase del propio código al entorno de ejecución.

Diagrama con el título

Azure Key Vault ofrece una manera mejor, más segura y con mayor capacidad para los secretos. Da control total sobre el almacenamiento y la distribución de secretos de la aplicación, mediante el control de acceso basado en roles (RBAC) y el principio de privilegios mínimos para limitar el acceso. Controle los secretos de las aplicaciones: conceda permiso a las aplicaciones para que las usen según sea necesario. Tras iniciar la aplicación, antes de conceder acceso a los secretos, la aplicación se autentica con el identificador de Microsoft Entra y Azure Key Vault lo autoriza mediante Azure RBAC. Azure Key Vault incluye funcionalidades completas de auditoría y tiene dos niveles de servicio: Estándar, que realiza el cifrado con una clave de software, y Premium, que incluye claves protegidas mediante un módulo de seguridad de hardware (HSM).

Autenticación y autorización de usuario final

La mayoría de aplicaciones Java empresariales necesitan autenticación y autorización de usuario, que se puede implementar mediante Microsoft Entra ID: una solución completa de administración de identidades y acceso con seguridad integrada. Las cuentas de usuario final pueden ser identidades de organización o identidades de redes sociales de Facebook, Twitter o Gmail mediante Microsoft Entra ID y Azure Active Directory B2C. Puede implementar soluciones basadas en Microsoft Entra ID mediante la biblioteca de autenticación de Microsoft para Java o Spring Boot Starter para Microsoft Entra. También puede usar cualquier proveedor de identidades que prefiera, como ForgeRock, Auth0, Ping u Okta.

Supervisión de un extremo a otro

Con Azure, puede supervisar de forma integral las aplicaciones Java mediante cualquier herramienta y plataforma. Si lo prefiere, también puede implementar una supervisión nativa totalmente administrada, como la supervisión de rendimiento de aplicaciones (APM), mediante Application Insights, una característica de Azure Monitor. Aporta una compatibilidad muy fiable con Java, Spring y plataformas como Micrometer y Spring Boot, lo que le permite identificar y solucionar problemas rápidamente. Entre estas características, se incluye la transmisión de métricas en tiempo real, el seguimiento de la frecuencia de solicitudes y tiempos de respuesta, seguimiento de eventos y tasas de dependencias externas; todo lo que necesita para controlar la disponibilidad, el rendimiento, la fiabilidad y el uso de sus aplicaciones Java que se ejecutan en Azure o en el entorno local.

Puede supervisar todo de forma integral agregando registros y métricas en Log Analytics, una herramienta de Azure Portal, que sirve para editar y ejecutar consultas en registros y datos de métricas en Azure Monitor. Puede escribir una consulta que devuelva un conjunto de registros y, después, utilizar Log Analytics para ordenarlos, filtrarlos y analizarlos. O bien, puede escribir una consulta más avanzada para realizar análisis estadísticos y visualizar los resultados en un gráfico para, entre otras cosas, identificar una tendencia determinada. Tanto si trabaja con los resultados de las consultas de forma interactiva como si los usa con otras características de Azure Monitor, como las alertas de consultas de registros o los libros, Log Analytics es una herramienta ideal para escribir y probar sus consultas.

Sabiendo esto, sabemos muy bien que es posible que los clientes que traigan sus aplicaciones Java a Azure quieran seguir usando las mismas herramientas de APM para supervisar sus aplicaciones locales. Para suplir esta necesidad, nos hemos asociado con New Relic, AppDynamics, Dynatrace y Elastic para integrar sus soluciones de supervisión con Azure App Service y Azure Container Apps. Los agentes de supervisión se ejecutan en paralelo con el código e instalamos los agentes que siempre están actualizados. Al implementar en Azure Container Apps, Azure Kubernetes Service o Virtual Machines, puede ejecutar cualquiera de estos agentes (incluidos New Relic, AppDynamics, Dynatrace, Elastic y Datadog) junto con las aplicaciones, pero debe instalarlos y administrarlos por su cuenta. Del mismo modo, puede supervisar todo de forma integral agregando registros y métricas en Elastic y Splunk.

Diagrama con el título

También sabemos que muchos clientes quieren seguir usando Grafana para consultar, visualizar y entender sus métricas y crear alertas de estas. Por este motivo, colaboramos con Grafana Labs para ofrecer Azure Managed Grafana, un servicio totalmente administrado que permite a los clientes ejecutar Grafana de forma nativa en Azure. El servicio facilita la implementación de instancias de Grafana seguras y escalables y las conecta a orígenes de datos de código abierto, en la nube y de terceros para verlas y analizarlas. El servicio está optimizado para orígenes de datos nativos de Azure, como Azure Monitor y Azure Data Explorer, e incluye integraciones de supervisión de rendimiento de aplicaciones (APM) con servicios de proceso de Azure, como Azure App Service, Azure Container Apps, Azure Kubernetes Service, Splunk, Datadog y Azure Virtual Machines.

Aceleración de aplicaciones Java mediante almacenamiento en caché

A medida que aumentan las cargas de trabajo de las aplicaciones Java, puede incrementar el rendimiento mediante Azure Cache for Redis para implementar una capa de almacenamiento en caché en memoria para los resultados de las consultas, los estados de sesión y el contenido estático. Es una manera estupenda de mejorar el rendimiento de la aplicación y reducir la latencia sin tener que rediseñar la base de datos subyacente. Los niveles Enterprise de Azure Cache for Redis, desarrollados en colaboración con Redis y totalmente administrados por Microsoft, son la opción de implementación más altamente disponible y escalable para ejecutar Redis en Azure. Incluye características como la replicación geográfica activa, la administración de sesiones externalizadas y la búsqueda y la indexación de alta velocidad.

Diagrama con el título

Escalado automático

Todos los servicios de proceso de Azure para ejecutar aplicaciones Java admiten el escalado automático, lo que puede alcanzar la máxima rentabilidad y adaptarse a las cargas de trabajo en constante cambio sin pagar por más capacidad de la que necesita. Una vez habilitado, puede estar seguro de que el escalado automático se encargará de la infraestructura subyacente y de las cargas de trabajo de las aplicaciones.

Diagrama con el título

Puede escalar o reducir horizontalmente y automáticamente en función de la carga o la planificación. En el modo basado en la carga (o basado en métricas), las aplicaciones se escalan horizontalmente en los recursos necesarios para controlar la carga, hasta los límites establecidos. Del mismo modo, cuando se reduce la carga, los recursos se escalan horizontalmente, nunca se encuentran por debajo de los mínimos establecidos.

En el modo basado en planificación, las aplicaciones se reducen y se escalan horizontalmente en función de una planificación y límites definidos. El modo basado en planificación es útil para las cargas de trabajo que siguen un patrón de predicción y se pueden usar para partir de una base para un escalado más basado en la carga.

Automatización de la idea a la producción

A medida que mueve las aplicaciones a la nube, tiende a automatizar todo, según lo necesite para el desarrollo de Java a escala empresarial. Debe tener en cuenta el escalado automático para dar respuesta a las cargas de trabajo de la aplicación, tal como se ha descrito anteriormente. Pero también debe escalar y automatizar el entorno de la nube en su conjunto, idealmente partiendo de la idea hasta la producción, así como la forma de aprovisionar rápidamente nuevos entornos para las implementaciones de prueba, control de calidad, producción, implementaciones azul/verde, expansión geográfica, etc.

Diagrama donde se ven los cuadros de las categorías Aprovisionamiento, Compilación e Implementación con los logotipos asociados de las herramientas descritas en esta sección.

Azure le permite automatizar desde la idea hasta la producción mediante una amplia variedad de herramientas y plataformas. A un nivel alto, estas canalizaciones de automatización se pueden dividir en tres categorías:

  • Canalizaciones de aprovisionamiento: puede aprovisionar recursos de Azure mediante Terraform, plantillas de Azure Resource Manager (ARM), plantillas de Bicep o la CLI de Azure, según sea necesario, para crear scripts repetibles para unos entornos de puesta en marcha y de inactividad sistemáticos.

  • Canalizaciones de compilación: basadas en herramientas como Maven o Gradle, tal como se ha explicado anteriormente en esta documentación.

  • Canalizaciones de implementación: puede usar Acciones de GitHub, Azure Pipelines, Jenkins Pipelines, GitLab Pipelines o la CLI de Azure para automatizar las implementaciones de código, así como las implementaciones azul/verde que mantienen los sistemas esenciales en producción a medida que se implementan cambios en el código.

Seguir usando los sistemas y procedimientos existentes

A medida que migre o compile y después escale las aplicaciones Java en Azure, puede usar todo lo que haya asumido ya para redes, supervisión, automatización, proveedores de identidades, sistemas locales, herramientas de desarrollo y compilación y bibliotecas de aplicaciones. En la tabla siguiente se dan algunos ejemplos:

Category Servicios y productos del ecosistema de Java
Redes F5, Palo Alto, Cloudflare, Checkpoint, Infoblox
Supervisión New Relic, Dynatrace, AppDynamics, Elastic, Splunk
Automation Acciones GitHub, Azure Pipelines, Jenkins, GitLab
Proveedores de identidades Microsoft Entra ID, ForgeRock, Auth0, Ping, Okta
Sistema local Bases de datos (como Oracle DB o IBM DB2), mensajería (como IBM MQ o TIBCO EMS), creación de eventos (como Kafka), directorios (como Microsoft Entra ID, OpenLDAP o IBM ID)
Herramientas de desarrollo IntelliJ, Visual Studio Code, Eclipse, Spring Tool Suite, Maven, Gradle

Arquitecturas de referencia

El Centro de arquitectura de Azure ofrece una serie de instrucciones para crear soluciones en Azure mediante patrones y procedimientos establecidos y en él se explica también cómo poner en uso estas funcionalidades. Estas arquitecturas de referencia se basan en lo que hemos aprendido de las interacciones de los clientes, teniendo en cuenta la optimización de costes, la excelencia operativa, la eficiencia del rendimiento, la fiabilidad, la escalabilidad, la seguridad, la supervisión, las pruebas de humo y mucho más. También se encargan de componentes de diseño de soluciones como zonas de aterrizaje de Azure: entornos para hospedar las cargas de trabajo que se aprovisionan previamente a través de la infraestructura como código, según sea necesario, para habilitar las migraciones de aplicaciones Java y el desarrollo desde cero a escala empresarial.

Por ejemplo, este es un acelerador de zonas de aterrizaje para Azure Container Apps, en el que se ve cómo implementar un diseño centralizado tipo hub-and-spoke en el que Azure Container Apps se implementa en un único radio que depende de los servicios compartidos hospedados en el centro. Este proyecto se crea con componentes para cumplir los principios del Marco de buena arquitectura de Microsoft Azure. Para ver una implementación de esta arquitectura, consulte el repositorio Acelerador de zonas de aterrizaje de Azure Container Apps en GitHub. Puede aplicar el mismo método a cualquier aplicación Java implementada en cualquier destino de procesos de Azure, como Azure App Service o Azure Kubernetes Service. Además, si tiene pensando migrar aplicaciones Java existentes a Azure, disponemos de una amplia variedad de guías sobre migración y estrategias recomendadas.

Diagrama con el título

Paso siguiente

Elegir los servicios de Azure adecuados para implementar aplicaciones Java