Migrez un cluster Spring Cloud hébergé sur Alibaba Cloud vers Serverless App Engine (SAE) sans interrompre le trafic en production. Cette rubrique présente l'approche d'enregistrement et d'abonnement doubles, où les applications migrées et non migrées coexistent au sein du même maillage de services jusqu'à la finalisation du basculement. Les applications ne redémarrent qu'une seule fois tout au long du processus.
Une démo fonctionnelle est disponible à l'adresse sc-migration-examples.zip.
Avant de commencer
Consultez la liste de vérification suivante avant d'entamer la migration. Identifier les obstacles tôt permet d'éviter les migrations incomplètes qui nécessiteraient un retour arrière.
| Vérification | Action si la condition n'est pas remplie |
|---|---|
| Toutes les applications utilisent la découverte de services Spring Cloud (Eureka ou Consul) | Les applications qui contournent la découverte de services et appellent les services directement par adresse IP ou nom d'hôte ne peuvent pas utiliser cette approche. Mettez à jour ces clients avant la migration. |
| Les ports des instances ECS sont disponibles (non occupés par un autre processus) | Si les ports sont occupés, utilisez plutôt la solution de répartition du trafic. |
| Les applications sont sans état | Les applications avec état nécessitent une planification supplémentaire pour la migration de l'état. |
| Les services Alibaba Cloud (ApsaraDB RDS, Message Queue) sont utilisés pour le stockage et la messagerie | Le stockage et la messagerie hors Alibaba Cloud requièrent une coordination distincte. Rejoignez le groupe DingTalk 32874633 pour obtenir de l'aide. |
Aperçu de la migration

La migration se déroule en trois phases :
| Phase | Étapes | Obligatoire |
|---|---|---|
| Migration | Étape 1 : Migrer les applications | Oui |
| Post-migration | Étape 2 : Migrer SLB ou mettre à jour le DNS | Non |
| Post-migration | Étape 3 : Migrer le stockage et les files d'attente de messages | Non |
Choisir une solution de migration
Deux solutions permettent une migration sans interruption de service :
| Solution | Fonctionnement | Cas d'utilisation |
|---|---|---|
| Enregistrement et abonnement doubles (cette rubrique) | Enregistrez les applications simultanément auprès du registre d'origine et de Nacos. Les applications migrées et non migrées se découvrent mutuellement tout au long du processus. | Utilisez cette méthode lorsque les ports ECS sont disponibles. Un seul redémarrage de l'application est nécessaire. |
| Répartition du trafic | Basculez le registre vers Nacos via Spring Cloud Alibaba, déployez un nouvel ensemble d'applications sur SAE, puis redirigez le trafic à l'aide de Server Load Balancer (SLB) et des noms de domaine. | Privilégiez cette option lorsque les ports ECS sont occupés et que les instances ne peuvent pas être réutilisées. |
Pour la solution de répartition du trafic, consultez la page Modifier l'enregistrement et la découverte de services des applications vers Nacos.
Fonctionnement de l'enregistrement et de l'abonnement doubles
Les schémas suivants illustrent l'état du système à chaque étape de la migration.
État initial
Étape 1
Étape 2
Étape 3
Étape 4
Caractéristiques principales :
Les applications migrées et non migrées se découvrent et s'appellent mutuellement, garantissant la continuité des activités.
Les seules modifications de code nécessaires consistent en deux nouvelles dépendances et une annotation sur la classe principale.
Surveillez les appels aux services consommateurs et suivez la progression de la migration en temps réel via SAE.
Contrôlez dynamiquement les politiques d'enregistrement et d'abonnement via la gestion de configuration SAE, sans redémarrages répétés. Les applications ne redémarrent qu'une seule fois.
Étape 1 : Migrer la première application
1. Sélectionner une application
Commencez par les fournisseurs sous-jacents, c'est-à-dire les services qui n'ont aucune dépendance amont. Si la trace d'appel est complexe ou difficile à cartographier, sélectionnez n'importe quelle application pour démarrer.
2. Ajouter des dépendances et mettre à jour la configuration
a. Ajouter la dépendance de découverte Nacos
Ajoutez spring-cloud-starter-alibaba-nacos-discovery au fichier pom.xml :
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>{Version}</version>
</dependency>
b. Configurer l'adresse du serveur Nacos
Ajoutez les éléments suivants au fichier application.properties :
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
c. Ajouter la dépendance de migration multi-registres
Par défaut, Spring Cloud n'autorise qu'un seul registre. L'ajout d'un second registre génère une erreur. La dépendance edas-sc-migration-starter supprime cette restriction et permet l'enregistrement simultané auprès de plusieurs registres.
Ajoutez-la au fichier pom.xml :
<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-sc-migration-starter</artifactId>
<version>1.0.2</version>
</dependency>
3. Mettre à jour la configuration RibbonClients
Pour s'abonner aux services de plusieurs registres, configurez @RibbonClients pour utiliser MigrationRibbonConfiguration dans la classe principale.
Avant :
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
Après :
@SpringBootApplication
@RibbonClients(defaultConfiguration = MigrationRibbonConfiguration.class)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
Après le déploiement de ces modifications, que ce soit sur site ou sur SAE, vous pouvez contrôler les registres auprès desquels l'application s'enregistre ou s'abonne à l'aide de Spring Cloud Config ou Nacos Config, sans redémarrer l'application. Pour plus de détails, consultez les sections Ajuster dynamiquement les politiques d'enregistrement et d'abonnement de services et Gérer les configurations des applications .
4. Déployer l'application sur SAE
Déployez l'application selon vos besoins. Pour plus d'informations, consultez la page Déployer des applications.
5. Vérifier la migration
Utilisez l'une des méthodes suivantes :
Option 1 : Vérifier le comportement métier
Confirmez que votre activité fonctionne comme prévu après le déploiement.
Option 2 : Vérifier la surveillance de l'abonnement aux services
Si Spring Boot Actuator est activé, accédez au point de terminaison suivant pour afficher la liste RibbonServerList pour chaque service abonné. Le champ serverGroup dans metaInfo indique le registre auquel appartient un nœud.
| Version de Spring Boot | Point de terminaison |
|---|---|
| 1.x | http://ip:port/dubboRegistry |
| 2.x | http://ip:port/actuator/dubboRegistry |

