Dalam skenario layanan mikro, panggilan antar aplikasi bersifat acak. Jika versi baru tersedia untuk aplikasi Spring Cloud atau Dubbo yang Anda deploy, lalu lintas dengan karakteristik tertentu mungkin tidak diarahkan ke versi tujuan dari aplikasi tersebut. Untuk mengatasi masalah ini, Anda dapat menggunakan fitur rilis canary end-to-end yang disediakan oleh Microservices Engine (MSE) untuk mengimplementasikan throttling lalu lintas end-to-end tanpa perlu memodifikasi kode bisnis Anda. Saat menggunakan fitur rilis canary end-to-end, Anda dapat membuat jalur dan menggunakannya sebagai lingkungan runtime independen untuk mengisolasi versi aplikasi. Anda dapat mengonfigurasi aturan jalur untuk mengarahkan lalu lintas yang sesuai dengan aturan ke versi tujuan aplikasi. Topik ini menjelaskan cara mengonfigurasi gateway cloud-native MSE untuk mengimplementasikan rilis canary end-to-end.
Proses implementasi
Batasan
Fitur rilis canary end-to-end terintegrasi dengan fitur routing berbasis tag yang disediakan oleh Microservices Governance. Jika Anda ingin mengimplementasikan fitur rilis canary end-to-end untuk aplikasi Anda, kami menyarankan agar Anda tidak mengonfigurasi aturan rilis canary dan aturan routing berbasis tag untuk aplikasi tersebut.
Untuk informasi lebih lanjut tentang batasan fitur rilis canary end-to-end pada aplikasi Java, lihat Kerangka kerja Java yang didukung oleh Microservices Governance.
Untuk mengimplementasikan rilis canary end-to-end versi terbaru, Anda harus memastikan bahwa versi gateway cloud-native MSE Anda adalah 2.0.6 atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui gateway cloud-native MSE, lihat Perbarui gateway cloud-native MSE.
Skenario contoh
Topik ini memberikan contoh tentang cara mengimplementasikan rilis canary end-to-end dari gateway cloud-native MSE ke aplikasi layanan mikro dalam skenario penempatan pesanan di industri e-commerce. Dalam contoh ini, arsitektur aplikasi terdiri dari gateway cloud-native MSE dan arsitektur layanan mikro backend (Spring Cloud). Panggilan layanan backend melibatkan tiga aplikasi: pusat transaksi (Aplikasi A), pusat komoditas (Aplikasi B), dan pusat inventaris (Aplikasi C). Akses berbasis klien atau HTML ke aplikasi backend didukung. Instance Nacos MSE digunakan untuk penemuan layanan di antara aplikasi.
Setelah pelanggan melakukan pemesanan, lalu lintas mengalir ke gateway cloud-native MSE. Kemudian, gateway cloud-native MSE memanggil pusat transaksi (Aplikasi A), pusat transaksi (Aplikasi A) memanggil pusat komoditas (Aplikasi B), dan kemudian pusat komoditas (Aplikasi B) memanggil pusat inventaris (Aplikasi C). Proses pemanggilan berikut digunakan: Pelanggan > Gateway cloud-native MSE > Aplikasi A > Aplikasi B > Aplikasi C.
Fitur baru perlu dirilis seiring dengan iterasi bisnis. Dalam contoh ini, versi baru dirilis untuk Aplikasi A dan Aplikasi C. Sebelum versi baru secara resmi dirilis untuk Aplikasi A dan Aplikasi C, Anda harus menguji versi baru pada kedua aplikasi tersebut menggunakan rilis canary. Setelah versi baru terbukti stabil, Anda dapat merilis versi tersebut untuk aplikasi.
Fitur rilis canary end-to-end diimplementasikan berdasarkan gateway cloud-native MSE dan Microservices Governance. Anda dapat mengimplementasikan rilis canary end-to-end dari gateway ke beberapa aplikasi backend. Dengan cara ini, lalu lintas canary dengan karakteristik tertentu selalu dapat diarahkan ke versi canary aplikasi. Ini membantu Anda menguji versi beberapa aplikasi secara bersamaan menggunakan rilis canary. Jika suatu aplikasi tidak memiliki versi canary, lalu lintas secara otomatis diarahkan ke versi dasar aplikasi.

