Menyebarkan perubahan konfigurasi ke seluruh node sekaligus berisiko menjatuhkan seluruh kluster jika perubahan tersebut mengandung kesalahan. Rilis canary mengurangi risiko ini dengan mengirimkan perubahan terlebih dahulu ke sejumlah kecil node. Setelah Anda memverifikasi perubahan tersebut, Anda dapat menerapkannya secara bertahap ke semua node yang tersisa.
MSE Nacos mendukung dua strategi rilis canary:
| Strategi | Cara kerja | Paling cocok untuk |
|---|---|---|
| Berdasarkan IP | Menargetkan alamat IP node tertentu | Sistem bisnis kecil dengan IP yang stabil |
| Berdasarkan tag | Menargetkan node berdasarkan tag aplikasi (pasangan kunci-nilai) | Lingkungan Kubernetes atau lingkungan lain di mana IP sering berubah |
Prasyarat
Sebelum memulai, pastikan Anda telah:
Nacos Client 2.x atau yang lebih baru
Rilis konfigurasi dengan rilis canary berbasis IP
Rilis canary berbasis IP menargetkan alamat IP tertentu untuk menerima konfigurasi baru. Node yang tidak termasuk dalam daftar IP tetap menggunakan versi resmi saat ini.
Metode ini cocok untuk kluster kecil, tetapi memiliki dua keterbatasan:
Pada Nacos Client 1.x, server tidak dapat memperoleh IP client secara akurat ketika koneksi melewati instans SLB.
Di lingkungan Kubernetes, alamat IP Pod berubah saat node dibangun ulang, yang dapat menyebabkan rilis canary menargetkan node yang salah.
Untuk lingkungan dinamis, gunakan rilis canary berbasis tag sebagai gantinya.
Buat konfigurasi canary berbasis IP
Login ke Konsol MSE dan pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih Microservices Registry > Instances.
Pada halaman Instances, klik nama instans target.
Di panel navigasi kiri, pilih Configuration Management > Configurations.
Temukan konfigurasi target dan klik Edit di kolom Actions.
Pada panel Edit Configuration, atur Release Type menjadi IP-based Canary Release.

Klik kotak input Application Node IP dan pilih alamat IP untuk rilis canary. Anda juga dapat mengetik alamat IP secara manual. Input ini mendukung pengisian otomatis.
CatatanAlamat IP yang tercantum di sini adalah IP dari node yang berlangganan konfigurasi ini. Pisahkan beberapa alamat IP dengan koma (,).
Edit konten konfigurasi, lalu klik Canary Release.
Pada kotak dialog Comparison of Configuration Content, verifikasi Current Official Version dan Content To Be Released, lalu klik Release.
Lihat konfigurasi canary
Buka halaman Configurations dari instans target (langkah 1–4 di atas).
Temukan konfigurasi dengan rilis canary aktif dan klik Edit di kolom Actions.
Pada panel Edit Configuration, klik tab Beta(IP) untuk melihat detail rilis canary.