Étape 2 : Migrer les autres applications
Migrez toutes les applications restantes vers SAE séquentiellement, en suivant les mêmes étapes que celles décrites dans la section Étape 1.
Post-migration : Nettoyage et finalisation
Supprimer les dépendances de migration
Une fois toutes les applications déployées sur SAE, supprimez la configuration du registre d'origine ainsi que la dépendance edas-sc-migration-starter.
La dépendance edas-sc-migration-starter est destinée exclusivement à la migration. Bien que son maintien n'affecte pas la stabilité du service, elle limite l'efficacité de l'équilibrage de charge de Ribbon. Supprimez cette dépendance après la migration et redémarrez les applications par lots pendant les heures creuses.
Migrer SLB ou mettre à jour les paramètres DNS
Après avoir migré vos applications, gérez votre instance SLB et la configuration de votre nom de domaine :
Instance SLB
| Scénario | Action |
|---|---|
| SLB existait avant la migration | Réutilisez-le. Pour plus de détails sur la liaison, consultez la page Lier une instance CLB à une application et générer une adresse IP publique ou privée pour celle-ci. |
| Aucun SLB avant la migration | Créez une instance SLB et liez-la à l'application d'entrée (par exemple, une passerelle API). |
| Les ports ECS sont occupés | Utilisez la solution de répartition du trafic. Ajoutez de nouvelles instances ECS, puis réutilisez le SLB existant ou créez-en un nouveau. |
Nom de domaine
| Scénario | Action |
|---|---|
| SLB réutilisé | Aucune modification du nom de domaine n'est nécessaire. |
| Nouveau SLB créé | Ajoutez le nouveau SLB aux paramètres du nom de domaine et supprimez l'ancienne entrée. Consultez la page Mettre à jour les serveurs DNS. |
Migrer le stockage et les files d'attente de messages
Si votre application utilise des services Alibaba Cloud tels qu'ApsaraDB RDS et Message Queue, vous n'avez pas besoin de migrer le stockage ni les files d'attente de messages. Si votre application n'est pas déployée sur Alibaba Cloud, rejoignez le groupe DingTalk 32874633 pour obtenir une assistance technique.
Ajuster dynamiquement les politiques d'enregistrement et d'abonnement de services
Utilisez la fonctionnalité de gestion de configuration de SAE pour ajuster les politiques d'enregistrement et d'abonnement à tout moment pendant la migration, sans redémarrage de l'application.
Ajuster la politique d'abonnement
Par défaut, SAE s'abonne aux données de service de tous les registres associés et les agrège.
Pour vous abonner uniquement à des registres spécifiques, définissez la propriété 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
Ajuster la politique d'enregistrement
Par défaut, SAE s'enregistre auprès de tous les registres associés.
Pour exclure des registres spécifiques, définissez la propriété 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
Utilisez la fonctionnalité de gestion de configuration de SAE pour mettre à jour cette propriété à l'exécution sans redémarrer vos applications.