Anda dapat mengontrol lalu lintas dalam skenario asinkron, seperti antrian pesan, untuk menerapkan peluncuran kanari ujung ke ujung tanpa memodifikasi kode bisnis. Topik ini menjelaskan cara menggunakan MSE Microservices Governance untuk menerapkan peluncuran kanari ujung ke ujung pada aplikasi RocketMQ.
Prasyarat
Arsitektur demo
Topik ini memberikan contoh penerapan aplikasi di Konsol Container Service for Kubernetes (ACK). Anda juga dapat menggunakan kubectl untuk menerapkan aplikasi dan mensimulasikan rantai panggilan dunia nyata. Gambar berikut menunjukkan arsitektur aplikasi demo. Panggilan antaraplikasi menggunakan Spring Cloud dan Dubbo, dua framework layanan mikro paling umum. Dalam arsitektur ini, Aplikasi C menghasilkan pesan RocketMQ yang dikonsumsi oleh Aplikasi A. Saat Aplikasi A mengonsumsi pesan, ia memulai panggilan baru. Aplikasi-aplikasi ini didasarkan pada implementasi standar Spring Cloud, Dubbo, dan RocketMQ.

Langkah 1: Onboard aplikasi ke MSE Microservices Governance
-
Aktifkan Microservices Governance untuk aplikasi layanan mikro di kluster Container Service for Kubernetes (ACK). Anda dapat memilih metode yang sesuai berdasarkan kebutuhan bisnis Anda. Untuk informasi selengkapnya, lihat Aktifkan Microservices Governance untuk aplikasi layanan mikro Java di kluster ACK atau ACS.
Aktifkan Microservices Governance untuk aplikasi dalam namespace ACK
-
Login ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
-
Di panel navigasi kiri, pilih Microservices Governance > Application Governance.
-
Di halaman Application list, klik ACK Application Access.
-
Pada dialog ACK Application Access, konfigurasikan parameter dan klik OK.
Atur Onboarding Type menjadi Namespace atau Single Application. Dari daftar drop-down Container Cluster Namespace, pilih namespace target, misalnya
default. Di bidang Governance Namespace, masukkan nama untuk namespace yang sesuai.Parameter
Deskripsi
Cluster type
Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.
CatatanJika Anda belum mengotorisasi Container Service for Kubernetes untuk memanggil MSE, klik Authorize Now untuk memberikan izin yang diperlukan.
Cluster Name/ID
Pilih Cluster Name/ID dari kluster yang ingin Anda hubungkan ke pusat governance MSE. Anda dapat mencari kluster berdasarkan kata kunci.
ack-onepilot
Menampilkan status komponen ack-onepilot. Untuk informasi lebih lanjut tentang komponen ini dan cara meningkatkannya, lihat komponen ack-onepilot dan Instal dan tingkatkan komponen governance layanan mikro MSE.
-
Jika ack-onepilot belum terinstal, sistem akan secara otomatis memulai instalasi setelah Anda memilih kluster dan menampilkan pesan "The installation process takes about 1 minute. Wait for a while."
Jika Anda menggunakan Pengguna RAM dan menerima error izin, login ke Konsol Container Service for Kubernetes. Buka kluster target, lalu di panel navigasi kiri, klik Add-ons. Temukan ack-onepilot dan klik Install.
-
Jika ack-onepilot sudah terinstal, UI akan menampilkan versi yang terinstal, misalnya,
Installed 4.2.0.
Catatan-
Anda dapat melihat detail komponen ack-onepilot dengan login ke Konsol Container Service for Kubernetes, buka kluster target, lalu pilih Operations > Add-ons.
-
Setelah ack-onepilot terinstal, komponen tersebut secara otomatis menyuntikkan Java agent. Hal ini dapat meningkatkan waktu startup aplikasi hingga 10 detik.
-
Saat melakukan koneksi berdasarkan namespace, jika kluster target Anda tidak berada di salah satu wilayah yang tercantum, pastikan kluster tersebut memiliki akses jaringan publik dan dapat terhubung ke acm.aliyun.com:8080: Tiongkok (Qingdao), Tiongkok (Hangzhou), Tiongkok (Beijing), Tiongkok (Shanghai), Shanghai Finance Cloud, Tiongkok (Shenzhen), Hong Kong (Tiongkok), Singapura, Jerman (Frankfurt), Australia (Sydney), AS (Silicon Valley), dan AS (Virginia).
Access Type
Pilih Namespace Access.
Cluster Namespace
Pilih Cluster Namespace.
Microservices Governance Namespace
Pilih Microservices Governance Namespace.
-
Aktifkan Microservices Governance untuk aplikasi
-
Login ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
-
Di panel navigasi kiri, pilih Microservices Governance > Application Governance.
-
Di halaman Application list, klik ACK Application Access.
-
Pada dialog ACK Application Access, konfigurasikan parameter dan klik OK.
Atur Onboarding Type menjadi Single Application. Di bagian Edit Labels (YAML format), tambahkan label berikut di bawah
spec.template.metadata.labelspada file YAML Deployment aplikasi:msePilotAutoEnable: "on"untuk mengaktifkan governance layanan mikro,mseNamespace: defaultuntuk menentukan namespace MSE, danmsePilotCreateAppName: "your-deployment-name"untuk mengatur nama aplikasi. Gantiyour-deployment-namedengan nama Deployment yang sebenarnya.Parameter
Deskripsi
Cluster type
Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.
CatatanJika Anda belum mengotorisasi Container Service for Kubernetes untuk memanggil MSE, klik Authorize Now untuk memberikan izin yang diperlukan.
Cluster Name/ID
Pilih Cluster Name/ID dari kluster yang ingin Anda hubungkan ke pusat governance MSE. Anda dapat mencari kluster berdasarkan kata kunci.
ack-onepilot
Menampilkan status komponen ack-onepilot. Untuk informasi lebih lanjut tentang komponen ini dan cara meningkatkannya, lihat komponen ack-onepilot dan Instal dan tingkatkan komponen governance layanan mikro MSE.
-
Jika ack-onepilot belum terinstal, sistem akan secara otomatis memulai instalasi setelah Anda memilih kluster dan menampilkan pesan "The installation process takes about 1 minute. Wait for a while."
Jika Anda menggunakan Pengguna RAM dan menerima error izin, login ke Konsol Container Service for Kubernetes. Buka kluster target, lalu di panel navigasi kiri, klik Add-ons. Temukan ack-onepilot dan klik Install.
-
Jika ack-onepilot sudah terinstal, UI akan menampilkan versi yang terinstal, misalnya,
Installed 4.2.0.
Catatan-
Anda dapat melihat detail komponen ack-onepilot dengan login ke Konsol Container Service for Kubernetes, buka kluster target, lalu pilih Operations > Add-ons.
-
Setelah ack-onepilot terinstal, komponen tersebut secara otomatis menyuntikkan Java agent. Hal ini dapat meningkatkan waktu startup aplikasi hingga 10 detik.
-
Saat melakukan koneksi berdasarkan namespace, jika kluster target Anda tidak berada di salah satu wilayah yang tercantum, pastikan kluster tersebut memiliki akses jaringan publik dan dapat terhubung ke acm.aliyun.com:8080: Tiongkok (Qingdao), Tiongkok (Hangzhou), Tiongkok (Beijing), Tiongkok (Shanghai), Shanghai Finance Cloud, Tiongkok (Shenzhen), Hong Kong (Tiongkok), Singapura, Jerman (Frankfurt), Australia (Sydney), AS (Silicon Valley), dan AS (Virginia).
Access Type
Pilih Single Application Access.
Access Procedure
Ikuti langkah-langkah berikut.
Step 1: Di Konsol Container Service for Kubernetes, buka halaman Workloads > Deployments kluster Anda dan alihkan ke namespace aplikasi Anda.
Step 2: Temukan aplikasi target dan klik Edit YAML.
Step 3: Edit bidang
labelsseperti pada contoh berikut dan klik Update.spec: template: metadata: labels: # Setel ke "on" untuk mengaktifkan koneksi. Nilai harus diapit tanda kutip ganda. msePilotAutoEnable: "on" # Tentukan namespace governance target. Jika namespace tidak ada, akan dibuat secara otomatis. mseNamespace: default # Tentukan nama aplikasi yang akan ditampilkan di MSE. Nilai harus diapit tanda kutip ganda. msePilotCreateAppName: "your-deployment-name" -
-
Langkah 2: Terapkan aplikasi
Terapkan empat aplikasi bisnis (spring-cloud-zuul, spring-cloud-a, spring-cloud-b, dan spring-cloud-c), Nacos Server untuk registrasi layanan, dan RocketMQ Server untuk pengiriman pesan. Anda dapat menemukan kode sumber komponen-komponen ini di demo ini.
Aplikasi spring-cloud-zuul meneruskan permintaan dari path /A/dubbo ke spring-cloud-a. Kemudian, spring-cloud-a menggunakan protokol Dubbo untuk memanggil spring-cloud-b, yang kemudian memanggil spring-cloud-c menggunakan protokol yang sama. Setelah menerima permintaan, spring-cloud-c menghasilkan pesan dan mengembalikan tag lingkungan serta alamat IP-nya. Pesan-pesan ini dikonsumsi oleh aplikasi spring-cloud-a. Saat mengonsumsi pesan, spring-cloud-a memanggil spring-cloud-b menggunakan Spring Cloud, yang kemudian memanggil spring-cloud-c. Hasil akhirnya ditulis ke log spring-cloud-a.
# Saat permintaan dikirim ke /A/dubbo, nilai yang dikembalikan adalah: A[10.25.xx.xx] -> B[10.25.xx.xx] -> C[10.25.xx.xx]
# Pada saat yang sama, setelah Aplikasi A menerima pesan, log berikut dihasilkan:
2021-12-28 10:58:50.301 INFO 1 --- [essageThread_15] c.a.mse.demo.service.MqConsumer
: topic:TEST_MQ,producer:C[10.25.xx.xx],invoke result:A[10.25.xx.xx] -> B[10.25.xx.xx] -> C[10.25.xx.xx]
-
Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Cluster List, klik nama kluster tujuan atau klik Details di kolom Actions.
Di panel navigasi kiri halaman manajemen kluster, pilih .
-
Di halaman Stateless, pilih Namespaces dan klik Create from YAML. Gunakan file YAML berikut untuk menerapkan aplikasi:
-
Jalankan perintah berikut untuk memeriksa apakah aplikasi berhasil diterapkan:
kubectl get svc,deployOutput 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: Aktifkan rilis kanari pesan
Asumsikan bahwa spring-cloud-c menghasilkan pesan dan spring-cloud-a mengonsumsinya. Aktifkan rilis kanari untuk pengiriman pesan pada kedua aplikasi tersebut.
-
Untuk mengaktifkan atau menonaktifkan fitur rilis kanari untuk pengiriman pesan, Anda harus menerapkan ulang aplikasi di Konsol ACK agar perubahan berlaku.
-
Fitur ini hanya berlaku jika diaktifkan untuk produsen pesan dan konsumen pesan.
-
Fitur ini hanya mendukung RocketMQ, termasuk Apache RocketMQ open-source dan Alibaba Cloud Message Queue for Apache RocketMQ.
-
Jika Anda menggunakan Apache RocketMQ open-source, RocketMQ Server dan RocketMQ Client harus versi 4.5.0 atau lebih baru.
-
Jika Anda menggunakan Alibaba Cloud Message Queue for Apache RocketMQ 4.x, Anda harus menggunakan Edisi Platinum untuk memfilter pesan berdasarkan ekspresi SQL-92. Pembatasan ini tidak berlaku jika Anda menggunakan filter sisi klien atau Message Queue for Apache RocketMQ 5.x.
-
Jika Anda menggunakan Ons Client, Anda harus menggunakan versi 1.8.0.Final atau lebih baru.
-
-
Setelah Anda mengaktifkan rilis kanari untuk pengiriman pesan, MSE memodifikasi nama kelompok konsumen. Misalnya, jika kelompok konsumen awal adalah
group1dan tag lingkungan adalahgray, kelompok konsumen baru menjadigroup1_gray. Jika Anda menggunakan Alibaba Cloud Message Queue for Apache RocketMQ, Anda harus membuat kelompok baru ini terlebih dahulu. -
Secara default, MSE menggunakan standar SQL-92 untuk memfilter pesan. Jika Anda menggunakan Apache RocketMQ open-source, Anda harus mengaktifkan filter SQL-92 di server dengan menambahkan
enablePropertyFilter=trueke filebroker.conf. -
Jika skenario Anda tidak mendukung filter SQL-92, Anda dapat menggunakan kelas
FilterMessageHookuntuk filter sisi klien. Metode ini mengharuskan Anda mengaktifkan rilis kanari untuk pengiriman pesan dan memilih opsi filter sisi klien untuk semua aplikasi. Namun, pendekatan ini tidak disarankan untuk lingkungan produksi karena memproses semua pesan di setiap lingkungan, yang memberikan beban berat pada produsen dan konsumen.
-
Login ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
-
Di panel navigasi kiri, pilih Microservices Governance > Application Governance.
-
Di halaman Application list, klik kartu resource aplikasi yang diinginkan. Di panel navigasi kiri, klik Traffic management.
-
Di tab Canary Release for Messaging, aktifkan sakelar dan klik OK.
Konfigurasikan Tags Ignored by Untagged Environment menjadi
gray, dan atur Message Canary Release Filter menjadi Server-side Filtering (Recommended). -
Di Konsol ACK, terapkan ulang aplikasi di Konsol ACK agar konfigurasi berlaku.
Langkah 4: Terapkan versi aplikasi baru
Terapkan versi kanari aplikasi: spring-cloud-a-gray, spring-cloud-b-gray, dan spring-cloud-c-gray.
-
Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Cluster List, klik nama kluster tujuan atau klik Details di kolom Actions.
Di panel navigasi kiri halaman manajemen kluster, pilih .
-
Di halaman Stateless, pilih Namespaces dan klik Create from YAML. Gunakan file YAML berikut untuk menerapkan aplikasi:
Langkah 5: Rutekan traffic dan verifikasi
-
Login ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
-
Di panel navigasi kiri, pilih Microservices Governance > Application Governance.
-
Klik kartu resource untuk aplikasi
spring-cloud-a. Di halaman Application Overview, amati grafik QPS Trend Chart untuk memastikan semua traffic diarahkan ke lingkungan dasar aplikasispring-cloud-a, yaitu versi stabil. -
Di panel navigasi kiri, klik Traffic management, lalu klik tab Tag-based Routing. Di kolom Traffic Rule untuk tag
gray, klik Add. -
Di panel Create Tag-Based Routing, konfigurasikan aturan traffic, lalu klik OK.
Dalam contoh ini, aturan traffic diatur ke
name=xiaoming. Untuk informasi selengkapnya tentang cara mengonfigurasi aturan traffic, lihat Konfigurasi routing berbasis tag.Di halaman Create Tag Route, konfigurasikan pengaturan berikut:
Route Name: test-a
Application: spring-cloud-a
Tag: gray
Link Delivery: Diaktifkan
Framework Type: Spring Cloud
Path: /dubbo
Condition Mode: Semua kondisi harus dipenuhi
Setelah aturan traffic berlaku, Anda dapat melihat distribusi traffic di halaman Application Overview.
-
Di tab Tag-based Routing, klik nama aturan yang terkait dengan tag gray. Di panel Rule details yang muncul, klik Edit. Di panel Edit Tag-Based Routing, aktifkan Trace Propagation dan klik OK.
CatatanSetelah Anda mengaktifkan propagasi konteks, traffic kanari yang sesuai dengan aturan
name=xiaomingakan menyebar ke seluruh rantai panggilan. Anda tidak perlu mengonfigurasi aturan untuk setiap aplikasi. -
Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Klik layanan zuul-slb. Di bagian Basic Information, klik alamat di samping External IP.
-
Di halaman pemanggilan layanan, masukkan /A/dubbo?name=xiaoming dan klik Start Call.
Peluncuran kanari ujung ke ujung kini aktif.
Di halaman pengujian, masukkan URL
/A/dubbo?name=xiaomingdan klik Start Invocation. Log pemanggilan menunjukkan semua permintaan diarahkan melalui node kanari: Agray[10.5.117.199] → Bgray[10.5.117.200] → Cgray[10.5.117.157].Gambar berikut menunjukkan data permintaan untuk aplikasi spring-cloud-b.

