Pengendalian trafik dalam skenario asinkron, seperti yang melibatkan antrian pesan, memungkinkan Anda menerapkan peluncuran kanari ujung ke ujung tanpa mengubah kode bisnis. Topik ini menjelaskan cara menggunakan Microservices Engine (MSE) untuk menerapkan peluncuran kanari ujung ke ujung berdasarkan Message Queue for Apache RocketMQ.
Prasyarat
Buat kluster Container Service for Kubernetes (ACK) yang dikelola. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola.
Arsitektur demo
Topik ini menggunakan aplikasi yang diterapkan di konsol Container Service for Kubernetes (ACK) sebagai contoh. Anda juga dapat menggunakan kubectl untuk menerapkan aplikasi dan mensimulasikan rantai panggilan nyata. Gambar berikut menunjukkan arsitektur aplikasi demo. Panggilan antar-aplikasi mencakup panggilan Spring Cloud dan Dubbo, yang merupakan dua kerangka kerja mikroservis paling umum. Aplikasi C menghasilkan pesan RocketMQ yang dikonsumsi oleh Aplikasi A. Saat Aplikasi A mengonsumsi pesan tersebut, aplikasi ini juga memulai panggilan baru. Aplikasi-aplikasi ini didasarkan pada penggunaan standar Spring Cloud, Dubbo, dan RocketMQ.

Langkah 1: Menghubungkan aplikasi ke Governance Mikroservis MSE
Aktifkan Governance Mikroservis untuk aplikasi mikroservis di kluster Container Service for Kubernetes (ACK). Anda dapat memilih metode yang sesuai berdasarkan kebutuhan bisnis Anda. Untuk informasi selengkapnya, lihat Aktifkan Governance Mikroservis untuk aplikasi mikroservis Java di kluster ACK atau ACS.
Aktifkan Governance Mikroservis untuk aplikasi dalam namespace ACK
Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
Di panel navigasi sebelah kiri, pilih Microservices Governance > Application Governance.
Di halaman Application list, klik ACK Application Access.
Pada kotak dialog ACK Application Access, konfigurasikan parameter dan klik OK.

Parameter
Deskripsi
Cluster type
Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.
CatatanJika Anda belum memberikan izin Container Service for Kubernetes untuk memanggil Microservices Engine, klik Harap Otorisasi untuk memberikan izin tersebut.
Cluster Name/ID
Pilih nama atau ID Cluster Name/ID yang ingin Anda hubungkan ke governance mikroservis MSE. Anda dapat mencari kluster berdasarkan kata kunci.
ack-onepilot
Status komponen ack-onepilot. Untuk informasi selengkapnya tentang komponen ack-onepilot dan cara memutakhirkan komponen tersebut, lihat komponen ack-onepilot dan Instal dan mutakhirkan komponen governance mikroservis MSE.
Jika ack-onepilot belum diinstal, sistem akan menginstalnya secara otomatis setelah Anda memilih kluster. Pesan akan muncul: "The Installation Takes About 1 Minute. Please Wait."
Jika Anda menggunakan Pengguna RAM dan tidak memiliki izin yang diperlukan, masuk ke Konsol Container Service for Kubernetes. Buka halaman detail kluster target. Klik Component Management, temukan ack-onepilot, lalu klik Install.
Jika ack-onepilot sudah diinstal, konsol akan menampilkan "Terinstal" diikuti nomor versinya, misalnya, Terinstal 4.2.0.
CatatanKomponen yang diinstal pada langkah ini adalah ack-onepilot. Anda dapat masuk ke Konsol Container Service for Kubernetes, buka halaman detail kluster target, lalu pilih Operations Management > Component Management untuk melihat detailnya.
Setelah ack-onepilot diinstal, komponen tersebut secara otomatis menyuntikkan agen. Hal ini dapat meningkatkan waktu startup aplikasi hingga 10 detik.
Jika Anda menghubungkan berdasarkan namespace dan kluster target tidak berada di salah satu wilayah berikut, pastikan kluster dapat mengakses Internet dan terhubung ke acm.aliyun.com:8080: Qingdao, Hangzhou, Beijing, Shanghai, Shanghai-Finance Cloud, Shenzhen, Hong Kong (Tiongkok), Singapura, Frankfurt, Sydney, Silicon Valley, dan Virginia.
Access Type
Pilih Namespace Access.
Cluster Namespace
Pilih Cluster Namespace.
Microservices Governance Namespace
Pilih Microservices Governance Namespace.
Aktifkan Governance Mikroservis untuk aplikasi
Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
Di panel navigasi sebelah kiri, pilih Microservices Governance > Application Governance.
Di halaman Application list, klik ACK Application Access.
Pada kotak dialog ACK Application Access, Anda dapat mengonfigurasi parameter dan klik OK.

