Migre um cluster Spring Cloud em execução na Alibaba Cloud para o Serverless App Engine (SAE) sem interromper o tráfego em produção. Este tópico aborda a abordagem de registro e assinatura duplos, em que aplicações migradas e não migradas coexistem na mesma malha de serviços até a conclusão da transição. As aplicações reiniciam apenas uma vez durante todo o processo.
Uma demonstração funcional está disponível em sc-migration-examples.zip.
Antes de começar
Analise a lista de verificação a seguir antes de iniciar a migração. Identificar bloqueios antecipadamente evita migrações incompletas que exigiriam rollback.
|
Verificação |
Ação caso não seja atendida |
|
Todas as aplicações utilizam descoberta de serviços do Spring Cloud (Eureka ou Consul) |
Aplicações que ignoram a descoberta de serviços e chamam outros serviços diretamente por IP ou nome de host não podem usar esta abordagem. Atualize esses clientes antes de migrar. |
|
As portas das instâncias ECS estão disponíveis (não ocupadas por outro processo) |
Se as portas estiverem ocupadas, utilize a solução de divisão de tráfego. |
|
As aplicações são stateless |
Aplicações stateful exigem planejamento adicional para a migração de estado. |
|
Serviços da Alibaba Cloud (ApsaraDB RDS, Message Queue) são usados para armazenamento e mensageria |
Armazenamento e mensageria fora da Alibaba Cloud requerem coordenação separada. Entre no grupo 32874633 do DingTalk para obter suporte. |
Visão geral da migração

A migração consiste em três fases:
|
Fase |
Etapas |
Obrigatoriedade |
|
Migração |
Etapa 1: Migrar aplicações |
Obrigatória |
|
Pós-migração |
Etapa 2: Migrar SLB ou atualizar DNS |
Opcional |
|
Pós-migração |
Etapa 3: Migrar armazenamento e filas de mensagens |
Opcional |
Escolha uma solução de migração
Duas soluções permitem migração sem tempo de inatividade:
|
Solução |
Funcionamento |
Quando usar |
|
Registro e assinatura duplos (este tópico) |
Registra as aplicações simultaneamente no registro original e no Nacos. Aplicações migradas e não migradas se descobrem mutuamente durante todo o processo. |
Use quando as portas das instâncias ECS estiverem disponíveis. Exige apenas uma reinicialização da aplicação. |
|
Divisão de tráfego |
Alterna o registro para o Nacos via Spring Cloud Alibaba, implanta um novo conjunto de aplicações no SAE e redireciona o tráfego usando Server Load Balancer (SLB) e nomes de domínio. |
Recomendado quando as portas das instâncias ECS estiverem ocupadas e as instâncias não puderem ser reutilizadas. |
Para a solução de divisão de tráfego, consulte Modificar o registro e a descoberta de serviços das aplicações para o Nacos.
Como funciona o registro e a assinatura duplos
Os diagramas a seguir mostram o estado do sistema em cada estágio da migração.
Status inicial
Estágio 1
Estágio 2
Estágio 3
Estágio 4
Principais propriedades:
Aplicações migradas e não migradas se descobrem e se comunicam entre si, garantindo a continuidade dos negócios.
As únicas alterações de código necessárias são duas novas dependências e uma anotação na classe principal.
Monitore as chamadas de serviço do consumidor e acompanhe o progresso da migração em tempo real pelo SAE.
Controle as políticas de registro e assinatura dinamicamente pelo gerenciamento de configuração do SAE, sem necessidade de reinicializações repetidas. As aplicações reiniciam apenas uma vez.
Etapa 1: Migrar a primeira aplicação
1. Selecione uma aplicação
Comece pelos provedores subjacentes — serviços sem dependências upstream. Se o rastreamento de chamadas for complexo ou difícil de mapear, escolha qualquer aplicação para iniciar.
2. Adicione dependências e atualize a configuração
a. Adicione a dependência de descoberta do Nacos
Adicione spring-cloud-starter-alibaba-nacos-discovery ao arquivo pom.xml:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>{Version}</version>
</dependency>
b. Configure o endereço do servidor Nacos
Adicione o seguinte ao arquivo application.properties:
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
c. Adicione a dependência de migração para múltiplos registros
Por padrão, o Spring Cloud permite apenas um registro. Adicionar um segundo registro causa erro. A dependência edas-sc-migration-starter remove essa restrição e habilita o registro simultâneo em vários registros.
Adicione-a ao arquivo pom.xml:
<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-sc-migration-starter</artifactId>
<version>1.0.2</version>
</dependency>
3. Atualize a configuração do RibbonClients
Para assinar serviços de múltiplos registros, defina @RibbonClients para usar MigrationRibbonConfiguration na classe principal.
Antes:
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
Depois:
@SpringBootApplication
@RibbonClients(defaultConfiguration = MigrationRibbonConfiguration.class)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
Após implantar essas alterações — seja on-premises ou no SAE — controle com quais registros a aplicação se registra ou assina usando o Spring Cloud Config ou Nacos Config, sem reiniciar a aplicação. Para mais detalhes, consulte Ajustar dinamicamente as políticas de registro e assinatura de serviços e Gerenciar configurações de aplicações .
4. Implante a aplicação no SAE
Implante a aplicação conforme suas necessidades. Para mais detalhes, consulte Implantar aplicações.
5. Verifique a migração
Utilize um dos métodos a seguir:
Opção 1: Verificar o comportamento da aplicação
Confirme se a aplicação funciona conforme o esperado após a implantação.
Opção 2: Verificar o monitoramento de assinatura de serviços
Se o Spring Boot Actuator estiver ativado, acesse o endpoint a seguir para visualizar a RibbonServerList de cada serviço assinado. O campo serverGroup em metaInfo indica a qual registro um nó pertence.
|
Versão do Spring Boot |
Endpoint |
|
1.x |
|
|
2.x |
|