Istilah
Gateway cloud-native MSE: gateway generasi berikutnya yang kompatibel dengan Kubernetes Ingress. Gateway cloud-native MSE mendukung penemuan layanan berdasarkan beberapa sumber seperti Container Service for Kubernetes (ACK) dan instance Nacos. Gateway cloud-native MSE juga mendukung berbagai metode autentikasi login untuk menyediakan perlindungan keamanan.
Jalur: lingkungan terisolasi yang didefinisikan untuk aplikasi dengan versi yang sama. Hanya permintaan yang sesuai dengan aturan routing tertentu yang dapat diarahkan ke aplikasi yang ditandai dalam jalur. Sebuah aplikasi dapat termasuk dalam beberapa jalur. Sebuah jalur dapat berisi beberapa aplikasi. Aplikasi memiliki hubungan banyak-ke-banyak dengan jalur.
Grup jalur: kumpulan jalur. Grup jalur digunakan untuk membedakan antara tim atau skenario yang berbeda.
Lingkungan dasar: lingkungan tempat aplikasi yang tidak ditandai berjalan. Lingkungan dasar menyediakan pemulihan bencana untuk lingkungan lainnya.
Persiapan
Buat klaster ACK
Untuk informasi lebih lanjut, lihat Buat klaster ACK khusus (tidak dilanjutkan) atau Buat klaster ACK dikelola.
Aktifkan MSE Microservices Governance untuk aplikasi
Pastikan bahwa versi agen Java MSE adalah 3.2.3 atau lebih baru. Jika tidak, bisnis Anda mungkin terpengaruh secara negatif.
Di tab Microservices Governance, aktifkan Edisi Profesional Microservices Governance.
Aktifkan Microservices Governance untuk aplikasi layanan mikro di klaster Container Service for Kubernetes (ACK). Anda dapat memilih metode yang sesuai berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Aktifkan Microservices Governance untuk aplikasi layanan mikro Java di klaster ACK atau ACS.
Buat gateway cloud-native MSE
Untuk informasi lebih lanjut, lihat Buat gateway cloud-native MSE.
Hubungkan gateway cloud-native dengan sumber layanan
Untuk informasi lebih lanjut, lihat Tambahkan sumber layanan.
Rilis canary end-to-end berdasarkan gateway cloud-native MSE mendukung klaster ACK atau instance MSE Nacos sebagai sumber layanan.
Gateway cloud-native MSE harus diterapkan di virtual private cloud (VPC) yang sama dengan klaster ACK atau instance MSE Nacos Anda.
1. Bangun lingkungan dasar untuk aplikasi bisnis
Langkah 1: Deploy versi dasar aplikasi backend
Masuk ke Konsol ACK.
Di panel navigasi di sebelah kiri, klik Clusters. Lalu, klik nama klaster yang ingin Anda kelola.
Di panel navigasi di sebelah kiri, pilih .
Di bagian atas halaman, pilih namespace klaster, dan klik Create from YAML.
Deploy versi dasar aplikasi backend.
Gunakan instance MSE Nacos sebagai sumber layanan
Salin kode Yet Another Markup Language (YAML) berikut untuk menerapkan versi dasar Aplikasi A, Aplikasi B, dan Aplikasi C.
PentingGanti {alamat server nacos} di kode dengan endpoint internal instance MSE Nacos yang Anda buat dan hapus tanda kurung kurawal
{}.Gunakan klaster ACK sebagai sumber layanan
Salin kode YAML berikut untuk menerapkan instance MSE Nacos sebagai registri layanan mandiri.
PentingDalam kode YAML, endpoint versi dasar yang terdaftar dengan instance Nacos mandiri disediakan.
Salin kode YAML berikut untuk menerapkan versi dasar Aplikasi A, Aplikasi B, dan Aplikasi C.
Salin kode YAML berikut untuk membuat layanan untuk Aplikasi A yang berfungsi sebagai aplikasi ingress.
Langkah 2: Gunakan gateway cloud-native MSE untuk memaparkan Aplikasi A
Kasus 1: Memaparkan layanan baru
Jika Anda belum menambahkan Aplikasi A ke gateway cloud-native, lakukan langkah-langkah berikut untuk memaparkan Aplikasi A:
Masuk ke MSE console. Di panel navigasi di sebelah kiri, pilih Gateway Cloud-native > Gateway. Di halaman Gateway, klik nama gateway cloud-native yang dibuat. Di panel navigasi di sebelah kiri, klik Routes. Di halaman Rute, klik tab Services. Lalu, klik Add Service. Untuk informasi lebih lanjut, lihat Tambah layanan.
Gunakan klaster ACK sebagai sumber layanan
Service Source: Pilih Container Service.
Namespace: Pilih default.
Services: Pilih sc-a.
Gunakan instance MSE Nacos sebagai sumber layanan
Service Source: Pilih MSE Nacos.
Namespace: Pilih public.
Services: Pilih sc-A.
Di halaman Routes, klik tab Routes. Di tab Rute, klik Add Route untuk membuat rute untuk sc-a atau sc-A dan gunakan rute tersebut untuk memaparkan layanan. Untuk informasi lebih lanjut, lihat Buat rute.
Parameter
Deskripsi
Path
Pilih Prefix dari daftar drop-down kondisi pencocokan dan masukkan /a di bidang path.
Titik Rute
Pilih Layanan Tunggal.
Layanan Backend
Pilih sc-A.
Kasus 2: Memaparkan layanan yang ada
Untuk layanan yang diimpor, Anda dapat melakukan langkah-langkah berikut untuk memaparkan Aplikasi A:
Masuk ke MSE console. Di panel navigasi di sebelah kiri, pilih Gateway Cloud-native > Gateway. Di halaman Gateway, klik nama gateway cloud-native yang dibuat. Di halaman Routes, klik tab Routes. Di tab Rute, modifikasi rute yang ada dan gunakan rute tersebut untuk memaparkan layanan.
Parameter | Deskripsi |
Path | Pilih Prefix dari daftar drop-down kondisi pencocokan dan masukkan /a di bidang path. |
Titik Rute | Pilih Layanan Tunggal. |
Layanan Backend | Pilih sc-A. |
Langkah 3: Uji lalu lintas versi dasar
Masuk ke Konsol MSE. Di bilah navigasi atas, pilih wilayah.
Di panel navigasi sebelah kiri, pilih Cloud-native Gateway > Gateways. Di halaman Gateway, klik ID gateway.
Di panel navigasi sebelah kiri, klik Overview.
Di tab Endpoint, periksa alamat IP masuk dari instance Server Load Balancer (SLB).
Gunakan perintah cURL untuk menguji lalu lintas versi dasar. Hasil pengujian menunjukkan bahwa lalu lintas melewati versi dasar Aplikasi A, Aplikasi B, dan Aplikasi C. Contoh kode berikut memberikan contoh konfigurasi:
# Perintah uji curl x.x.1.1/a # Hasil uji A[10.0.3.178][config=base] -> B[10.0.3.195] -> C[10.0.3.201]Dalam hasil uji, nama Aplikasi B dan Aplikasi C tidak diikuti oleh nomor versi. Hasil uji menunjukkan bahwa lalu lintas melewati versi dasar dari kedua aplikasi tersebut.
2. Bangun lingkungan canary untuk aplikasi bisnis
Dalam contoh ini, versi baru perlu dirilis untuk Aplikasi A dan Aplikasi C secara bersamaan karena peluncuran fitur baru. Anda perlu menggunakan fitur rilis canary end-to-end untuk menguji versi canary Aplikasi A dan Aplikasi C.
Langkah 1: Deploy versi canary aplikasi backend
Masuk ke Konsol ACK.
Di panel navigasi sebelah kiri, klik Clusters. Lalu, klik nama klaster yang ingin Anda kelola.
Di panel navigasi sebelah kiri, pilih .
Di bagian atas halaman, pilih namespace klaster, dan klik Create from YAML.
Gunakan kode YAML berikut untuk menerapkan versi canary Aplikasi A dan Aplikasi C.
Gunakan instance MSE Nacos sebagai sumber layanan
PentingGanti {alamat server nacos} di kode dengan endpoint internal instance MSE Nacos yang Anda buat dan hapus tanda kurung kurawal
{}.Gunakan klaster ACK sebagai sumber layanan
PentingDalam kode YAML, endpoint versi canary yang terdaftar dengan instance Nacos mandiri disediakan. Dibandingkan dengan kode YAML versi dasar,
alicloud.service.tag:grayditambahkan ke kode YAML versi canary.
Langkah 2: Buat grup jalur untuk lingkungan canary
Masuk ke Konsol MSE, dan pilih wilayah di bilah navigasi atas.
Di panel navigasi sebelah kiri, pilih .
Klik Create Lane Group and Lane. Jika grup jalur tersedia di ruang nama mikro yang Anda pilih, klik Create Lane Group.
Di panel Create Lane Group, konfigurasikan parameter dan klik OK.
Parameter
Deskripsi
Nama Grup Jalur
Masukkan nama untuk grup jalur.
Jenis Ingress
Pilih Gateway Cloud-native MSE.
Ingress Gateway
Pilih gateway cloud-native tujuan.
Aplikasi Grup Jalur
Pilih spring-cloud-a, spring-cloud-b, dan spring-cloud-c.