Parameter
Deskripsi
Cluster type
Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.
CatatanJika Anda belum memberikan izin Container Service for Kubernetes untuk memanggil Microservices Engine, klik Harap Otorisasi untuk memberikan izin tersebut.
Cluster Name/ID
Pilih nama atau ID Cluster Name/ID yang ingin Anda hubungkan ke governance mikroservis MSE. Anda dapat mencari kluster berdasarkan kata kunci.
ack-onepilot
Status komponen ack-onepilot. Untuk informasi selengkapnya tentang komponen ack-onepilot dan cara memutakhirkan komponen tersebut, lihat komponen ack-onepilot dan Instal dan mutakhirkan komponen governance mikroservis MSE.
Jika ack-onepilot belum diinstal, sistem akan menginstalnya secara otomatis setelah Anda memilih kluster. Pesan akan muncul: "The Installation Takes About 1 Minute. Please Wait."
Jika Anda menggunakan Pengguna RAM dan tidak memiliki izin yang diperlukan, masuk ke Konsol Container Service for Kubernetes. Buka halaman detail kluster target. Klik Component Management, temukan ack-onepilot, lalu klik Install.
Jika ack-onepilot sudah diinstal, konsol akan menampilkan "Terinstal" diikuti nomor versinya, misalnya, Terinstal 4.2.0.
CatatanKomponen yang diinstal pada langkah ini adalah ack-onepilot. Anda dapat masuk ke Konsol Container Service for Kubernetes, buka halaman detail kluster target, lalu pilih Operations Management > Component Management untuk melihat detailnya.
Setelah ack-onepilot diinstal, komponen tersebut secara otomatis menyuntikkan agen. Hal ini dapat meningkatkan waktu startup aplikasi hingga 10 detik.
Jika Anda menghubungkan berdasarkan namespace dan kluster target tidak berada di salah satu wilayah berikut, pastikan kluster dapat mengakses Internet dan terhubung ke acm.aliyun.com:8080: Qingdao, Hangzhou, Beijing, Shanghai, Shanghai-Finance Cloud, Shenzhen, Hong Kong (Tiongkok), Singapura, Frankfurt, Sydney, Silicon Valley, dan Virginia.
Access Type
Pilih Single Application Access.
Access Procedure
Ikuti langkah-langkah berikut.
Step 1: Go To The Workloads > Deployments Page Of The Cluster And Switch To The Namespace Of The Application.
Step 2: Find The Application That You Want To Connect And Click "View In YAML".
Step 3: Edit The Labels In The Following Format And Click "Update".
spec: template: metadata: labels: # Tetapkan nilai menjadi "on" untuk mengaktifkan koneksi. Nilai harus diapit tanda kutip ganda. msePilotAutoEnable: "on" # Tentukan namespace governance yang akan dihubungkan. Jika namespace tidak ada, namespace tersebut akan dibuat secara otomatis. mseNamespace: default # Tentukan nama aktual aplikasi yang akan dihubungkan ke MSE. Nama harus diapit tanda kutip ganda. msePilotCreateAppName: "your-deployment-name"
Langkah 2: Menerapkan aplikasi
Terapkan aplikasi spring-cloud-zuul, spring-cloud-a, spring-cloud-b, dan spring-cloud-c, bersama dengan server Nacos dan server RocketMQ. Anda juga dapat langsung mendapatkan kode sumber dari Demo.
Saat aplikasi spring-cloud-zuul menerima permintaan untuk /A/dubbo, aplikasi tersebut meneruskan permintaan ke spring-cloud-a. Kemudian, spring-cloud-a menggunakan protokol Dubbo untuk memanggil spring-cloud-b, yang kemudian memanggil spring-cloud-c. Setelah menerima permintaan, spring-cloud-c menghasilkan pesan dan mengembalikan tag lingkungan serta alamat IP-nya. Pesan-pesan ini kemudian dikonsumsi oleh aplikasi spring-cloud-a. Saat mengonsumsi pesan, spring-cloud-a menggunakan Spring Cloud untuk memanggil spring-cloud-b, yang kemudian memanggil spring-cloud-c. Akhirnya, spring-cloud-a mencatat hasilnya ke log-nya.
# Saat /A/dubbo diakses, nilai kembali adalah: A[10.25.xx.xx] -> B[10.25.xx.xx] -> C[10.25.xx.xx].
# Pada saat yang sama, spring-cloud-a menerima pesan dan mencatat informasi berikut:
2021-12-28 10:58:50.301 INFO 1 --- [essageThread_15] c.a.mse.demo.service.MqConsumer
: topik:TEST_MQ,produsen:C[10.25.xx.xx],hasil pemanggilan:A[10.25.xx.xx] -> B[10.25.xx.xx] -> C[10.25.xx.xx]Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik nama kluster tersebut atau klik Details di kolom Actions. Halaman detail kluster akan muncul.
Di panel navigasi sebelah kiri halaman detail, pilih .
Di halaman Deployments, pilih Namespace dan klik Create From YAML untuk menerapkan aplikasi dengan kode YAML berikut:
Jalankan perintah berikut untuk memeriksa apakah aplikasi telah diterapkan.
kubectl get svc,deployKeluaran yang diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 192.168.xx.xx <none> 4xx/TCP 7d service/mqnamesrv ClusterIP 192.168.xx.xx <none> 98xx/TCP 47h service/nacos-server ClusterIP 192.168.xx.xx <none> 88xx/TCP 47h service/zuul-slb LoadBalancer 192.168.xx.xx 123.56.xx.xx 80:302xxx/TCP 47h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nacos-server 1/1 1 1 4m deployment.apps/rockectmq-broker 1/1 1 1 4m deployment.apps/rocketmq-name-server 1/1 1 1 5m deployment.apps/spring-cloud-a 1/1 1 1 5m deployment.apps/spring-cloud-b 1/1 1 1 5m deployment.apps/spring-cloud-c 1/1 1 1 5m deployment.apps/spring-cloud-zuul 1/1 1 1 5m
Langkah 3: Mengaktifkan rilis canary berbasis pesan RocketMQ untuk aplikasi
Asumsikan spring-cloud-c adalah produsen pesan dan spring-cloud-a adalah konsumen pesan. Aktifkan fitur rilis canary berbasis pesan RocketMQ untuk kedua aplikasi tersebut.
Untuk mengaktifkan atau menonaktifkan fitur rilis canary berbasis pesan RocketMQ, Anda harus menerapkan ulang aplikasi di konsol ACK agar perubahan berlaku.
Fitur rilis canary berbasis pesan hanya berlaku jika diaktifkan untuk kedua pihak, baik produsen maupun konsumen pesan.
Fitur ini saat ini hanya mendukung pesan RocketMQ, termasuk versi open source dan versi komersial Alibaba Cloud.
Jika Anda menggunakan RocketMQ open source, baik Server RocketMQ maupun Klien RocketMQ harus menggunakan versi 4.5.0 atau lebih baru.
Jika Anda menggunakan Message Queue for Apache RocketMQ 4.x Alibaba Cloud, Anda harus menggunakan Edisi Perusahaan untuk menggunakan penyaringan SQL92. Batasan ini tidak berlaku jika Anda menggunakan penyaringan sisi klien atau Message Queue for Apache RocketMQ 5.x Alibaba Cloud.
Jika Anda menggunakan klien ONS, versinya harus 1.8.0.Final atau lebih baru.
Setelah Anda mengaktifkan rilis canary berbasis pesan RocketMQ, MSE memodifikasi kelompok konsumen pesan tersebut. Misalnya, jika kelompok konsumen awal adalah group1 dan tag lingkungannya adalah gray, kelompok tersebut akan diubah menjadi group1_gray setelah fitur diaktifkan. Jika Anda menggunakan Message Queue for Apache RocketMQ Alibaba Cloud, Anda harus membuat kelompok tersebut terlebih dahulu.
Secara default, MSE menggunakan sintaks SQL92 untuk menyaring pesan. Jika Anda menggunakan Apache RocketMQ, Anda harus mengaktifkan penyaringan SQL92 di sisi server dengan menambahkan konfigurasi
enablePropertyFilter=trueke file broker.conf.Jika skenario Anda tidak mendukung penyaringan SQL92, Anda dapat menggunakan FilterMessageHook untuk menyaring pesan di sisi konsumen. Metode ini mengharuskan Anda mengaktifkan rilis canary berbasis pesan di semua aplikasi dan memilih metode penyaringan sisi klien. Karena metode penyaringan sisi konsumen memproses semua pesan di setiap lingkungan, metode ini memberikan beban berat pada produsen dan konsumen pesan. Kami tidak merekomendasikan penggunaan metode ini di lingkungan produksi.
Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
Di panel navigasi sebelah kiri, pilih Microservices Governance > Application Governance.
Di halaman Application list, klik kartu sumber daya aplikasi yang diinginkan. Di panel navigasi sebelah kiri, klik Traffic management.
Di tab Message Grayscale, aktifkan sakelar Aktifkan Grayscale Pesan dan klik OK.