Etapa 2: Migrar outras aplicações
Migre todas as aplicações restantes para o SAE sequencialmente, seguindo as mesmas etapas da Etapa 1.
Pós-migração: Limpeza e finalização
Remova as dependências de migração
Depois que todas as aplicações estiverem no SAE, remova a configuração do registro original e a dependência edas-sc-migration-starter.
A dependência edas-sc-migration-starter é exclusiva para migração. Mantê-la não afeta a estabilidade do serviço, mas limita a eficácia do balanceamento de carga do Ribbon. Remova a dependência após a migração e reinicie as aplicações em lotes durante horários de menor movimento.
Migre o SLB ou atualize as configurações de DNS
Após migrar suas aplicações, gerencie sua instância de SLB e a configuração de nome de domínio:
Instância de SLB
|
Cenário |
Ação |
|
O SLB já existia antes da migração |
Reutilize-o. Para detalhes sobre vinculação, consulte Vincular uma instância CLB a uma aplicação e gerar um IP público ou privado para ela. |
|
Não havia SLB antes da migração |
Crie uma instância de SLB e vincule-a à aplicação de entrada (como um gateway de API). |
|
As portas das instâncias ECS estão ocupadas |
Utilize a solução de divisão de tráfego. Adicione novas instâncias ECS e reutilize o SLB existente ou crie um novo. |
Nome de domínio
|
Cenário |
Ação |
|
SLB reutilizado |
Nenhuma alteração no nome de domínio é necessária. |
|
Novo SLB criado |
Adicione o novo SLB às configurações de nome de domínio e remova a entrada antiga. Consulte Atualizar servidores DNS. |
Migre armazenamento e filas de mensagens
Se sua aplicação utiliza serviços da Alibaba Cloud, como ApsaraDB RDS e Message Queue, não é necessário migrar o armazenamento ou as filas de mensagens. Caso sua aplicação não esteja implantada na Alibaba Cloud, entre no grupo 32874633 do DingTalk para obter suporte técnico.
Ajuste dinamicamente as políticas de registro e assinatura de serviços
Use o recurso de gerenciamento de configuração do SAE para ajustar as políticas de registro e assinatura a qualquer momento durante a migração, sem precisar reiniciar a aplicação.
Ajuste a política de assinatura
Por padrão, o SAE assina e agrega dados de serviços de todos os registros relacionados.
Para assinar apenas registros específicos, defina a propriedade 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
Ajuste a política de registro
Por padrão, o SAE se registra em todos os registros relacionados.
Para excluir registros específicos, defina a propriedade 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
Use o recurso de gerenciamento de configuração do SAE para atualizar essa propriedade em tempo de execução, sem reiniciar suas aplicações.