Setelah grup jalur dibuat, Anda dapat melihat grup jalur di bagian Lane Group pada halaman Full link Grayscale. Untuk memodifikasi informasi tentang grup jalur, klik ikon
.
Langkah 3: Buat jalur untuk lingkungan canary
Saat menggunakan fitur rilis canary end-to-end, Anda perlu menambahkan
tagke node aplikasi canary untuk membedakan node tersebut dari node lainnya. Di lingkungan kontainer, Anda perlu menambahkanalicloud.service.tag: ${tag}kespec.template.metadata.labels. Di lingkungan Elastic Compute Service (ECS), Anda perlu menambahkan parameter startup Java-Dalicloud.service.tag=${tag}.MSE mendukung mode routing jalur berikut jika Anda memilih MSE Cloud-native Gateway untuk Jenis Ingress saat membuat grup jalur terkait.
Routing berdasarkan konten permintaan: Jika konten permintaan dapat digunakan untuk mengidentifikasi node canary, kami sarankan Anda menggunakan mode routing jalur ini. Jika konten permintaan tidak dapat digunakan untuk mengidentifikasi node canary, kami juga sangat menyarankan Anda menambahkan pengenal tersebut dengan menggunakan modifikasi sistem untuk mencapai efek rilis canary yang lebih baik. Misalnya, Anda dapat menggunakan mode ini untuk memastikan bahwa permintaan canary dilewatkan ke lingkungan yang sama.
Routing berdasarkan persentase: Jika konten permintaan tidak dapat digunakan untuk mengidentifikasi node canary dan sistem warisan tidak dapat dimodifikasi, Anda dapat menggunakan mode ini. Namun, jika Anda menggunakan mode ini, permintaan dari sumber yang sama mungkin diarahkan ke node aplikasi di jalur yang berbeda. Akibatnya, permintaan canary mungkin dilewatkan ke lingkungan yang berbeda.
Mode routing jalur harus sama untuk jalur dalam grup jalur. Anda hanya dapat memodifikasi mode routing jalur saat membuat jalur pertama dalam grup jalur.
Di bagian bawah halaman Grayscale tautan penuh, klik Buat Jalur Pertama Split. Jika jalur tersedia di ruang layanan mikro yang Anda pilih, klik Buat Jalur.
Di panel Buat Jalur, konfigurasikan parameter dan klik OK.
Buat jalur yang menggunakan routing berdasarkan konten permintaan
Parameter
Deskripsi
Add Node Tag
Tambahkan tag secara manual ke node aplikasi canary Anda untuk membedakan node tersebut dari node lainnya.
Enter lane information
Tag Jalur: tag permintaan yang dikirim ke node aplikasi di jalur.
Konfirmasi Hubungan Pencocokan: memungkinkan Anda memeriksa apakah jumlah node aplikasi yang diberi tag sesuai dengan yang diharapkan.
Tambah Aturan Rilis Canary
Tentukan aturan untuk merutekan permintaan ke node aplikasi di jalur.
Mode Rilis Canary: Pilih Canary Release by Content.
Kondisi Rilis Canary: Pilih Memenuhi Semua Kondisi.
Rincian konfigurasi dalam contoh ini:
Jenis Parameter: Setel parameter ini ke Header.
Parameter: Setel parameter ini ke canary.
Kondisi: Setel parameter ini ke ==.
Nilai: Setel parameter ini ke gray.
Mode routing jalur
Kondisi Rilis Canary
Efek
Memenuhi Semua Kondisi
Lalu lintas yang memenuhi semua kondisi diarahkan ke jalur terkait.
Memenuhi Salah Satu Kondisi
Lalu lintas yang memenuhi salah satu kondisi berikut diarahkan ke jalur terkait.
Deskripsi kondisi
Kondisi
Deskripsi
Contoh rilis canary end-to-end
Contoh permintaan gateway cloud-native
==
Pencocokan tepat. Kondisi terpenuhi jika nilai lalu lintas dan nilai kondisi persis sama.