Hentikan atau promosikan rilis canary
Pada tab Beta(IP) di panel Edit Configuration:
Hentikan rilis canary: Klik Stop Canary Release. Konfigurasi canary dibuang dan semua node tetap menggunakan versi resmi.
Promosikan ke rilis penuh: Klik Full Release. Pada kotak dialog Comparison of Configuration Content, konfirmasi konfigurasi dan klik Full Release. Konfigurasi canary menjadi versi resmi baru dan rilis canary berakhir.
Rilis konfigurasi dengan rilis canary berbasis tag
Rilis canary berbasis tag mencocokkan node berdasarkan tag aplikasi, bukan alamat IP. Tag tetap ada meskipun Pod direstart atau node dibangun ulang, sehingga strategi ini lebih tangguh di lingkungan Kubernetes dan lingkungan dinamis lainnya.
Rilis canary berbasis tag memerlukan MSE Nacos 2.2.3.3 atau yang lebih baru. Anda harus melakukan upgrade engine ke versi 2.2.3.3 atau yang lebih baru.
Tag aplikasi kustom memerlukan Nacos Client open-source 2.3.2 atau yang lebih baru.
Injeksi tag melalui variabel lingkungan memerlukan Nacos Client 2.4.2 atau yang lebih baru.
Langkah 1: Atur tag aplikasi pada client
Tetapkan tag ke node aplikasi dalam format pasangan kunci-nilai. Anda dapat mengatur tag melalui properties, parameter JVM, atau variabel lingkungan. Jika kunci yang sama didefinisikan di beberapa tempat, urutan prioritasnya adalah: properties > parameter JVM > variabel lingkungan.
nacos.config.gray.label adalah kunci tag bawaan untuk rilis canary.
// Opsi 1: Atur melalui properties
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, "<your-nacos-endpoint>");
properties.put("project.name", "<your-app-name>");
properties.put("nacos.config.gray.label", "<your-canary-tag>");
// Opsi 2: Atur sebagai parameter JVM
// -Dnacos.config.gray.label=<your-canary-tag>
// Opsi 3: Atur sebagai variabel lingkungan
// nacos_config_gray_label=<your-canary-tag>
// Buat layanan konfigurasi dan berlangganan konfigurasi
NacosConfigService configService = new NacosConfigService(properties);
String dataId = "<your-data-id>";
String group = "<your-group>";
configService.addListener(dataId, group, new Listener() {
@Override
public Executor getExecutor() {
return null;
}
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("Received config: " + configInfo);
}
});Ganti placeholder berikut dengan nilai aktual:
| Placeholder | Deskripsi | Contoh |
|---|---|---|
<your-nacos-endpoint> | Titik akhir server Nacos | mse-xxx.nacos.mse.aliyuncs.com:8848 |
<your-app-name> | Nama aplikasi | order-service |
<your-canary-tag> | Nilai tag rilis canary | canary-v2 |
<your-data-id> | ID data konfigurasi Nacos | com.example.app.properties |
<your-group> | Grup konfigurasi Nacos | DEFAULT_GROUP |
Langkah 2: Verifikasi tag pendengar di server
Setelah client terhubung dengan tag, verifikasi bahwa server mengenalinya. Buka daftar pendengar untuk konfigurasi target. Setiap pendengar menampilkan tag yang terkait dengannya.

Langkah 3: Rilis konfigurasi canary berbasis tag
Klik Edit Configuration dan atur Release Type menjadi Tag-based Canary Release.
Pilih pasangan tag kunci-nilai yang sudah ada. Konsol menampilkan jumlah node yang sesuai dengan tag yang dipilih.