Langkah 6: Sesuaikan filter tag pesan dan verifikasi
-
Login ke Konsol MSE Microservices Governance.
-
Di panel navigasi kiri, pilih , lalu klik kartu resource untuk aplikasi spring-cloud-a.
-
Di panel navigasi kiri, klik Traffic management, lalu klik tab Canary Release for Messaging.
-
Di tab Canary Release for Messaging, klik Edit di samping Tags Ignored in Base Environment. Di kotak input, pilih
graydan klik OK.Memilih
grayuntuk parameter Tags to ignore in the base environment berarti pesan dengan tag lingkungangrayhanya dapat dikonsumsi olehspring-cloud-a-graydan tidak olehspring-cloud-a. Konfigurasi untuk parameter Tags to ignore in the base environment berlaku secara dinamis, dan Anda tidak perlu melakukan restart.CatatanSecara default, node lingkungan dasar mengonsumsi pesan dari semua lingkungan. Untuk mencegahnya mengonsumsi pesan yang dihasilkan oleh lingkungan bertag tertentu, cukup konfigurasikan parameter Tags to be ignored by the base environment.
-
Login ke Konsol ACK dan lihat log untuk aplikasi spring-cloud-a guna memverifikasi konfigurasi.
Log menunjukkan bahwa sebelum perubahan ini, lingkungan dasar mengonsumsi pesan dari lingkungan
graydan lingkungan dasar. Setelah mengatur parameter Tags Ignored by Base Environment menjadigray, lingkungan dasar hanya mengonsumsi pesan yang dihasilkan di lingkungan dasar.Di log MqConsumer container spring-cloud-a, pesan kanari dirutekan melalui Bgray→Cgray, sedangkan pesan garis dasar dirutekan melalui A→B→C, mengikuti jalur yang terpisah.
2021-12-28 11:51:47.880 INFO 1 --- [essageThread_11] c.a.mse.demo.service.MqConsumer : topic:TEST_MQ,producer:Cgray[10.xxx 2],invoke result:A[10.xxx,xxx100] -> Bgray[xxx] -> Cgray[xxx] 2021-12-28 11:51:47.942 INFO 1 --- [essageThread_10] c.a.mse.demo.service.MqConsumer : topic:TEST_MQ,producer:C[10.xxx],invoke result:A[10.xxx 00] -> B[1 0.25.xxx] -> C[xxx 7] 2021-12-28 11:51:48.783 INFO 1 --- [MessageThread_8] c.a.mse.demo.service.MqConsumer : topic:TEST_MQ,producer:C[10.2xxx 7],invoke result:A[10.xxx] -> B[1 0.25xxx] -> C[10.xxx 7] 2021-12-28 11:51:48.885 INFO 1 --- [essageThread_12] c.a.mse.demo.service.MqConsumer : topic:TEST_MQ,producer:Cgray[10.2xxx 2],invoke result:A[10.2xxx] -> Bgray[10.25 xxx] -> Cgray[10.25xxx102] 2021-12-28 11:51:50.908 INFO 1 --- [essageThread_17] c.a.mse.demo.service.MqConsumer : topic:TEST_MQ,producer:C[10.xxx.157],invoke result:A[10.2xxx 00] -> B[1 0.25.xxx] -> C[10.2xxx57] 2021-12-28 11:51:50.909 INFO 1 --- [essageThread_16] c.a.mse.demo.service.MqConsumer : topic:TEST_MQ,producer:Cgray[10.25.xxx 2],invoke result:A[10.2xxx100] -> Bgray[10.xxx25] -> Cgray[10.xxx.02] 2021-12-28 11:51:51.642 INFO 1 --- [essageThread_14] c.a.mse.demo.service.MqConsumer : topic:TEST_MQ,producer:Cgray[10.25xxx],invoke result:A[10.25.xxx] -> Bgray[10.xxx.25] -> Cgray[10.xxx 102] 2021-12-28 11:51:51.684 INFO 1 --- [essageThread_15] c.a.mse.demo.service.MqConsumer : topic:TEST_MQ,producer:C[10.25xxx57],invoke result:A[10.xxx0] -> B[1 0.25.xxx] -> C[10.xxx 7] 2021-12-28 11:51:52.765 INFO 1 --- [essageThread_13] c.a.mse.demo.service.MqConsumer : topic:TEST_MQ,producer:C[10.25.xxx],invoke result:A[10.25.xxx] -> B[1