Masuk ke Konsol ACK Konsol ACK dan terapkan ulang aplikasi untuk menerapkan konfigurasi.
Langkah 4: Menerapkan aplikasi versi baru
Terapkan versi baru aplikasi: spring-cloud-a-gray, spring-cloud-b-gray, dan spring-cloud-c-gray.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik nama kluster tersebut atau klik Details di kolom Actions. Halaman detail kluster akan muncul.
Di panel navigasi sebelah kiri halaman detail, pilih .
Di halaman Deployments, pilih Namespace dan klik Create From YAML. Gunakan kode YAML berikut untuk menerapkan aplikasi:
Langkah 5: Mengarahkan trafik dan memverifikasi hasil
Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
Di panel navigasi sebelah kiri, pilih Microservices Governance > Application Governance.
Klik kartu sumber daya untuk aplikasi spring-cloud-a. Di halaman Application Overview, QPS Trend Graph menunjukkan bahwa seluruh trafik diarahkan ke versi garis dasar aplikasi, yaitu versi stabilnya.
Di panel navigasi sebelah kiri, klik Traffic Governance lalu tab Tag-based Routing. Di kolom Traffic Rule untuk tag
gray, klik Add.
Di panel Create Label Route, konfigurasikan aturan trafik dan klik OK.
Dalam contoh ini, kondisi aturan trafik ditetapkan sebagai
name=xiaoming. Untuk informasi selengkapnya tentang cara mengonfigurasi aturan trafik, lihat Konfigurasi routing berbasis tag.
Anda dapat melihat distribusi trafik di halaman Application Overview setelah aturan trafik berlaku.
Di tab Tag-based Routing, klik nama aturan tujuan untuk tag gray. Di panel Rule Details, klik Edit. Di panel Modify Tag-based Routing Rule, aktifkan sakelar Tag Propagation dan klik OK.
CatatanSetelah Anda mengaktifkan propagasi tag, trafik grayscale yang cocok dengan
name=xiaomingakan dilewatkan secara ujung ke ujung, sehingga Anda tidak perlu mengonfigurasi aturan berulang kali.Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel sebelah kiri, pilih .
Klik layanan zuul-slb. Di bawah Basic Information, klik alamat di samping External IP Address (External IP).
Di halaman panggilan layanan, masukkan /A/dubbo?name=xiaoming dan klik Start Call.
Rilis canary ujung ke ujung kini berlaku.

