Migración de aplicaciones de Spring Cloud a Azure Container Apps
En esta guía se describe lo que hay que tener en cuenta para migrar una aplicación de Spring Cloud existente para que se ejecute en Azure Container Apps.
Antes de la migración
Para asegurarse de que la migración se realiza correctamente, antes de empezar, complete los pasos de evaluación e inventario descritos en las secciones siguientes.
Si no puede cumplir alguno de los requisitos previos a la migración, consulte las siguientes guías de migración complementarias:
- Migración de aplicaciones JAR ejecutables a contenedores en Azure Kubernetes Service (planeada)
- Migración de aplicaciones JAR ejecutables a Azure Virtual Machines (planeada)
Inspección de los componentes de la aplicación
Determinación de si se usa el sistema de archivos y cómo
Busque cualquier instancia en la que los servicios lean o escriban en el sistema de archivos local. Identifique dónde se escriben y se leen los archivos temporales o a corto plazo, y dónde se escriben y se leen los archivos de larga duración.
Azure Container Apps ofrece varios tipos de almacenamiento. El almacenamiento efímero puede leer y escribir datos temporales y estar disponible para un contenedor o réplica en ejecución. Azure File incluye almacenamiento permanente y se puede compartir en varios contenedores. Para obtener más información, consulte Uso de montajes de almacenamiento en Azure Container Apps.
Contenido estático de solo lectura
Si su aplicación actualmente trabaja con contenido estático, necesitará una ubicación alternativa para él. Es posible que le convenga mover el contenido estático a Azure Blob Storage y agregar Azure CDN para que las descargas sean mucho más rápidas globalmente. Para más información, consulte Hospedaje de sitios web estáticos en Azure Storage e Inicio rápido: Integración de una cuenta de una instancia de Azure Storage con Azure CDN.
Contenido estático publicado dinámicamente
Si la aplicación admite contenido estático, ya sea cargado o generado por la propia aplicación, que permanece sin cambios después de crearse, puede integrar Azure Blob Storage y Azure CDN. También puede usar una función de Azure para administrar las cargas y activar actualizaciones de CDN cuando sea necesario. Hemos proporcionado una implementación de ejemplo para su uso en Cargar y carga previa en CDN de contenido estático con Azure Functions.
Determinación de si alguno de los servicios contiene código específico del sistema operativo
Si la aplicación contiene código con dependencias en el sistema operativo del host, deberá refactorizarla para quitar esas dependencias. Por ejemplo, es posible que tenga que reemplazar cualquier uso de /
o \
en las rutas del sistema de archivos con File.Separator
o Paths.get
si la aplicación se ejecuta en Windows.
Cambio a una plataforma compatible
Si crea el Dockerfile de forma manual e implementa una aplicación contenedorizada en Azure Container Apps, tendrá control total sobre la implementación, incluidas las versiones de JRE/JDK.
Para realizar la implementación a partir de artefactos, Azure Container Apps también ofrece versiones específicas de Java (8, 11, 17 y 21) y versiones específicas de los componentes de Spring Boot y Spring Cloud. Para garantizar la compatibilidad, migre primero la aplicación a una de las versiones de Java admitidas en su entorno actual antes de continuar con los pasos restantes de la migración. Asegúrese de probar por completo la configuración resultante. Use la versión estable más reciente de la distribución de Linux en dichas pruebas.
Nota:
Esta validación es especialmente importante si el servidor actual se está ejecutando en un JDK no compatible (como Oracle JDK o IBM OpenJ9).
Para obtener la versión actual de Java, inicie sesión en el servidor de producción y ejecute el siguiente comando:
java -version
Para conocer las versiones compatibles de Java, Spring Boot y Spring Cloud, así como las instrucciones para actualizarlas, consulte Introducción a Java en Azure Container Apps.
Identificación de las versiones de Spring Boot
Examine las dependencias de cada aplicación que se va a migrar para determinar su versión de Spring Boot.
Maven
En los proyectos de Maven, la versión de Spring Boot se encuentra normalmente en el elemento <parent>
del archivo POM:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Gradle
En los proyectos de Gradle, la versión de Spring Boot se encontrará normalmente en la sección plugins
, como la versión del complemento org.springframework.boot
:
plugins {
id 'org.springframework.boot' version '3.3.3'
id 'io.spring.dependency-management' version '1.1.6'
id 'java'
}
Para cualquier aplicación que use versiones de Spring Boot anteriores a la 3.x, consulte la guía de migración de Spring Boot 2.0 o la Guía de migración de Spring Boot 3.0 para actualizarlas a una versión de Spring Boot compatible. En el caso de las versiones admitidas, consulte la documentación de Spring Cloud.
Identificación de las versiones de Spring Cloud
Examine las dependencias de cada aplicación que va a migrar para determinar la versión de los componentes de Spring Cloud que usa.
Maven
En los proyectos de Maven, la versión de Spring Cloud normalmente se establece en la propiedad spring-cloud.version
:
<properties>
<spring-cloud.version>2023.0.2</spring-cloud.version>
</properties>
Gradle
En los proyectos de Gradle, la versión de Spring Cloud normalmente se establece en el bloque "extra properties" (propiedades adicionales):
ext {
set('springCloudVersion', "2023.0.2")
}
Tendrá que actualizar todas las aplicaciones para que usen las versiones compatibles de Spring Cloud. En el caso de las versiones admitidas, consulte la documentación de Spring Cloud.
Identificación de soluciones de agregación de registros
Identifique todas las soluciones de agregación de registros que estén usando las aplicaciones que va a migrar. Debe configurar los ajustes de diagnóstico en la migración para que los eventos registrados estén disponibles para su consumo. Para obtener más información, consulte la sección Asegurar el registro de la consola y configurar las opciones de diagnóstico.
Identificación de los agentes de administración del rendimiento de la aplicación (APM)
Identifique qué agentes de gestión del rendimiento de las aplicaciones que usen sus aplicaciones. Azure Containers Apps no ofrece compatibilidad integrada con la integración de APM. Debe preparar la imagen de contenedor o integrar la herramienta de APM directamente en el código. Si quiere analizar el rendimiento de la aplicación, pero aún no ha integrado ningún APM, puede usar Azure Application Insights. Para obtener más información, consulte la sección Migración.
Recursos externos de inventario
Identifique los recursos externos, tales como los orígenes de datos, los agentes de mensajes JMS y las direcciones URL de otros servicios. En las aplicaciones de Spring Cloud, la configuración de estos recursos normalmente se encuentra en una de las siguientes ubicaciones:
- En la carpeta src/main/resources, en un archivo llamado normalmente application.properties o application.yml.
- En el repositorio de Spring Cloud Config Server que se identificó en el paso anterior.
Bases de datos
En el caso de una aplicación de Spring Boot, las cadenas de conexión suelen aparecer en archivos de configuración cuando depende de una base de datos externa. A continuación se muestra un ejemplo de un archivo application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.username=dbuser
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
A continuación se muestra un ejemplo de un archivo application.yaml:
spring:
data:
mongodb:
uri: mongodb://mongouser:deepsecret@mongoserver.contoso.com:27017
Consulte la documentación de Spring Data para ver posibles escenarios de configuración:
Agentes de mensajes de JMS
Identifique a los agentes en uso; para ello, busque las dependencias pertinentes en el manifiesto de compilación (normalmente, un archivo pom.xml o build.gradle).
Por ejemplo, una aplicación de Spring Boot con ActiveMQ normalmente contendría esta dependencia en su archivo pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
Las aplicaciones Spring Boot que utilizan brokers comerciales suelen contener dependencias directas de las bibliotecas de controladores JMS de los brokers. A continuación se muestra un ejemplo de un archivo build.gradle:
dependencies {
...
compile("com.ibm.mq:com.ibm.mq.allclient:9.4.0.5")
...
}
Una vez identificados los agentes en uso, busque la configuración correspondiente. En las aplicaciones de Spring Cloud, normalmente se encuentran en los archivos application.properties y application.yml, en el directorio de la aplicación o en el repositorio de Spring Cloud Config Server.
Nota:
Microsoft recomienda usar el flujo de autenticación más seguro disponible. El flujo de autenticación descrito en este procedimiento, como para bases de datos, memorias caché, mensajería o servicios de inteligencia artificial, requiere un grado de confianza muy alto en la aplicación y conlleva riesgos que no están presentes en otros flujos. Use este flujo solo cuando las opciones más seguras, como las identidades administradas para conexiones sin contraseña o sin claves, no sean viables. En el caso de las operaciones de máquina local, prefiera identidades de usuario para conexiones sin contraseña o sin claves.
A continuación, se muestra un ejemplo de ActiveMQ de un archivo application.properties:
spring.activemq.brokerurl=broker:(tcp://localhost:61616,network:static:tcp://remotehost:61616)?persistent=false&useJmx=true
spring.activemq.user=admin
spring.activemq.password=<password>
Para más información sobre la configuración de ActiveMQ, consulte la documentación de Spring Boot sobre mensajería.
A continuación, se muestra un ejemplo de IBM MQ de un archivo application.yaml:
ibm:
mq:
queueManager: qm1
channel: dev.ORDERS
connName: localhost(14)
user: admin
password: <password>
Para más información sobre la configuración de IBM MQ, consulte la documentación IBM MQ Spring sobre componentes.
Identificación de cachés externas
Identifique cualquier caché externa en uso. Con frecuencia, Redis se usa a través de Spring Data Redis. Para más información de configuración, consulte la documentación de Spring Data Redis.
Determine si los datos de la sesión se almacenan en memoria caché mediante Spring Session; para ello, consulte la configuración correspondiente (en Java o XML).
Proveedores de identidades
Identifique todos los proveedores de identidades y todas las aplicaciones de Spring Cloud que requieran autenticación o autorización. Para obtener información sobre cómo puede configurar los proveedores de identidad, consulte los siguientes recursos:
- Para la configuración de OAuth2, consulte la guía de inicio rápido de Spring Cloud Security.
- Para más información sobre la configuración de Auth0 en Spring Security, consulte la documentación de Auth0 en Spring Security.
- Para más información sobre la configuración de PingFederate en Spring Security, consulte las instrucciones sobre cómo usar Auth0 con PingFederate.
Recursos configurados mediante Tanzu Application Service de VMware (antes llamado Pivotal Cloud Foundry)
En el caso de las aplicaciones administradas con TAS, los recursos externos, incluidos los recursos descritos anteriormente, a menudo se configuran mediante enlaces de servicio TAS. Para ver la configuración de estos recursos, use la CLI de TAS (Cloud Foundry) para ver la variable VCAP_SERVICES
de la aplicación.
# Log into TAS, if needed (enter credentials when prompted)
cf login -a <API endpoint>
# Set the organization and space containing the application, if not already selected during login.
cf target org <organization name>
cf target space <space name>
# Display variables for the application
cf env <Application Name>
Examine la variable VCAP_SERVICES
para obtener los valores de configuración de los servicios externos enlazados a la aplicación. Para obtener más información, consulte Documentación de TAS (Cloud Foundry).
Todos los demás recursos externos
No es factible documentar todas las dependencias externas posibles en esta guía. Es responsabilidad del equipo comprobar que puede cumplir todas las dependencias externas de la aplicación después de la migración.
Orígenes y secretos de configuración de inventario
Contraseñas y cadenas seguras de inventario
Compruebe si hay cadenas secretas y contraseñas en todas las propiedades, los archivos de configuración y las variables de entorno de las implementaciones de producción. En una aplicación de Spring Cloud, normalmente encontrará estas cadenas en el archivo application.properties o application.yml en servicios concretos o en el repositorio de Spring Cloud Config Server.
Certificados de inventario
Documente todos los certificados utilizados para los puntos de conexión SSL públicos o la comunicación con las bases de datos de backend y otros sistemas. Para ver todos los certificados de los servidores de producción, ejecute el siguiente comando:
keytool -list -v -keystore <path to keystore>
Determinación de si se usa Spring Cloud Vault
Si usa Spring Cloud Vault para almacenar secretos y acceder a ellos, identifique el almacén de secretos de reserva (por ejemplo, HashiCorp Vault o CredHub). Después, identifique todos los secretos utilizados por el código de la aplicación.
Localización del origen del servidor de configuración
Si la aplicación usa un Spring Cloud Config Server, identifique dónde se almacena la configuración. Por lo general, encontrará esta opción en el archivo bootstrap.yml o bootstrap.properties o, en ocasiones, en el archivo application.yml o application.properties. El ajuste se parece al del ejemplo siguiente:
spring.cloud.config.server.git.uri: file://${user.home}/spring-cloud-config-repo
Aunque git es habitualmente el almacén de datos de reserva de Spring Cloud Config Server, como se ha indicado anteriormente, es posible que se esté usando uno de los otros servidores de backend posibles. Consulte la documentación de Spring Cloud Config Server para obtener más información sobre otros servidores de backend, como Relational Database (JDBC), SVN y el sistema de archivos local.
Inspección de la arquitectura de implementación
Requisitos de hardware para cada servicio
Para cada uno de los servicios de Spring Cloud (sin incluir el servidor de configuración, el registro o la puerta de enlace), documente la siguiente información:
- Número de instancias en ejecución.
- Número de CPU asignadas a cada instancia.
- Cantidad de RAM asignada a cada instancia.
Documentación de la distribución y replicación geográfica
Determine si las aplicaciones de Spring Boot están distribuidas actualmente entre varias regiones o centros de datos. Documente los requisitos de tiempo de actividad o el Acuerdo de Nivel de Servicio de las aplicaciones que va a migrar.
Identificación de los clientes que omiten el registro del servicio
Identifique las aplicaciones cliente que invoquen a cualquiera de los servicios que se van a migrar sin usar el registro de Spring Cloud Service. Después de la migración, estas invocaciones ya no serán posibles. Actualice estos clientes para usar Spring Cloud OpenFeign antes de la migración.
Migración
Eliminar configuraciones restringidas
El entorno de Azure Container Apps ofrece el servidor administrado Eureka, Spring Cloud Config Server y Admin. Cuando una aplicación está vinculada al componente de Java, Azure Container Apps inserta las propiedades relacionadas como variables de entorno del sistema. Según el diseño Configuración externalizada de Spring Boot, las propiedades de la aplicación definidas en el código o empaquetadas en artefactos se sobrescriben mediante variables de entorno del sistema.
Si crea una de las siguientes propiedades mediante un argumento en la línea de comandos, una propiedad del sistema de Java o una variable de entorno del contenedor, debe quitarla para evitar conflictos y acciones inesperadas:
SPRING_CLOUD_CONFIG_COMPONENT_URI
SPRING_CLOUD_CONFIG_URI
SPRING_CONFIG_IMPORT
eureka.client.fetch-registry
eureka.client.service-url.defaultZone
eureka.instance.prefer-ip-address
eureka.client.register-with-eureka
SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP
SPRING_BOOT_ADMIN_CLIENT_URL
Crear un entorno administrado y aplicaciones de Azure Container Apps
Aprovisione una aplicación de Azure Container Apps en su suscripción de Azure en un entorno administrado existente o cree uno nuevo para cada servicio que vaya a migrar. No es necesario crear aplicaciones que se ejecuten como servidores de registro y configuración de Spring Cloud. Para obtener más información, consulte Inicio rápido: implementación de la primera aplicación contenedora mediante Azure Portal.
Preparación de Spring Cloud Config Server
Configure el servidor de configuración en Azure Container Apps para el componente de Spring. Para obtener más información, consulte Configurar las opciones de Config Server para el componente de Spring en Azure Container Apps.
Nota:
Si el repositorio de Spring Cloud Config actual está en el sistema de archivos local o en un entorno local, primero deberá migrar o replicar los archivos de configuración a un repositorio en la nube, como GitHub, Azure Repos o BitBucket.
Comprobación del registro de la consola y configuración de los valores de diagnóstico
Configure el registro para garantizar todo lo que se genere se enrute a la consola y no a los archivos.
Una vez implementada una aplicación en Azure Container Apps, puede configurar las opciones de registro en el entorno de Container Apps para definir uno o varios destinos de los registros. Estos destinos pueden ser Azure Monitor Log Analytics, Azure Event Hubs o incluso otras soluciones de supervisión de terceros. También tiene la opción de deshabilitar los datos de registro y ver los registros solo en tiempo de ejecución. Para obtener indicaciones detalladas sobre la configuración, consulte Opciones de almacenamiento y supervisión de registros en Azure Container Apps.
Configuración de almacenamiento persistente
Si alguna parte de la aplicación lee o escribe en el sistema de archivos local, deberá configurar el almacenamiento persistente para reemplazar el sistema de archivos local. Puede indicar la ruta de acceso que se va a montar en el contenedor a través de los ajustes de la aplicación y enlazarla con la ruta de acceso que usa la aplicación. Para obtener más información, consulte Uso de montajes de almacenamiento en Azure Container Apps.
Migración de secretos de Spring Cloud Vault a Azure KeyVault
Para inyectar secretos directamente en las aplicaciones mediante Spring con el iniciador de Spring Boot para Azure KeyVault. Para más información, consulte Cómo usar el iniciador de Spring Boot para Azure Key Vault.
Nota:
Para la migración es posible que se necesite cambiar el nombre de algunos secretos. Actualice el código de la aplicación como sea necesario.
Migración de todos los certificados a KeyVault
Azure Containers Apps acepta la comunicación segura entre aplicaciones. La aplicación no necesita administrar el proceso de establecimiento de comunicaciones seguras. Puede cargar el certificado privado en Azure Container Apps o usar un certificado administrado gratuito facilitado por Azure Container Apps. Se recomienda usar Azure Key Vault para administrar certificados. Para obtener más información, consulte Certificados en Azure Container Apps.
Configuración de las integraciones de administración del rendimiento de la aplicación (APM)
Si ya ha configurado variables relacionadas con APM dentro del contenedor, lo único que debe hacer es asegurarse de que se pueda establecer la conexión a la plataforma de APM de destino. Si la configuración de APM hace referencia a variables de entorno del contenedor, debe crear las variables de entorno en tiempo de ejecución según corresponda en Azure Container Apps. La información confidencial, como la cadena de conexión, debe gestionarse de forma segura. Puede designarla como secreto o hacer referencia a un secreto almacenado en Azure Key Vault.
Configuración de secretos por servicio y configuraciones externalizadas
Puede insertar opciones de configuración en cada contenedor como variables de entorno. Los cambios en las variables crean una nueva revisión para la aplicación existente. Los secretos son pares clave-valor y son válidos en todas las revisiones.
Migración y habilitación del proveedor de identidades
Si alguna de las aplicaciones de Spring Cloud requiere autenticación o autorización, consulte las siguientes indicaciones para garantizar que están configuradas para acceder al proveedor de identidades:
- Si el proveedor de identidad es Microsoft Entra ID, no debería ser necesario realizar ningún cambio.
- Si el proveedor de identidad es un bosque de Active Directory local, considere implementar una solución de identidad híbrida con Microsoft Entra ID. Para más instrucciones, consulte la documentación sobre identidades híbridas.
- Si el proveedor de identidad es otra solución local, como PingFederate, consulte el tema Instalación personalizada de Microsoft Entra Connect para configurar la federación con Microsoft Entra ID. Como alternativa, considere la posibilidad de usar Spring Security para usar el proveedor de identidades mediante OAuth2/OpenID Connect o SAML.
Actualización de aplicaciones cliente
Modifique la configuración de todas las aplicaciones cliente para utilizar los puntos de conexión publicados de Azure Container Apps en las aplicaciones migradas.
Después de la migración
Ahora que ha completado la migración, compruebe que la aplicación funciona como se espera. Después, tenga en cuenta las recomendaciones siguientes para que su aplicación se comporte de forma más nativa en la nube.
Considere la posibilidad de habilitar la aplicación para que funcione con el registro de Spring Cloud. Este componente permite que otras aplicaciones de Spring y clientes implementados detecten dinámicamente la aplicación. Para obtener más información, consulte Configurar las opciones de Eureka Server para el componente de Spring en Azure Container Apps. A continuación, modifique los clientes de la aplicación para que usen el equilibrador de carga de Spring Client. El equilibrador de carga de Spring Client permite al cliente obtener direcciones de todas las instancias en ejecución de la aplicación y detectar una instancia que funcione si otra instancia queda dañada o deja de responder. Para obtener más información, consulte Consejos sobre Spring: Equilibrador de carga de Spring Cloud en el blog de Spring.
En lugar de convertir la aplicación en pública, considere la posibilidad de agregar una instancia de Spring Cloud Gateway. Spring Cloud Gateway ofrece un punto de conexión único para todas las aplicaciones implementadas en el entorno de Azure Container Apps. Si ya hay implementada una instancia de Spring Cloud Gateway, asegúrese de que haya configurada una regla destinada a dirigir el tráfico a la aplicación recién implementada.
Tiene la opción de agregar un servidor de Spring Cloud Config Server para administrar de forma centralizada y configurar el control de versiones de todas las aplicaciones de Spring Cloud. En primer lugar, cree un repositorio de Git para hospedar la configuración y configurar la instancia de la aplicación para usarla. Para obtener más información, consulte Configurar las opciones de Config Server para el componente de Spring en Azure Container Apps. A continuación, migre la configuración siguiendo estos pasos:
En el directorio src/main/resources de la aplicación, cree el archivo bootstrap.yml con el siguiente contenido:
spring: application: name: <your-application-name>
En el repositorio de Git de configuración, cree el archivo <your-application-name>.yml, donde
your-application-name
es el mismo que en el paso anterior. Mueva los ajustes del archivo application.yml en src/main/resources al nuevo archivo que acaba de crear. Si la configuración estaba anteriormente en un archivo .properties, deberá convertirlo primero a formato YAML. Puede encontrar herramientas en línea o complementos de IntelliJ para realizar esta conversión.Cree el archivo application.yml en el directorio anterior. Puede usar este archivo para definir la configuración y los recursos que se van a compartir entre todas las aplicaciones en el entorno de Azure Container Apps. Estos valores suelen incluir orígenes de datos, configuración de registro, configuración de Spring Boot Actuator y otros.
Confirme e inserte estos cambios en el repositorio de Git.
Elimine el archivo application.properties o application.yml de la aplicación.
Podría agregar el componente administrado Admin para Spring para habilitar una interfaz administrativa para las aplicaciones web de Spring Boot que expongan los puntos conexión del accionador. Para obtener más información, consulte Configuración del componente Admin de Spring Boot en Azure Container Apps.
Considere la posibilidad de agregar una canalización de implementación para realizar implementaciones automáticas y coherentes. Hay instrucciones disponibles para Azure Pipelines y Acciones de GitHub.
Tenga en cuenta que puede usar revisiones de aplicaciones de contenedor, etiquetas de revisión y volúmenes de tráfico de entrada para habilitar la implementación azul-verde, lo que le permite probar los cambios en el código en fase de producción antes de que estén disponibles para algunos o todos los usuarios finales. Para obtener más información sobre la implementación azul-verde, consulte Implementación azul-verde en Azure Container Apps.
Considere la posibilidad de agregar enlaces de servicio para conectar la aplicación a las bases de datos de Azure admitidas. Estos enlaces de servicio eliminarán la necesidad de proporcionar información de conexión, incluidas las credenciales, a las aplicaciones de Spring Cloud.
Tiene la opción de habilitar la pila de desarrollo de Java para recabar los indicadores principales de JVM para las aplicaciones. Para obtener más información, consulte Métricas de Java para aplicaciones Java en Azure Container Apps.
Considere la posibilidad de agregar reglas de alerta y grupos de acciones de Azure Monitor para detectar y resolver rápidamente las condiciones anómalas. Para obtener más información, consulte Crear alertas en Azure Container Apps.
Plantéese la posibilidad de replicar la aplicación en las zonas de la región habilitando la redundancia de zona de Azure Container Apps. La carga del tráfico se equilibra y se dirige automáticamente a las réplicas si se produce una interrupción en la zona. Para obtener más información sobre la configuración redundante, consulte Fiabilidad en Azure Container Apps.
Considere la posibilidad de proteger Azure Container Apps de ataques y vulnerabilidades comunes mediante Web Application Firewall en Application Gateway. Para obtener más información, consulte Proteger Azure Container Apps con Web Application Firewall en Application Gateway.
Si las aplicaciones usan componentes heredados de Spring Cloud Netflix, tiene la posibilidad de reemplazarlos por alternativas actuales, tal como se indica en la siguiente tabla:
Heredado Current Spring Cloud Azure Spring Cloud Service Registry Spring Cloud Netflix Zuul Spring Cloud Gateway Spring Cloud Netflix Archaius Spring Cloud Config Server Spring Cloud Netflix Ribbon Spring Cloud Load Balancer (equilibrador de carga en el lado cliente) Spring Cloud Hystrix Spring Cloud Circuit Breaker + Resilience4J Spring Cloud Netflix Turbine Micrometer + Prometheus