Merilis versi baru dari beberapa layanan mikro secara bersamaan memerlukan cara untuk menguji semuanya sekaligus sebelum mengarahkan seluruh traffic produksi ke versi tersebut. Rilis canary ujung ke ujung mengarahkan permintaan dengan karakteristik tertentu melalui versi canary dari setiap layanan dalam rantai panggilan, sementara traffic biasa tetap mengalir melalui versi dasar. Jika suatu layanan tidak memiliki versi canary, traffic secara otomatis dialihkan kembali ke versi dasarnya.
Microservices Engine (MSE) menerapkan rilis canary ujung ke ujung dengan menggabungkan gateway cloud-native dan Microservices Governance. Definisikan jalur lalu lintas terisolasi untuk versi canary aplikasi Anda, konfigurasikan aturan routing di gateway, dan biarkan MSE menyebarkan aturan tersebut ke seluruh rantai panggilan—tanpa perubahan kode bisnis.
Konsep utama
| Concept | Description |
|---|---|
| Lane | Lingkungan runtime terisolasi untuk aplikasi dengan versi yang sama. Hanya permintaan yang sesuai dengan aturan routing tertentu yang mencapai aplikasi bertag dalam suatu lane. Aplikasi dan lane memiliki hubungan banyak-ke-banyak. |
| Lane group | Kumpulan lane yang membedakan antara tim atau skenario berbeda. |
| Base environment | Lingkungan tempat aplikasi tanpa tag berjalan. Lingkungan ini menyediakan pemulihan bencana bagi lingkungan lainnya. |
| MSE Cloud-native Gateway | Gateway yang kompatibel dengan Kubernetes Ingress dan mendukung penemuan layanan dari berbagai sumber, termasuk kluster Container Service for Kubernetes (ACK) dan instans Nacos. |
Skenario contoh
Skenario pemesanan e-commerce berikut menunjukkan rilis canary ujung ke ujung dari gateway cloud-native MSE hingga backend Spring Cloud.
Arsitektur mencakup tiga aplikasi:
| Application | Role | Port |
|---|---|---|
| Application A | Pusat transaksi | 20001 |
| Application B | Pusat komoditas | 20002 |
| Application C | Pusat inventaris | 20003 |
Rantai panggilan adalah: Client > MSE cloud-native gateway > A > B > C
Penemuan layanan menggunakan instans MSE Nacos. Akses berbasis klien dan berbasis HTML ke aplikasi backend didukung.
Versi baru dirilis untuk Application A dan Application C. Sebelum diluncurkan secara penuh, uji versi canary melalui rilis canary ujung ke ujung. Application B tidak memiliki versi canary, sehingga tetap melayani dari versi dasarnya.

