Migrasikan kluster Spring Cloud yang berjalan di Alibaba Cloud ke Serverless App Engine (SAE) tanpa mengganggu lalu lintas aktif. Topik ini mencakup pendekatan dual-registration dan dual-subscription, di mana aplikasi yang telah dan belum dimigrasikan berada dalam mesh layanan yang sama hingga proses peralihan selesai. Aplikasi hanya melakukan restart satu kali selama keseluruhan proses.
Demo yang berfungsi tersedia di sc-migration-examples.zip.
Sebelum memulai
Tinjau daftar periksa berikut sebelum memulai migrasi. Mengidentifikasi hambatan sejak awal mencegah migrasi yang tidak lengkap yang memerlukan rollback.
| Periksa | Tindakan jika tidak terpenuhi |
|---|---|
| Semua aplikasi menggunakan penemuan layanan Spring Cloud (Eureka atau Consul) | Aplikasi yang melewati penemuan layanan dan memanggil layanan langsung melalui IP atau hostname tidak dapat menggunakan pendekatan ini. Perbarui klien tersebut sebelum migrasi. |
| Port instans ECS tersedia (tidak digunakan oleh proses lain) | Jika port sedang digunakan, gunakan solusi pemisahan traffic sebagai gantinya. |
| Aplikasi bersifat tanpa status | Aplikasi berstatus memerlukan perencanaan tambahan untuk migrasi status. |
| Layanan Alibaba Cloud (ApsaraDB RDS, Message Queue) digunakan untuk penyimpanan dan messaging | Penyimpanan dan messaging di luar Alibaba Cloud memerlukan koordinasi terpisah. Bergabunglah dengan grup DingTalk 32874633 untuk dukungan. |
Ikhtisar migrasi

Migrasi terdiri dari tiga fase:
| Fase | Langkah | Wajib |
|---|---|---|
| Migrasi | Langkah 1: Migrasi aplikasi | Wajib |
| Pasca-migrasi | Langkah 2: Migrasi SLB atau perbarui DNS | Opsional |
| Pasca-migrasi | Langkah 3: Migrasi penyimpanan dan antrian pesan | Opsional |
Pilih solusi migrasi
Dua solusi mendukung migrasi tanpa downtime:
| Solusi | Cara kerja | Kapan digunakan |
|---|---|---|
| Dual-registration dan dual-subscription (topik ini) | Daftarkan aplikasi ke registri asli dan Nacos secara bersamaan. Aplikasi yang telah dan belum dimigrasikan saling menemukan satu sama lain selama proses berlangsung. | Gunakan ketika port ECS tersedia. Hanya memerlukan satu kali restart aplikasi. |
| Pemisahan lalu lintas | Alihkan registri ke Nacos melalui Spring Cloud Alibaba, terapkan set aplikasi baru di SAE, lalu alihkan traffic menggunakan Server Load Balancer (SLB) dan nama domain. | Gunakan ketika port ECS sedang digunakan dan instans tidak dapat digunakan kembali. |
Untuk solusi pemisahan traffic, lihat Modifikasi registrasi dan penemuan layanan aplikasi ke Nacos.
Cara kerja dual-registration dan dual-subscription
Diagram berikut menunjukkan status sistem pada setiap tahap migrasi.
Status awal
Tahap 1
Tahap 2
Tahap 3
Tahap 4
Properti utama:
Aplikasi yang telah dan belum dimigrasikan saling menemukan dan memanggil satu sama lain, memastikan kelangsungan bisnis.
Satu-satunya perubahan kode yang diperlukan adalah dua dependensi baru dan satu anotasi pada kelas utama.
Pantau panggilan layanan konsumen dan lacak progres migrasi secara real-time melalui SAE.
Kontrol kebijakan registrasi dan subscription secara dinamis melalui manajemen konfigurasi SAE — tidak perlu restart berulang. Aplikasi hanya restart satu kali.
Langkah 1: Migrasi aplikasi pertama
1. Pilih aplikasi
Mulailah dengan penyedia layanan dasar — layanan yang tidak memiliki dependensi hulu. Jika jejak panggilan kompleks atau sulit dipetakan, pilih aplikasi apa pun untuk memulai.
2. Tambahkan dependensi dan perbarui konfigurasi
a. Tambahkan dependensi penemuan Nacos
Tambahkan spring-cloud-starter-alibaba-nacos-discovery ke pom.xml:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>{Version}</version>
</dependency>b. Konfigurasikan alamat server Nacos
Tambahkan berikut ini ke application.properties:
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848c. Tambahkan dependensi migrasi multi-registri
Secara default, Spring Cloud hanya mengizinkan satu registri. Menambahkan registri kedua menyebabkan error. Dependensi edas-sc-migration-starter menghapus batasan ini dan memungkinkan registrasi simultan ke beberapa registri.
Tambahkan ke pom.xml:
<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-sc-migration-starter</artifactId>
<version>1.0.2</version>
</dependency>3. Perbarui konfigurasi RibbonClients
Untuk berlangganan layanan dari beberapa registri, atur @RibbonClients agar menggunakan MigrationRibbonConfiguration pada kelas utama.
Sebelumnya:
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}Setelah:
@SpringBootApplication
@RibbonClients(defaultConfiguration = MigrationRibbonConfiguration.class)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}Setelah menerapkan perubahan ini — baik di lingkungan on-premises maupun di SAE — Anda dapat mengontrol registri mana yang digunakan aplikasi untuk registrasi atau subscription melalui Spring Cloud Config atau Nacos Config, tanpa perlu merestart aplikasi. Untuk detailnya, lihat Sesuaikan kebijakan registrasi dan subscription layanan secara dinamis dan Kelola konfigurasi aplikasi.
4. Terapkan aplikasi di SAE
Terapkan aplikasi sesuai kebutuhan Anda. Untuk detailnya, lihat Terapkan aplikasi.
5. Verifikasi migrasi
Gunakan salah satu metode berikut:
Opsi 1: Periksa perilaku bisnis
Pastikan bisnis Anda berjalan seperti yang diharapkan setelah deployment.
Opsi 2: Periksa pemantauan subscription layanan
Jika Spring Boot Actuator diaktifkan, akses titik akhir berikut untuk melihat RibbonServerList untuk setiap layanan yang berlangganan. Bidang serverGroup dalam metaInfo menunjukkan registri mana yang dimiliki oleh suatu node.
| Versi Spring Boot | Titik akhir |
|---|---|
| 1.x | http://ip:port/dubboRegistry |
| 2.x | http://ip:port/actuator/dubboRegistry |

