Compartir vía


Escalado con seguridad, supervisión y automatización de un extremo a otro

Al diseñar aplicaciones, es necesario determinar cómo adaptarse a los cambios en la carga de trabajo, recuperarse de errores inesperados, minimizar los riesgos de seguridad, etc. Aunque podría empezar con un enfoque de prueba y error, que tarda tiempo en otros objetivos de la organización y podría afectar negativamente a nuestra reputación. Azure proporciona instrucciones arquitectónicas necesarias para obtener las cosas directamente desde el principio. También tiene todo lo que necesita para crear una aplicación escalable, desde la seguridad de última generación y el escalado automático 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 no se bloquea en soluciones propietarias.

Diagrama con el encabezado

Ahora echemos un vistazo a algunos servicios y características clave de Azure, y cómo puede ponerlos a usar para compilar aplicaciones Java escalables.

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

Además de proporcionar varias opciones para ejecutar el código Java, Azure ofrece una amplia gama de servicios totalmente administrados para satisfacer sus necesidades de base de datos, como Azure Database for PostgreSQL, Azure Database for MySQL, MongoDB Atlas, Azure Cosmos DB, Azure SQL Database y Azure SQL Instancia administrada. 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 y integraciones de servidor de aplicaciones. Todos proporcionan las garantías de cumplimiento, disponibilidad y confiabilidad que esperaría de Microsoft y Azure. Muchos desarrolladores de Java y Spring quieren usar bibliotecas idiomáticas para simplificar las conexiones a sus servicios en la nube preferidos. Microsoft mantiene una lista completa de bibliotecas, controladores y módulos que permiten interactuar fácilmente con los servicios de Azure entre datos, mensajería, caché, almacenamiento, eventos, directorios y administración de secretos. Para más información, consulte la guía para desarrolladores de Azure de Spring Cloud.

Diagrama en el que se enumeran las características de Spring Cloud Azure y los servicios de Azure asociados.

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

Confianza cero: red segura

Puede proteger las aplicaciones Java mediante su implementación en una instancia de Azure Virtual Network: el bloque de creación fundamental para sus propias redes privadas en Azure. Las redes virtuales permiten que muchos tipos de recursos de Azure se comuniquen de forma segura entre sí, con Internet y con sus redes y sistemas locales. Puede usar una red virtual para aislar las aplicaciones y admitir los servicios back-end de Internet y colocarlas en las redes privadas. Puede asumir el control total de la entrada y salida de las aplicaciones y los sistemas back-end.

Diagrama de la arquitectura de referencia de Azure Spring Apps.

Confianza cero: comunicaciones seguras de un extremo a otro

La implementación de comunicaciones seguras como parte de una arquitectura de solución puede ser difícil. Muchas empresas rotan manualmente sus certificados o crean sus propias soluciones para automatizar el aprovisionamiento y la configuración. Incluso después, todavía existen riesgos de filtración de datos, como la copia no autorizada o la transferencia de datos.

Con Azure, puede proteger las comunicaciones de un extremo a otro o finalizar la seguridad de nivel de transporte en cualquier punto de comunicación. También puede automatizar el aprovisionamiento y la configuración de todos los recursos de Azure necesarios para proteger las comunicaciones. Para ver cómo funciona para Azure Spring Apps, consulte Protección de las comunicaciones de un extremo a otro para aplicaciones de Spring Boot en Confianza cero entorno. El proceso es similar para los otros servicios de proceso de Azure que puede usar para ejecutar las aplicaciones Java.

En función del principio de "nunca confiar, comprobar siempre y sin credenciales", Confianza cero ayuda a proteger todas las comunicaciones eliminando certificados desconocidos y no administrados, y solo confiando en certificados compartidos comprobando la identidad antes de conceder acceso a esos certificados. Puede usar cualquier tipo de certificado TLS/SSL, incluidos los certificados emitidos por una entidad de certificación, certificados de validación extendidos, certificados comodín compatibles con cualquier número de subdominios o certificados autofirmados para entornos de desarrollo y pruebas.