Batasan
Fitur rilis canary ujung ke ujung terintegrasi dengan routing berbasis tag di Microservices Governance. Jangan mengonfigurasi aturan rilis canary dan aturan routing berbasis tag secara bersamaan untuk aplikasi yang sama.
Untuk kompatibilitas framework Java, lihat Framework Java yang didukung oleh Microservices Governance.
Versi MSE cloud-native gateway harus 2.0.6 atau lebih baru. Untuk upgrade, lihat Upgrade an MSE cloud-native gateway.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Membuat kluster ACK. Lihat Create an ACK dedicated cluster atau Create an ACK managed cluster
Mengaktifkan MSE Microservices Governance Edisi Profesional di halaman Microservices Governance
Mengaktifkan MSE Microservices Governance untuk aplikasi Anda di kluster ACK. Lihat Enable Microservices Governance for Java microservice applications in an ACK or ACS cluster
Gateway cloud-native MSE (versi 2.0.6 atau yang lebih baru). Lihat Buat gateway cloud-native MSE.
Mengaitkan gateway cloud-native dengan sumber layanan (kluster ACK atau instans MSE Nacos). Lihat Add a service source
Versi agen Java MSE harus 3.2.3 atau lebih baru. Versi sebelumnya dapat menyebabkan masalah.
Langkah 1: Deploy versi dasar aplikasi backend
Masuk ke Konsol ACK.
Pada panel navigasi kiri, klik Clusters. Lalu, klik nama kluster target.
Pada panel navigasi kiri, pilih Workloads > Deployments.
Pilih namespace dan klik Create from YAML.
Tempel kode YAML untuk Application A, Application B, dan Application C. Pilih YAML yang sesuai berdasarkan sumber layanan Anda.
Gunakan instans MSE Nacos sebagai sumber layanan
Ganti {nacos server address} dengan titik akhir internal instans MSE Nacos Anda dan hapus tanda kurung kurawal {}.
Gunakan kluster ACK sebagai sumber layanan
Deploy instans Nacos yang dikelola sendiri sebagai registri layanan.
Kode YAML di bawah ini mendaftarkan titik akhir versi dasar ke instans Nacos yang dikelola sendiri.
Deploy versi dasar Application A, Application B, dan Application C.
Buat Kubernetes Service untuk Application A agar gateway dapat mengarahkan traffic kepadanya.
Langkah 2: Ekspos Application A melalui gateway
Konfigurasikan MSE cloud-native gateway untuk mengarahkan traffic eksternal ke Application A. Pilih salah satu pendekatan berikut berdasarkan apakah layanan tersebut sudah ditambahkan.
Tambahkan layanan baru
Jika Application A belum ditambahkan ke gateway, tambahkan terlebih dahulu:
Masuk ke Konsol MSE. Pada panel navigasi kiri, pilih MSE Cloud-native Gateway > Gateways dan klik nama gateway. Pada panel navigasi kiri, klik Routes. Pada tab Services, klik Add Service. Untuk detail, lihat Add a service.
ACK cluster sebagai sumber layanan: Atur Service Source ke Container Service, namespace ke default, dan Services ke sc-a.
Instans MSE Nacos sebagai sumber layanan: Atur Service Source ke MSE Nacos, namespace ke public, dan Services ke sc-A.
Pada tab Routes, klik Add Route untuk membuat entri rute untuk sc-a (atau sc-A). Untuk detail, lihat Create a route.
Parameter Value Path Pilih Prefix dan masukkan /aRoute Point Pilih Single Service Backend Service Pilih sc-A
Gunakan layanan yang sudah ada
Jika Application A sudah diimpor, ubah entri rute yang ada:
Masuk ke Konsol MSE. Pada panel navigasi kiri, pilih MSE Cloud-native Gateway > Gateways dan klik nama gateway. Pada tab Routes, ubah entri rute.
Parameter Value Path Pilih Prefix dan masukkan /aRoute Point Pilih Single Service Backend Service Pilih sc-A
Langkah 3: Verifikasi traffic versi dasar
Masuk ke Konsol MSE. Pilih wilayah pada bilah navigasi atas.
Di panel navigasi sebelah kiri, pilih Cloud-native Gateway > Gateways, lalu klik nama gerbang.
Pada panel navigasi kiri, klik Overview. Pada tab Endpoint, temukan alamat IP ingress instans Server Load Balancer (SLB).
Kirim permintaan untuk memverifikasi bahwa traffic mengalir melalui versi dasar:
# Ganti x.x.1.1 dengan alamat IP ingress SLB
curl x.x.1.1/aOutput yang diharapkan:
A[10.0.3.178][config=base] -> B[10.0.3.195] -> C[10.0.3.201]Application B dan Application C tidak memiliki akhiran versi, yang mengonfirmasi bahwa seluruh traffic mengalir melalui versi dasar.
Langkah 4: Deploy versi canary Application A dan Application C
Application A dan Application C menerima pembaruan fitur baru. Application B tetap tidak berubah dan hanya menjalankan versi dasar.
Masuk ke Konsol ACK.
Pada panel navigasi kiri, klik Clusters. Lalu, klik nama kluster target.
Pada panel navigasi kiri, pilih Workloads > Deployments.
Pilih namespace dan klik Create from YAML.
Tempel kode YAML untuk versi canary Application A dan Application C. Pilih YAML yang sesuai berdasarkan sumber layanan Anda.
Gunakan instans MSE Nacos sebagai sumber layanan
Ganti {nacos server address} dengan titik akhir internal instans MSE Nacos Anda dan hapus tanda kurung kurawal {}.
Gunakan kluster ACK sebagai sumber layanan
YAML canary menambahkan alicloud.service.tag: gray ke spec.template.metadata.labels untuk membedakan node canary dari node dasar.
Titik akhir versi canary didaftarkan ke instans Nacos yang dikelola sendiri.
Langkah 5: Buat lane group
Lane group menentukan kumpulan aplikasi yang berpartisipasi dalam rilis canary.
Masuk ke Konsol MSE dan pilih wilayah pada bilah navigasi atas.
Pada panel navigasi kiri, pilih Microservices Governance > Full link grayscale.
Klik Create Lane Group and Lane. Jika lane group sudah ada di namespace layanan mikro yang dipilih, klik Create Lane Group.
Pada panel Create Lane Group, konfigurasikan parameter berikut dan klik OK:
Parameter Value Lane Group Name Masukkan nama untuk lane group Ingress Type Pilih MSE Cloud-native Gateway Ingress Gateway Pilih gateway cloud-native target Lane Group Application Pilih spring-cloud-a, spring-cloud-b, dan spring-cloud-c 
Setelah dibuat, lane group muncul di bagian Lane Group pada halaman Full link grayscale. Untuk mengubahnya, klik ikon edit.
Langkah 6: Buat lane
Lane menentukan aturan routing yang mengarahkan traffic tertentu ke versi canary aplikasi Anda.
- Tag node aplikasi canary untuk membedakannya dari node dasar. Di lingkungan kontainer, tambahkan
alicloud.service.tag: ${tag}kespec.template.metadata.labels. Di lingkungan Elastic Compute Service (ECS), tambahkan parameter startup Java-Dalicloud.service.tag=${tag}. - Mode routing lane harus sama untuk semua lane dalam satu lane group. Anda hanya dapat mengatur mode saat membuat lane pertama.
MSE mendukung dua mode routing ketika tipe ingress adalah MSE Cloud-native Gateway:
| Routing mode | When to use | Behavior |
|---|---|---|
| Routing by request content | Konten permintaan (header, parameter) dapat mengidentifikasi traffic canary | Permintaan canary tetap berada dalam lingkungan yang sama sepanjang rantai panggilan |
| Routing by percentage | Konten permintaan tidak dapat mengidentifikasi traffic canary dan sistem tidak dapat dimodifikasi untuk menambahkan pengenal | Permintaan dari sumber yang sama dapat diarahkan ke lane berbeda |
Buat lane dengan routing berdasarkan konten permintaan
Di bagian bawah halaman Full link grayscale, klik Create First Split Lane (atau Create Lane jika lane sudah ada).
Pada panel Create Lane, konfigurasikan parameter berikut dan klik OK:
Parameter Configuration Add Node Tag Tambahkan tag ke node aplikasi canary untuk membedakannya dari node dasar Enter lane information Atur Lane Tag ke nilai tag untuk permintaan yang diarahkan ke lane ini. Gunakan Confirm Matching Relationship untuk memverifikasi jumlah node bertag yang diharapkan Add Canary Release Rule Atur Canary Release Mode ke Canary Release by Content. Atur Canary Release Condition ke Meet All Conditions. Konfigurasikan kondisi: Parameter Type = Header, Parameter =canary, Condition ===, Value =gray
Canary release conditions
| Condition | Effect |
|---|---|
| Meet All Conditions | Mengarahkan traffic yang memenuhi semua kondisi yang ditentukan |
| Meet Any Condition | Mengarahkan traffic yang memenuhi setidaknya satu kondisi yang ditentukan |
Condition operators
| Operator | Description |
|---|---|
== | Pencocokan eksak. Nilai traffic harus persis sama dengan nilai kondisi. |
!= | Tidak sama. Nilai traffic harus berbeda dari nilai kondisi. |
in | Pencocokan inklusif. Nilai traffic harus ada dalam daftar yang ditentukan. |
| Percentage | Pencocokan berbasis hash. Mengarahkan traffic ketika hash(get(key)) % 100 < value. |
| Regular expression | Pencocokan regex. Nilai traffic harus sesuai dengan pola yang ditentukan. |
Buat lane dengan routing berdasarkan persentase
Di bagian bawah halaman Full link grayscale, klik Create First Split Lane (atau Create Lane jika lane sudah ada).
Pada panel Create Lane, konfigurasikan parameter berikut dan klik OK:
Parameter Configuration Add Node Tag Tambahkan tag ke node aplikasi canary untuk membedakannya dari node dasar Enter lane information Atur Lane Tag ke nilai tag untuk permintaan yang diarahkan ke lane ini. Gunakan Confirm Matching Relationship untuk memverifikasi jumlah node bertag yang diharapkan Configure Routing and Canary Release Rules Atur Canary Release Mode ke Canary Release by Ratio. Atur Flow ratio ke 30(persentase)
Mengelola jalur
Setelah membuat lane, lane tersebut muncul di bagian Traffic Distribution pada halaman Full link grayscale. Tindakan yang tersedia:
| Action | Effect |
|---|---|
| Enable | Mengaktifkan lane sehingga traffic diarahkan berdasarkan konfigurasi lane. Traffic yang sesuai diarahkan ke versi aplikasi bertag. Jika tidak ada versi bertag, traffic dialihkan kembali ke versi tanpa tag. |
| Disable | Menonaktifkan lane. Seluruh traffic diarahkan ke versi aplikasi tanpa tag. |
Anda juga dapat melihat persentase traffic lane dan mengonfigurasi status aplikasi dalam lane dari halaman ini.
Langkah 7: Verifikasi traffic canary
Verifikasi routing berdasarkan konten permintaan
Kirim permintaan dengan header canary: gray untuk menguji apakah traffic mengalir melalui versi canary:
# Ganti x.x.x.x dengan alamat IP ingress SLB
curl -H "canary: gray" x.x.x.x/aOutput yang diharapkan:
Agray[10.0.3.177][config=base] -> B[10.0.3.195] -> Cgray[10.0.3.180]Akhiran gray pada Application A dan Application C mengonfirmasi bahwa traffic canary mencapai versi canary. Application B tidak memiliki versi canary, sehingga traffic diarahkan ke versi dasarnya.
Verifikasi routing berdasarkan persentase
Jalankan skrip Python berikut untuk menguji distribusi traffic. Ganti x.x.x.x dengan alamat IP SLB gateway cloud-native.
pip3 install requests
python3 traffic.pyHasil yang diharapkan: sekitar 30% permintaan diarahkan ke lingkungan canary.