Langkah 2: Migrasi aplikasi lainnya
Migrasikan semua aplikasi yang tersisa ke SAE secara berurutan, mengikuti langkah-langkah yang sama seperti Langkah 1.
Pasca-migrasi: Pembersihan dan finalisasi
Hapus dependensi migrasi
Setelah semua aplikasi berada di SAE, hapus konfigurasi registri asli dan dependensi edas-sc-migration-starter.
edas-sc-migration-starter adalah dependensi yang hanya digunakan untuk migrasi. Membiarkannya tidak memengaruhi stabilitas layanan, tetapi membatasi efektivitas load balancing Ribbon. Hapus dependensi ini setelah migrasi dan restart aplikasi secara bertahap selama jam sepi.
Migrasi SLB atau perbarui pengaturan DNS
Setelah migrasi aplikasi Anda, tangani konfigurasi instans SLB dan nama domain:
Instance SLB
| Skenario | Tindakan |
|---|---|
| SLB sudah ada sebelum migrasi | Gunakan kembali. Untuk detail binding, lihat Bind instans CLB ke aplikasi, dan hasilkan IP publik atau privat untuknya. |
| Tidak ada SLB sebelum migrasi | Buat instans SLB dan bind ke aplikasi ingress (misalnya API gateway). |
| Port ECS sedang digunakan | Gunakan solusi pemisahan traffic. Tambahkan instans ECS baru, lalu gunakan kembali SLB yang ada atau buat yang baru. |
Nama domain
| Skenario | Tindakan |
|---|---|
| SLB digunakan kembali | Tidak perlu perubahan nama domain. |
| SLB baru dibuat | Tambahkan SLB baru ke pengaturan nama domain dan hapus entri lama. Lihat Perbarui server DNS. |
Migrasi penyimpanan dan antrian pesan
Jika aplikasi Anda menggunakan layanan Alibaba Cloud seperti ApsaraDB RDS dan Message Queue, Anda tidak perlu memigrasikan penyimpanan atau antrian pesan. Jika aplikasi Anda tidak diterapkan di Alibaba Cloud, bergabunglah dengan grup DingTalk 32874633 untuk dukungan teknis.
Sesuaikan kebijakan registrasi dan subscription layanan secara dinamis
Gunakan fitur manajemen konfigurasi SAE untuk menyesuaikan kebijakan registrasi dan subscription kapan saja selama migrasi — tanpa perlu merestart aplikasi.
Menyesuaikan kebijakan langganan
Secara default, SAE berlangganan dan menggabungkan data layanan dari semua registri terkait.
Untuk berlangganan hanya ke registri tertentu, atur properti spring.cloud.edas.migration.subscribes:
# Berlangganan layanan dari Eureka dan Nacos
spring.cloud.edas.migration.subscribes=nacos,eureka
# Berlangganan layanan hanya dari Nacos
spring.cloud.edas.migration.subscribes=nacosSesuaikan kebijakan registrasi
Secara default, SAE mendaftar ke semua registri terkait.
Untuk mengecualikan registri tertentu, atur properti spring.cloud.edas.migration.registry.excludes:
# Daftar ke semua registri (default — biarkan kosong)
spring.cloud.edas.migration.registry.excludes=
# Nonaktifkan registrasi hanya ke Eureka
spring.cloud.edas.migration.registry.excludes=eureka
# Nonaktifkan registrasi ke Nacos dan Eureka
spring.cloud.edas.migration.registry.excludes=nacos,eurekaGunakan fitur manajemen konfigurasi SAE untuk memperbarui properti ini saat runtime tanpa merestart aplikasi Anda.