Migre un clúster de Spring Cloud que se ejecuta en Alibaba Cloud a Serverless App Engine (SAE) sin interrumpir el tráfico en producción. Este tema aborda el enfoque de registro dual y suscripción dual, donde las aplicaciones migradas y no migradas coexisten en la misma malla de servicios hasta completar la transición. Las aplicaciones se reinician solo una vez durante todo el proceso.
Hay una demostración funcional disponible en sc-migration-examples.zip.
Antes de empezar
Revise la siguiente lista de comprobación antes de iniciar la migración. Identificar los bloqueos a tiempo evita migraciones incompletas que requieran reversión.
|
Comprobación |
Acción si no se cumple |
|
Todas las aplicaciones usan detección de servicios de Spring Cloud (Eureka o Consul) |
Las aplicaciones que omiten la detección de servicios y llaman directamente por IP o nombre de host no pueden usar este enfoque. Actualice esos clientes antes de migrar. |
|
Los puertos de las instancias ECS están disponibles (no ocupados por otro proceso) |
Si los puertos están ocupados, utilice traffic-splitting solution en su lugar. |
|
Las aplicaciones son sin estado |
Las aplicaciones con estado requieren planificación adicional para la migración del estado. |
|
Se utilizan servicios de Alibaba Cloud (ApsaraDB RDS, Message Queue) para almacenamiento y mensajería |
El almacenamiento y la mensajería fuera de Alibaba Cloud requieren coordinación por separado. Únase al grupo 32874633 de DingTalk para obtener asistencia. |
Descripción general de la migración

La migración consta de tres fases:
|
Fase |
Pasos |
Obligatorio |
|
Migración |
Paso 1: Migrar aplicaciones |
Obligatorio |
|
Posmigración |
Paso 2: Migrar SLB o actualizar DNS |
Opcional |
|
Posmigración |
Paso 3: Migrar almacenamiento y colas de mensajes |
Opcional |
Elegir una solución de migración
Dos soluciones admiten la migración sin tiempo de inactividad:
|
Solución |
Funcionamiento |
Cuándo utilizarla |
|
Registro dual y suscripción dual (este tema) |
Registra las aplicaciones simultáneamente en el registro original y en Nacos. Las aplicaciones migradas y no migradas se detectan entre sí durante todo el proceso. |
Utilícela cuando los puertos ECS estén disponibles. Requiere solo un reinicio de la aplicación. |
|
División de tráfico |
Cambie el registro a Nacos mediante Spring Cloud Alibaba, despliegue un nuevo conjunto de aplicaciones en SAE y luego redirija el tráfico con Server Load Balancer (SLB) y nombres de dominio. |
Utilícela cuando los puertos ECS estén ocupados y no sea posible reutilizar las instancias. |
Para la solución de división de tráfico, consulte Modify service registration and discovery of applications to Nacos.
Funcionamiento del registro dual y la suscripción dual
Los siguientes diagramas muestran el estado del sistema en cada etapa de la migración.
Estado inicial
Etapa 1
Etapa 2
Etapa 3
Etapa 4
Propiedades clave:
Las aplicaciones migradas y no migradas se detectan y se llaman entre sí, lo que garantiza la continuidad del negocio.
Los únicos cambios de código necesarios son dos nuevas dependencias y una anotación en la clase principal.
Monitoree las llamadas a servicios consumidores y siga el progreso de la migración en tiempo real mediante SAE.
Controle las políticas de registro y suscripción de forma dinámica mediante la gestión de configuración de SAE; no se requieren reinicios repetidos. Las aplicaciones se reinician solo una vez.
Paso 1: Migrar la primera aplicación
1. Seleccionar una aplicación
Comience con los proveedores subyacentes, es decir, servicios que no tienen dependencias ascendentes. Si el rastreo de llamadas es complejo o difícil de mapear, seleccione cualquier aplicación para comenzar.
2. Agregar dependencias y actualizar la configuración
a. Agregar la dependencia de detección de Nacos
Agregue spring-cloud-starter-alibaba-nacos-discovery a pom.xml:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>{Version}</version>
</dependency>
b. Configurar la dirección del servidor Nacos
Agregue lo siguiente a application.properties:
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
c. Agregar la dependencia de migración de registros múltiples
De forma predeterminada, Spring Cloud permite solo un registro. Agregar un segundo registro provoca un error. La dependencia edas-sc-migration-starter elimina esta restricción y habilita el registro simultáneo en varios registros.
Agréguela a pom.xml:
<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-sc-migration-starter</artifactId>
<version>1.0.2</version>
</dependency>
3. Actualizar la configuración de RibbonClients
Para suscribirse a servicios desde varios registros, configure @RibbonClients para usar MigrationRibbonConfiguration en la clase principal.
Antes:
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
Después:
@SpringBootApplication
@RibbonClients(defaultConfiguration = MigrationRibbonConfiguration.class)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
Después de desplegar estos cambios, ya sea en sus propias instalaciones o en SAE, puede controlar en qué registros se registra o a cuáles se suscribe la aplicación mediante Spring Cloud Config o Nacos Config, sin reiniciar la aplicación. Para más detalles, consulte Dynamically adjust service registration and subscription policies y Manage application configurations .
4. Desplegar la aplicación en SAE
Despliegue la aplicación según sus requisitos. Para más detalles, consulte Deploy applications.
5. Comprobar la migración
Utilice cualquiera de los siguientes métodos:
Opción 1: Verificar el comportamiento del negocio
Confirme que su negocio funciona como se espera después del despliegue.
Opción 2: Revisar el monitoreo de suscripción de servicios
Si Spring Boot Actuator está habilitado, acceda al siguiente endpoint para ver la RibbonServerList de cada servicio suscrito. El campo serverGroup en metaInfo muestra a qué registro pertenece un nodo.
|
Versión de Spring Boot |
Endpoint |
|
1.x |
|
|
2.x |
|