Data trafik untuk aplikasi spring-cloud-b sekarang sebagai berikut:

Langkah 6: Menyesuaikan aturan penyaringan pesan berbasis tag dan memverifikasi hasil
Masuk ke Konsol MSE.
Di panel navigasi sebelah kiri, pilih dan klik kartu sumber daya untuk aplikasi spring-cloud-a.
Di panel navigasi sebelah kiri, klik Traffic Governance lalu klik tab Message Grayscale.
Di tab Message Grayscale, klik tombol Edit di samping Tags To Be Ignored By The Baseline Environment. Pilih
graydi kotak input dan klik OK.Jika Anda memilih
grayuntuk parameter Tag yang Diabaikan di Lingkungan Garis Dasar, pesan dengan tag lingkungan `gray` hanya dapat dikonsumsi oleh `spring-cloud-a-gray`, bukan oleh `spring-cloud-a`. Parameter Tag yang Diabaikan di Lingkungan Garis Dasar berlaku secara dinamis setelah dikonfigurasi, dan Anda tidak perlu me-restart aplikasi.CatatanSecara default, node garis dasar mengonsumsi pesan dari semua lingkungan. Jika Anda tidak ingin node garis dasar mengonsumsi pesan yang dihasilkan oleh lingkungan bertag, Anda hanya perlu mengonfigurasi parameter Tag yang Diabaikan di Lingkungan Garis Dasar.
Masuk ke Konsol ACK untuk melihat log aplikasi spring-cloud-a dan memverifikasi konfigurasi.
Log pada gambar berikut menunjukkan bahwa lingkungan garis dasar dapat mengonsumsi pesan yang dihasilkan di lingkungan gray maupun garis dasar. Setelah Anda mengatur parameter Tag yang Diabaikan di Lingkungan Garis Dasar menjadi `gray`, lingkungan garis dasar hanya mengonsumsi pesan yang dihasilkan di lingkungan garis dasar.