(Opsional) Pantau traffic canary
Pantau traffic canary dari lokasi berikut untuk mengidentifikasi masalah sedini mungkin.
Pantau dari gateway cloud-native
Pada halaman Routes MSE cloud-native gateway, klik tab Services. Klik nama layanan target, lalu lihat data metrik pada tab Monitor.

Pantau dari Microservices Governance
Pada halaman Full link grayscale, klik aplikasi target. Di bagian QPS Data, lihat data traffic untuk versi dasar dan canary:
| Metric | Description |
|---|---|
| Total QPS | Total permintaan per detik untuk aplikasi |
| Exception QPS | Jumlah permintaan error untuk aplikasi |
| GrayQPS | Permintaan per detik untuk versi canary |

Pantau dari Application Real-Time Monitoring Service (ARMS)
Jika aplikasi terhubung ke ARMS, lihat data traffic canary pada tab Full link grayscale di halaman Scenario-based Analysis di Konsol ARMS. Gunakan data ini untuk memutuskan apakah akan rollback atau melanjutkan rilis penuh.

Langkah selanjutnya
Setelah memverifikasi bahwa versi canary stabil, promosikan dengan memperbarui deployment dasar untuk menggunakan versi gambar baru dan menghapus deployment canary.
Untuk rollback, nonaktifkan lane dan hapus deployment canary. Seluruh traffic secara otomatis kembali ke versi dasar.