Paso 2: Migrar otras aplicaciones
Migre todas las aplicaciones restantes a SAE en secuencia, siguiendo los mismos pasos que en Step 1.
Posmigración: Limpieza y finalización
Eliminar dependencias de migración
Una vez que todas las aplicaciones estén en SAE, elimine la configuración del registro original y la dependencia edas-sc-migration-starter.
edas-sc-migration-starter es una dependencia exclusiva para la migración. Dejarla instalada no afecta la estabilidad del servicio, pero limita la eficacia del balanceo de carga de Ribbon. Elimine la dependencia después de la migración y reinicie las aplicaciones en lotes durante horas de baja demanda.
Migrar SLB o actualizar la configuración de DNS
Después de migrar sus aplicaciones, gestione su instancia de SLB y la configuración de nombres de dominio:
Instancia de SLB
|
Escenario |
Acción |
|
El SLB existía antes de la migración |
Reutilícelo. Para detalles sobre la vinculación, consulte Bind a CLB instance to an application, and generate a public or private IP for it. |
|
No había SLB antes de la migración |
Cree una instancia de SLB y vincúlela a la aplicación de ingreso (como un API gateway). |
|
Los puertos ECS están ocupados |
Utilice la solución de división de tráfico. Agregue nuevas instancias ECS y luego reutilice el SLB existente o cree uno nuevo. |
Nombre de dominio
|
Escenario |
Acción |
|
SLB reutilizado |
No se necesitan cambios en el nombre de dominio. |
|
Nuevo SLB creado |
Agregue el nuevo SLB a la configuración del nombre de dominio y elimine la entrada anterior. Consulte Update DNS servers. |
Migrar almacenamiento y colas de mensajes
Si su aplicación utiliza servicios de Alibaba Cloud como ApsaraDB RDS y Message Queue, no necesita migrar el almacenamiento ni las colas de mensajes. Si su aplicación no está desplegada en Alibaba Cloud, únase al grupo 32874633 de DingTalk para obtener soporte técnico.
Ajustar dinámicamente las políticas de registro y suscripción de servicios
Utilice la función de gestión de configuración de SAE para ajustar las políticas de registro y suscripción en cualquier momento durante la migración, sin necesidad de reiniciar la aplicación.
Ajustar la política de suscripción
De forma predeterminada, SAE se suscribe y agrega datos de servicios de todos los registros relacionados.
Para suscribirse solo a registros específicos, establezca la propiedad spring.cloud.edas.migration.subscribes:
# Subscribe to services from both Eureka and Nacos
spring.cloud.edas.migration.subscribes=nacos,eureka
# Subscribe to services from Nacos only
spring.cloud.edas.migration.subscribes=nacos
Ajustar la política de registro
De forma predeterminada, SAE se registra en todos los registros relacionados.
Para excluir registros específicos, establezca la propiedad spring.cloud.edas.migration.registry.excludes:
# Register with all registries (default — leave blank)
spring.cloud.edas.migration.registry.excludes=
# Disable registration with Eureka only
spring.cloud.edas.migration.registry.excludes=eureka
# Disable registration with Nacos and Eureka
spring.cloud.edas.migration.registry.excludes=nacos,eureka
Utilice la función de gestión de configuración de SAE para actualizar esta propiedad en tiempo de ejecución sin reiniciar sus aplicaciones.