Edit konten konfigurasi dan klik Canary Release.
Langkah 4: Verifikasi dan perluas rilis
Setelah merilis versi canary:
Verifikasi grup canary: Pada tab Listener Query, periksa versi konfigurasi yang diterima setiap node.
Lihat detail canary: Pada tab Configuration Details, tinjau konten versi canary saat ini.
Perluas cakupan rilis: Setelah memastikan grup canary berjalan normal, perluas nilai tag untuk mencakup lebih banyak node. Ulangi hingga semua node target tercakup.
Promosikan ke rilis penuh: Klik Full Release untuk menjadikan konfigurasi canary sebagai versi resmi baru. Versi canary akan dihentikan secara otomatis.
Kembalikan jika diperlukan: Jika terjadi masalah, klik Stop Canary Release untuk membuang konfigurasi canary. Semua node kembali ke versi resmi.
Jalankan beberapa versi canary secara paralel
Satu konfigurasi dapat memiliki beberapa versi aktif secara bersamaan:
Satu versi resmi
Satu versi canary berbasis IP
Beberapa versi canary berbasis tag (maksimal 5 secara default)
Prioritas pencocokan versi
Saat sebuah node meminta konfigurasi, MSE Nacos mengevaluasi versi dalam urutan berikut:
Versi canary berbasis IP — Jika IP node sesuai dengan daftar IP canary, versi ini dikembalikan.
Versi canary berbasis tag — Jika tidak ada kecocokan IP, sistem memeriksa versi canary berbasis tag yang diurutkan berdasarkan bidang
priority(nilai lebih tinggi = prioritas lebih tinggi). Jika nilai prioritas sama, versi diurutkan berdasarkan nama.Versi resmi — Jika tidak ada versi canary yang cocok, versi resmi dikembalikan.
Periksa versi konfigurasi yang cocok untuk setiap node pada halaman Listener Query di Konsol MSE.
Versi canary paralel memerlukan MSE Nacos 2.3.0 atau yang lebih baru. Secara default, maksimal 5 versi canary berbasis tag dapat ada per konfigurasi. Jika batas ini terlampaui, rilis canary baru akan diblokir.
Konfigurasi tag lanjutan
Atur beberapa tag
Nacos mendukung injeksi beberapa pasangan tag kunci-nilai ke dalam aplikasi melalui parameter nacos.app.conn.labels. Gunakan format "k1=v1,k2=v2,k3=v3".
// Opsi 1: Atur melalui properties
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, "<your-nacos-endpoint>");
properties.put("project.name", "<your-app-name>");
properties.put("nacos.app.conn.labels", "app=order-service,site=hangzhou-c,env=staging");
// Opsi 2: Atur sebagai parameter JVM
// -Dnacos.app.conn.labels="app=order-service,site=hangzhou-c,env=staging"
// Opsi 3: Atur sebagai variabel lingkungan
// nacos_app_conn_labels="app=order-service,site=hangzhou-c,env=staging"
NacosConfigService configService = new NacosConfigService(properties);
String dataId = "<your-data-id>";
String group = "<your-group>";
configService.addListener(dataId, group, new Listener() {
@Override
public Executor getExecutor() {
return null;
}
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("Received config: " + configInfo);
}
});Implementasikan kolektor tag kustom (SPI)
Untuk logika tag yang dinamis atau kompleks, implementasikan antarmuka SPI com.alibaba.nacos.common.labels.LabelsCollector dan daftarkan sebagai layanan.
package com.example.labels;
import com.alibaba.nacos.common.labels.LabelsCollector;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
public class CustomLabelsCollector implements LabelsCollector {
@Override
public String getName() {
return "custom-labels";
}
@Override
public Map<String, String> collectLabels(Properties properties) {
Map<String, String> labels = new HashMap<>();
// Tambahkan logika kustom untuk menentukan label
labels.put("env", System.getenv("DEPLOY_ENV"));
labels.put("region", System.getenv("DEPLOY_REGION"));
return labels;
}
@Override
public int getOrder() {
return 1;
}
}Untuk menggunakan implementasi ini, publikasikan sebagai layanan.
Persyaratan format tag
Kunci dan nilai tag mendukung: huruf besar dan kecil, angka, garis bawah (_), tanda hubung (-), dan titik (.). Tag dalam format lain diabaikan.
Saat menentukan beberapa pasangan kunci-nilai dengan nacos.app.conn.labels, gunakan format "k1=v1,k2=v2,k3=v3". Entri tanpa nilai diabaikan. Misalnya, "k1=v1,k2" hanya menghasilkan k1=v1 yang diurai.
Praktik terbaik untuk perencanaan tag
Rencanakan tag aplikasi berdasarkan cakupan dampak bisnis untuk memungkinkan peluncuran bertahap dan meminimalkan risiko.
Tag berdasarkan nama aplikasi: Rilis terlebih dahulu ke aplikasi non-kritis. Setelah memastikan tidak ada masalah, perluas ke aplikasi inti.
Tag berdasarkan kelompok traffic: Isolasi sekelompok mesin canary di ingress traffic untuk pengguna internal. Tetapkan tag canary khusus ke mesin-mesin ini untuk memvalidasi perubahan dengan traffic internal sebelum menampilkannya kepada pengguna produksi.