Las aplicaciones de Java o Spring Boot pueden cargar certificados de forma segura desde Azure Key Vault (se describe a continuación). 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 JCA (Arquitectura de criptografía de Java) de Azure Key Vault.

Diagrama de la arquitectura para las comunicaciones de un extremo a otro seguras 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 enorme 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 desplaza el riesgo del propio código al entorno de ejecución.

Diagrama con el encabezado

Azure Key Vault proporciona una manera mejor, segura y segura de proteger los secretos. Proporciona control total sobre el almacenamiento y la distribución de secretos de aplicación, mediante el control de acceso basado en rol (RBAC) y el principio de privilegios mínimos para limitar el acceso. Mantenga el control sobre los secretos de la aplicación: conceda permiso para que las aplicaciones las usen según sea necesario. Tras el inicio de la aplicación, antes de conceder acceso a secretos, la aplicación se autentica con el identificador de Microsoft Entra y Azure Key Vault autoriza mediante Azure RBAC. Azure Key Vault incluye funcionalidades de auditoría completas y tiene dos niveles de servicio: Estándar, que cifra con una clave de software y un nivel Premium, que incluye claves protegidas por módulos de seguridad de hardware (HSM).

Autenticación y autorización del usuario final

La mayoría de las aplicaciones java empresariales requieren autenticación y autorización de usuario, que puede implementar mediante el identificador de Entra de Microsoft: una solución completa de administración de identidades y acceso con seguridad integrada. Las cuentas de usuario final pueden ser identidades organizativas o identidades sociales de Facebook, Twitter o Gmail mediante microsoft Entra ID y Azure Active Directory B2C. Puede implementar soluciones basadas en id. de Microsoft Entra 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 de su elección, como ForgeRock, Auth0, Ping o Okta.

Supervisión de un extremo a otro

Con Azure, puede supervisar las aplicaciones Java de un extremo a otro mediante cualquier herramienta y plataforma. Como alternativa, puede implementar una supervisión nativa totalmente administrada, incluida la supervisión del rendimiento de aplicaciones (APM), mediante Application Ideas, una característica de Azure Monitor. Proporciona una sólida compatibilidad con Java, Spring y marcos como Micrometer y Spring Boot, lo que le permite identificar y solucionar problemas rápidamente. Entre las características se incluyen el streaming de métricas en vivo, la tasa de solicitudes y el seguimiento del tiempo de respuesta, el seguimiento de eventos y las tasas de dependencias externas: todo lo que necesita para supervisar la disponibilidad, el rendimiento, la confiabilidad y el uso de las aplicaciones Java que se ejecutan en Azure o en el entorno local.

Puede supervisar de un extremo a otro agregando registros y métricas en Log Analytics, una herramienta de Azure Portal, que se puede usar 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, a continuación, usar 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, como podría ser necesario para 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 alertas de consulta de registro o libros, Log Analytics es una buena herramienta para escribir y probar las consultas.

Dicho esto, nos damos cuenta de que es posible que los clientes que traigan sus aplicaciones Java a Azure quieran seguir usando las mismas herramientas de APM que usan para supervisar sus aplicaciones locales. Para admitir este uso, nos asociamos con New Relic, AppDynamics, Dynatrace y Elastic para integrar sus soluciones de supervisión con App de Azure Service y Azure Spring Apps. Los agentes de supervisión se ejecutan en paralelo con el código e instalamos y mantenemos los agentes actualizados automáticamente. 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 de un extremo a otro agregando registros y métricas en Elastic y Splunk.

Diagrama con el encabezado

También sabemos que muchos clientes quieren seguir usando Grafana para consultar, visualizar, alertar y comprender sus métricas. Por este motivo, nos asociamos 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 su visualización y análisis. 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 del rendimiento de aplicaciones (APM) con servicios de proceso de Azure como App de Azure Service, Azure Spring Apps, Azure Kubernetes Service, Splunk, Datadog y Azure Virtual Machines.

Aceleración de aplicaciones Java mediante el almacenamiento en caché