!=
Pencocokan tidak sama. Kondisi terpenuhi jika nilai lalu lintas dan nilai kondisi tidak sama.


in
Pencocokan inklusif. Kondisi terpenuhi jika nilai lalu lintas termasuk dalam daftar tertentu.


Persentase
Pencocokan persentase. Prinsip: Kondisi terpenuhi jika 'hash(get(key)) % 100 < value'.


Pencocokan ekspresi reguler
Pencocokan ekspresi reguler. Kondisi terpenuhi jika nilai lalu lintas cocok berdasarkan aturan ekspresi reguler yang ditentukan.


Buat jalur yang menggunakan routing berdasarkan persentase
CatatanUntuk membuat jalur yang menggunakan routing berdasarkan persentase, pastikan bahwa versi ack-onepilot adalah 3.0.18 atau lebih baru dan versi agen adalah 3.2.3 atau lebih baru.
Parameter
Deskripsi
Add Node Tag
Tambahkan tag secara manual ke node aplikasi canary Anda untuk membedakan node tersebut dari node lainnya.
Enter lane information
Tag Jalur: tag permintaan yang dikirim ke node aplikasi di jalur.
Konfirmasi Hubungan Pencocokan: memungkinkan Anda memeriksa apakah jumlah node aplikasi yang diberi tag sesuai dengan yang diharapkan.
Konfigurasikan Routing dan Aturan Rilis Canary
Tentukan aturan untuk merutekan permintaan ke node aplikasi di jalur.
Canary Release Mode: Pilih Canary Release by Ratio.
Flow ratio: Masukkan 30. Unit: persentase (%).
CatatanAnda juga dapat mengonfigurasi persentase lalu lintas yang berbeda untuk setiap rute dasar gateway. Jika Anda mengaktifkan fitur ini, Anda harus memastikan bahwa jumlah persentase lalu lintas rute dasar gateway yang dikonfigurasi untuk semua grup jalur tidak melebihi 100%.
Setelah jalur dibuat, Anda dapat melihat detail jalur di bagian Distribusi Lalu Lintas pada halaman Full link Grayscale. Anda juga dapat melakukan operasi berikut:
Cari jalur dan klik Aktifkan di kolom Tindakan untuk membuat jalur berlaku. Dengan cara ini, lalu lintas diarahkan berdasarkan konfigurasi jalur. Lalu lintas yang memenuhi aturan routing diprioritaskan untuk diarahkan ke versi aplikasi yang tag-nya sesuai dengan jalur. Jika versi aplikasi yang diberi tag tidak ada, lalu lintas diarahkan ke versi aplikasi yang tidak diberi tag.
Cari jalur dan klik Nonaktifkan di kolom Tindakan untuk menonaktifkan jalur yang dibuat. Lalu lintas aplikasi kemudian diarahkan ke versi aplikasi yang tidak diberi tag.
Klik ikon
untuk melihat persentase lalu lintas jalur.Klik ikon
untuk mengonfigurasi status aplikasi di jalur.
Langkah 4: Uji lalu lintas versi canary
Uji jalur yang menggunakan routing berdasarkan konten permintaan
Gunakan perintah cURL untuk menguji lalu lintas canary. Dalam hasil uji, lalu lintas melewati versi canary Aplikasi A dan Aplikasi C. Aplikasi B tidak memiliki versi canary, dan lalu lintas secara otomatis diarahkan ke versi dasar Aplikasi B.
# Perintah uji
curl -H "canary: gray" x.x.x.x/a
# Hasil uji
Agray[10.0.3.177][config=base] -> B[10.0.3.195] -> Cgray[10.0.3.180]Uji jalur yang menggunakan routing berdasarkan persentase
Anda dapat menjalankan skrip Python berikut untuk menguji distribusi permintaan yang dirutekan berdasarkan nilai persentase. Anda harus menginstal paket requests dan mengganti x.x.x.x dengan alamat IP instance SLB yang terkait dengan gateway cloud-native.
Hasil berikut menunjukkan bahwa sekitar 30% permintaan diarahkan ke lingkungan canary.