A medida que crecen las cargas de trabajo de las aplicaciones Java, puede aumentar el rendimiento mediante Azure Cache for Redis para implementar una capa de almacenamiento en caché en memoria para los resultados de la consulta, los estados de sesión y el contenido estático. Es una excelente manera 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, incluidas 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 encabezado

Escalado automático

Todos los servicios de Azure "compute" para ejecutar aplicaciones Java admiten el escalado automático (escalado automático), lo que puede ayudarle a maximizar la rentabilidad y adaptarse a las cargas de trabajo cambiantes sin pagar por más capacidad de la que necesita. Una vez habilitado, puede estar seguro de que el escalado automático se encarga de la infraestructura subyacente y de las cargas de trabajo de la aplicación.

Diagrama con el encabezado

Puede escalar o reducir horizontalmente automáticamente en función de la carga o programación. En el modo basado en la carga (o basado en métricas), las aplicaciones se escalan horizontalmente a 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 programación, las aplicaciones se escalan horizontalmente y se escalan horizontalmente en función de una programación y límites definidos. El modo basado en programación es útil para las cargas de trabajo que siguen un patrón de predicción y se pueden usar para establecer una línea 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, quiere automatizar todo, según sea necesario para el desarrollo de Java a escala empresarial. Debe tener en cuenta el escalado automático para abordar las cargas de trabajo de la aplicación, como se ha descrito anteriormente. Pero también debe escalar y automatizar el entorno de nube en su conjunto, idealmente desde la idea hasta la producción, incluida la forma de aprovisionar rápidamente nuevos entornos para las implementaciones de prueba, QA, producción, azul/verde, expansión geográfica, etc.

Diagrama que muestra cuadros para las categorías Aprovisionamiento, Compilación e Implementación con logotipos asociados para las herramientas descritas en esta sección.

Azure le permite automatizar de idea a producción mediante una amplia gama de herramientas y plataformas. En 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 los entornos de puesta en marcha y de rotación coherentes.

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

  • Canalizaciones de implementación: puede usar Acciones de GitHub, Azure Pipelines, Jenkins Pipelines, Canalizaciones de GitLab o la CLI de Azure para automatizar las implementaciones de código, incluidas las implementaciones azules o verdes que mantienen los sistemas críticos en producción a medida que implementa actualizaciones de código.

Seguir usando los sistemas y prácticas existentes

A medida que migre o compile y, a continuación, escale las aplicaciones Java en Azure, puede usar las inversiones existentes en 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 proporcionan 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 de 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), 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 proporciona instrucciones para crear soluciones en Azure mediante patrones y prácticas establecidos, incluido cómo poner estas funcionalidades en uso. Estas arquitecturas de referencia se basan en lo que hemos aprendido de las interacciones de los clientes, teniendo en cuenta la optimización de costos, la excelencia operativa, la eficiencia del rendimiento, la confiabilidad, la escalabilidad, la seguridad, la supervisión, las pruebas de humo y mucho más. También abordan 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 de greenfield a escala empresarial.

Por ejemplo, este es un acelerador de zona de aterrizaje para Azure Spring Apps, en el que se muestra cómo implementar un diseño en estrella tipo hub-and-spoke en el que Azure Spring Apps se implementa en un único radio que depende de los servicios compartidos hospedados en el centro. Este proyecto se crea con componentes para lograr los principios del marco de microsoft Azure Well-Architected. Para explorar una implementación de esta arquitectura, consulte el repositorio acelerador de zonas de aterrizaje de Azure Spring Apps en GitHub. Puede aplicar el mismo enfoque a cualquier aplicación java implementada en cualquier destino de Azure "compute", como App de Azure Service, Azure Container Apps o Azure Kubernetes Service. Además, si está examinando la migración de aplicaciones Java existentes a Azure, tenemos un conjunto completo de guías de migración y estrategias recomendadas.

Diagrama con el encabezado

Paso siguiente

Elección de los servicios de Azure adecuados para las aplicaciones de Java