(Opsional) 3. Implementasi observabilitas
Jika terjadi masalah pada aplikasi, Anda dapat menggunakan kemampuan observabilitas yang disediakan di konsol MSE untuk melihat data abnormal. Ini membantu Anda dengan cepat menemukan masalah.
Observabilitas pada gateway cloud-native
Di halaman Routes dari gateway cloud-native MSE, klik tab Services. Di tab Layanan, klik nama layanan yang ingin Anda lihat. Di halaman yang muncul, lihat data metrik setiap layanan di tab Monitor.

Observabilitas pada Microservices Governance
Di halaman Full link Grayscale dari MSE Microservices Governance, klik aplikasi tujuan. Di bagian QPS Data, Anda dapat melihat data lalu lintas versi dasar (versi tanpa tag) dan versi canary dari jalur terkait.

Total QPS: total QPS aplikasi.
Exception QPS: jumlah permintaan error dari aplikasi.
GrayQPS: QPS versi canary aplikasi.
Observabilitas pada ARMS
Jika aplikasi Anda terhubung ke Application Real-Time Monitoring Service (ARMS), Anda dapat melihat data lalu lintas lingkungan canary di tab Grayscale tautan penuh pada halaman Analisis Berbasis Skenario di konsol ARMS dan menentukan apakah akan melakukan rollback atau melanjutkan proses rilis.
